Summary Files Commits Branches @commit @diff @stats
path: root / src / teaching / upp-2023 / week2 / revision.du
diff options
context:
space:
mode:
1 files changed, 40 insertions, 36 deletions
-rw-r--r--src/teaching/upp-2023/week2/revision.du76
diff --git a/src/teaching/upp-2023/week2/revision.du b/src/teaching/upp-2023/week2/revision.du
index f2d771d..bd9cb2a 100644
--- a/src/teaching/upp-2023/week2/revision.du
+++ b/src/teaching/upp-2023/week2/revision.du
@@ -1,8 +1,11 @@
-# Преговор - УПП, Седмица 2, 13.10.2023
+'def title Преговор - УПП, Седмица 2, 13.10.2023
+'def desc Преговор на материала
+
+# {title}
\n
-[$presentation-controller]
+{presentation-controller}
:title_slide
@@ -13,7 +16,7 @@
## Конвертиране на данни
-[$br3]
+{br3}
:unordered
- Неявно (скрито, експлицитно): компилаторът сам се досеща да промени типа
@@ -32,7 +35,7 @@
:slide
-[$br5]
+{br5}
:unordered
- Със загуба на информация (от по-голям тип в по-малък)
@@ -55,15 +58,15 @@
.p Първо ще ги погледнем чисто теоретично.
-.p [=Внимавайте, те са различни от логическите оператори!=]
+.p {b Внимавайте, те са различни от логическите оператори!}
-.p [=Означавам побитовите числа с водеща буква "b"!=]
-Тоест, числото [`b1001`] е двоичното число [`1001`], което е десетичното число [`9`].
+.p {b Означавам побитовите числа с водеща буква "b"!}
+Тоест, числото {` b1001} е двоичното число {` 1001}, което е десетичното число {` 9}.
-[$br3]
+{br3}
:unordered
-- Отрицание/негация, [`~`]: обръща 0 в 1 и 1 в 0
+- Отрицание/негация, {` ~}: обръща 0 в 1 и 1 в 0
```
~ b0010 = b1101
@@ -72,19 +75,19 @@
:slide
:unordered
-- Побитово "и", [`&`]: за два бита, ако и двете са 1, връща 1, иначе връща 0
+- Побитово "и", {` &}: за два бита, ако и двете са 1, връща 1, иначе връща 0
```
3 & 5 = 1
b0011 & b0101 = b0001
-- Побитово "или", [`|`]: за два бита, ако и двете са 0, връща 0, иначе връща 1
+- Побитово "или", {` |}: за два бита, ако и двете са 0, връща 0, иначе връща 1
```
3 | 5 = 7
b0011 | b0101 = b0111
-- Изключващо "или", [`^`]: ако само един от двата бита е 1, връща 1, иначе връща 0
+- Изключващо "или", {` ^}: ако само един от двата бита е 1, връща 1, иначе връща 0
```
3 ^ 5 = 6
@@ -94,7 +97,7 @@
:middle_slide27
:unordered
-- Побитово отместване на ляво, [`<<`]: отмества всеки бит с n позиции на ляво\n
+- Побитово отместване на ляво, {` <<}: отмества всеки бит с n позиции на ляво\n
Винаги "запълва" с нули (няма разлика между логическо и аритметично ляво отместване)
```
@@ -103,7 +106,7 @@
(приемаме, че типа данни съхранява само 4 бита данни)
-- Побитово отместване на дясно, [`>>`]: отмества всеки бит с n позиции на дясно\n
+- Побитово отместване на дясно, {` >>}: отмества всеки бит с n позиции на дясно\n
При аритметичното отместване, дупките се запълват с предходната стойност на старшия бит\n
При логическото отместване, винаги запълваме с 0\n
В C++ има един оператор, дали е аритметическо или логическо се определя от типа
@@ -118,7 +121,7 @@
Примери с код:
-:code_cpp
+````cpp
int a = 3, b = 5;
int n1 = ~ a; // -4
@@ -139,6 +142,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
+
:slide
## Логически оператори
@@ -146,10 +150,10 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
.p
Много приличат на побитовите, обаче побитовите работят върху битове, докато логическите работят върху bool.
-[$br4]
+{br4}
:unordered
-- [`!`]: обръща [`true`] във [`false`] и обратно
+- {` !}: обръща {` true} във {` false} и обратно
```cpp
! true // false
@@ -159,14 +163,14 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
:middle_slide
:unordered
-- [`&&`]: "логическо и", ако и двете стойности са [`true`], тогава и резултатът е [`true`]
+- {` &&}: "логическо и", ако и двете стойности са {` true}, тогава и резултатът е {` true}
```cpp
true && true // true
false && true // false
false && false // false
-- [`||`]: "логическо или", само ако и двете са [`false`], тогава е [`false`]
+- {` ||}: "логическо или", само ако и двете са {` false}, тогава е {` false}
```cpp
true || true // true
@@ -180,7 +184,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
## Условни конструкции
:unordered
-- [`if`]: приема булева стойност, ако е [`true`], изпълнява кода в къдравите скоби, ако е [`false`] ги пропуска
+- {` if}: приема булева стойност, ако е {` true}, изпълнява кода в къдравите скоби, ако е {` false} ги пропуска
```cpp
if (expression) {
@@ -188,9 +192,9 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
}
dootherthing;
- [`expression`] се конвертира към типа [`bool`]\n
+ {` expression} се конвертира към типа {` bool}\n
- Ако в къдравите скоби имаме един израз (тоест е само един ред код, завършващ на [`;`]) можем да ги пропуснем.
+ Ако в къдравите скоби имаме един израз (тоест е само един ред код, завършващ на {` ;}) можем да ги пропуснем.
```cpp
if (expression) dosomething;
@@ -200,7 +204,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
:middle_slide25
:unordered
-- [`if-else`]: работи като [`if`], обаче след къдравите скоби добавяме [`else { ... }`].
+- {` if-else}: работи като {` if}, обаче след къдравите скоби добавяме {` else { ... }}.
```cpp
if (expression) {
@@ -212,10 +216,10 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
dootherthing;
.p
- Ако [`expression`] е истина, [`dothing1`] се изпълнява и [`dothing2`] се пропуска изцяло.
- Аналогично, ако [`expression`] е лъжа, [`dothing1`] се изпуска и [`dothing2`] се изпълнява.
+ Ако {` expression} е истина, {` dothing1} се изпълнява и {` dothing2} се пропуска изцяло.
+ Аналогично, ако {` expression} е лъжа, {` dothing1} се изпуска и {` dothing2} се изпълнява.
- .p Както с [`if`], ако [`dothing2`] е само един израз, можем да пропуснем къдравите скоби
+ .p Както с {` if}, ако {` dothing2} е само един израз, можем да пропуснем къдравите скоби
```cpp
if (expression) {
@@ -237,7 +241,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
else if (expression2) {
doSometing2;
}
- ...
+ \...
else {
doSomethingN;
}
@@ -249,7 +253,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
else {
if (expression2) doSomething2;
else {
- ...
+ \...
else doSomethingN;
}
}
@@ -258,8 +262,8 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
:slide
:unordered
-- [`expression`] винаги се конвертира до тип [`bool`] (ако е нужно)\n
- [=Никога не правете такива неща:=]
+- {` expression} винаги се конвертира до тип {` bool} (ако е нужно)\n
+ {b Никога не правете такива неща:}
```cpp
bool a;
@@ -270,14 +274,14 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
bool a = false;
if (expression) a = true;
- Просто правите [`bool a = expression;`]
+ Просто правите {` bool a = expression;}
```cpp
bool a;
if (expression) a = false;
else a = true;
- Просто правите [`bool a = ! expression;`]
+ Просто правите {` bool a = ! expression;}
@@ -288,7 +292,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
```cpp
(expression) ? valueA : valueB
- Ако [`expression`] е истина, връща се [`valueA`], иначе се връща [`valueB`]
+ Ако {` expression} е истина, връща се {` valueA}, иначе се връща {` valueB}
```cpp
int grade;
@@ -306,7 +310,7 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
:middle_slide27
:unordered
-- [`switch`]: приема стойност и изпълнява случая, при който стойността съвпада с определената
+- {` switch}: приема стойност и изпълнява случая, при който стойността съвпада с определената
```cpp
switch (value) {
@@ -323,10 +327,10 @@ int r5 = (unsigned int)-b >> 1; // 2147483645
else if (value == valueC) doSomething3;
.p
- [`otherwise`] е като [`else`], това е случая когато не съвпада с никоя стойност.
+ {` otherwise} е като {` else}, това е случая когато не съвпада с никоя стойност.
Може да бъде изпуснат.
- .p Без [`break`] изпълнението продължава към следващия [`case`]
+ .p Без {` break} изпълнението продължава към следващия {` case}