diff options
| Commit | cee1af6b93f59cfc196d1e778d1d2dc1cfb8ea12 (patch) | |
|---|---|---|
| Author | 2023-10-22 12:21:08 +0300 | |
| Committer | 2023-10-22 12:21:08 +0300 | |
| Files | 0c75ce6ed67d0738919beb05dfcd33bea378e37a | |
| syndamia.com-cee1af6b93f59cfc196d1e778d1d2dc1cfb8ea12.tar syndamia.com-cee1af6b93f59cfc196d1e778d1d2dc1cfb8ea12.tar.gz syndamia.com-cee1af6b93f59cfc196d1e778d1d2dc1cfb8ea12.zip | ||
| Parent | f90cfd71eea064c8754362a2e61119b407c2aab5 (diff) | |
[te/upp-2023/w3] Added revision for last week
2 files changed, 269 insertions, 1 deletions
| -rw-r--r-- | src/teaching/upp-2023/index.md | 2 | ||||
| -rw-r--r-- | src/teaching/upp-2023/week3/revision.md | 268 |
diff --git a/src/teaching/upp-2023/index.md b/src/teaching/upp-2023/index.md index 327b043..3d90f62 100644 --- a/src/teaching/upp-2023/index.md +++ b/src/teaching/upp-2023/index.md @@ -16,4 +16,4 @@ |-------|----|---------| |1 |06.10.2023|[Добре дошли](./week1/welcome.html) \|\| [Конфигуриране на GitHub classroom и Visual Studio](./week1/setup.html?a) \|\| [Задачи](./week1/?a) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week01)| |2 |13.10.2023|[Преговор](./week2/revision.html?a) \|\| [Задачи](./week2) \|\| [Решения](https://github.com/Syndamia/upp-2023-solutions/tree/main/week02)| -|3 |20.10.2023|[Задачи](./week3) \|\| [GitHub classroom](https://classroom.github.com/a/JgMSXuCf)| +|3 |20.10.2023|[Преговор](./week3/revision.html?a) \|\| [Задачи](./week3) \|\| [GitHub classroom](https://classroom.github.com/a/JgMSXuCf)| diff --git a/src/teaching/upp-2023/week3/revision.md b/src/teaching/upp-2023/week3/revision.md new file mode 100644 index 0000000..0ef3687 --- /dev/null +++ b/src/teaching/upp-2023/week3/revision.md @@ -0,0 +1,268 @@ +# Преговор - УПП, Седмица 3, 20.10.2023 + +&&presentation + +&&clide &¢ered + +# Цикли, assert + +&&/centered &&/clide + + + + +&&slide &&font25 + +## Бележки от миналия път + +- Видях две груби грешки в предадените решения, първо: + + ```cpp + bool b; + if (condition) b = true; + ``` + + Грешно е, понеже `condition` сам по себе си е от тип bool, с този `if` буквално не правите нищо. + Правилния вариант е: + + ```cpp + bool b = condition; + ``` + + Аналогично за: + + ```cpp + bool b; + if (!condition) b = true; + ``` + + правилното е: + + ```cpp + bool b = !condition; + ``` + +&&/font &&/slide + + + +&&clide + +- второ: + + ```cpp + a >= 48 && a <= 57 + ``` + + Всяка буква действително съответства на определено число, дефинирано от ASCII стандарта. + Наистина '0' е 48 и '9' е 57, обаче от вас **не** се очаква да помните ASCII таблицата! + Също, ако не знаеш наизуст кои буква са тези числа, този израз е много неясен. + + Правилния вариант е просто да направите сравнения с буквите, все пак C++ ги "конвертира" (много грубо казано) към съответните ASCII стойности: + + ```cpp + a >= '0' && a <= '9' + ``` + +&&/clide + + + +&&slide + +## С/без загуба на данни + +&&lineb3 + +Получи се малко разногласие между това, което Ивана ви е казала и това което аз ви казах. +В края на деня, **конвертиране от int към unsigned int не губи информация!** + +Цитирайки 4то издание на "The C++ Programming Language" глава 10.5: + +> A conversion is value-preserving if you can convert a value and then convert the result back to it's original type and get the original value + +Тоест, конвертирания при които не губиш битове, нямаш загуба на данни. + +&&/slide + + + +&&slide + +## Цикли + +&&lineb4 + +- `while` цикъл + + ```cpp + while (условие) { + тяло + } + ``` + + "условие" е булева стойност, като ако е `false` цикъла спира, докато ако е `true` "тяло" се изпълнява и после пак се проверява условие + +&&/slide + + + +&&clide + +- Може да си го представите като + + ```cpp + if (условие) { + тяло + } + else { + спри + } + + + if (условие) { + тяло + } + else { + спри + } + ... + ``` + +&&/clide + + + +&&slide + +- `do-while` цикъл, като `while`, но "тяло" се изпълнява поне един път + + ```cpp + do { + тяло + } while (условие); + ``` + + Нашият аналог е: + + ```cpp + тяло + + if (условие) { + тяло + } + else { + спри + } + + + if (условие) { + ... + ``` + +&&/slide + + + +&&clide + +- `for` цикъл + + ```cpp + for (инициализация; условие; инкрементация) { + тяло + } + ``` + + "инициализация" се изпълнява само веднъж, преди всичко останало в цикъла + "условие" се изпълнява преди всяка итерация, като ако е `false` цикъла спира, докато ако е `true` продължава + "инкрементация" се изпълнява след края на всяка итерация + +&&/clide + + + +&&slide + +- Може да си представяте, че това на практика извършва: + + ```cpp + инициализация + + if (условие) { + тяло + } + else { + спри + } + + инкрементация + + if (условие) { + тяло + } + else { + спри + } + ... + ``` + +&&/slide + + + +&&clide + +- или използвайки `while` цикъл: + + ```cpp + инициализация + while (условие) { + тяло + инкрементация + } + ``` + +&&/clide + + + +&&slide + +### Ключови думи + +&&lineb3 + +- `break`: моментално прекратява изпълнението на цикъла + + При `for` цикли инкрементацията не се изпълнява след `break` + +&&lineb2 + +- `continue`: продължи след края на сегашната итерация; тоест изпълнението на тяло се прекратява и заповаме нова итерация + + При `for` цикли директно отива на инкрементация + +&&/slide + + + +&&slide + +## Assert + + +&&lineb3 + +Понякога е полезно да тестваме нашия код вътре в самия код. +Тоест, искаме на конкретно място в кода да проверим нещо. + +```cpp +assert(condition); +``` + +Ако `condition` е `true`, нищо не се случва, обаче ако е `false` програмата моментално прекратява изпълнение. + +Използва се повече като програмистки уред, тоест ако програмата спре заради `assert`, това е защото има някаква програмистка грешка. + +&&/slide |