diff options
1 files changed, 40 insertions, 36 deletions
| -rw-r--r-- | src/teaching/upp-2023/week2/revision.du | 76 |
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} |