Какво правим тук
Този урок е практикум. Елементите на UML диаграмите ги знаеш от Модул 1; сега трябва да ги четеш и да ги пишеш. Първото е по-трудно и по-полезно: диаграма, която не си рисувал ти, се разбира само чрез трасиране.
Ключово
Трасиране значи да минеш през диаграмата стъпка по стъпка с конкретни числа и да записваш стойността на всяка променлива. Наум — не става.
Задача 1 — прочети чужда диаграма
За диаграмата на фиг. 1 определи какъв ще бъде изведеният резултат при следните стойности на входните променливи: а) A = −5, B = 2; б) A = 7, B = 7; в) A = 5, B = 12.
Трасираме честно, без да предполагаме какво е искал авторът:
| Вход | Първа проверка B > A | Резултат |
|---|---|---|
| A = −5, B = 2 | 2 > −5 → ДА | Извежда A, т.е. −5 |
| A = 7, B = 7 | 7 > 7 → НЕ | Втора проверка: пак НЕ → извежда „=“ |
| A = 5, B = 12 | 12 > 5 → ДА | Извежда A, т.е. 5 |
Внимание
Трасирането разкрива два дефекта. Първо, двете проверки са едно и също условие — щом първата е дала НЕ, втората също ще даде НЕ, тоест блокът „Изведи B“ е недостижим. Второ, когато B > A, диаграмата извежда A— по-малкото. Ако целта е да се изведе по-голямото, първата проверка трябва да води до „Изведи B“, или условието да е A > B.
Това не е загубено време. Точно така се чете чужд код: изпълняваш го на хартия и сравняваш какво прави с това, което трябва да прави.
Задача 2 — циклична диаграма
Втората диаграма от учебника (фиг. 2) е с цикъл. В ограничен естествен език тя изглежда така:
1. Въведи N
2. i = 0, S = 0
3. S = S + i
4. i = i + 1
5. Ако i > N — премини към 6, иначе към 3
6. Изведи S и iОпредели какъв ще е изведеният резултат при: а) N = 5; б) N = 100.
Съвет
За втория пример не е възможно да трасираш цикъла 100 пъти. Опитай да формулираш математически какво прави алгоритъмът: това е сборът 0 + 1 + 2 + … + N, тоест N(N + 1) / 2.
Бележка
Внимавай със стойността на i накрая. Цикълът излиза, когато i > N — значи изведеното i е N + 1, а не N. Такива разлики с единица са най-честият източник на грешки.
Задачи за рисуване
Линейни
- Задача 3. Диаграма за намиране на лицето и периметъра на правоъгълник със страни A и B.
- Задача 6. Диаграма на алгоритъм, който разменя стойностите на две променливи X и Y. Упътване: използвай трета променлива Z, като първо преместиш стойността на X в Z.
Разклонени
- Задача 4. Диаграма за намиране на решенията на квадратното уравнение ax² + bx + c = 0. Упътване: за случая a = 0 използвай блок, в който ще стои диаграмата за линейното уравнение.
- Задача 5. Диаграма за проверка дали три зададени числа A, B и C са страни на триъгълник. Упътване: сумата на всеки две от тях трябва да е по-голяма от третото.
Циклични
- Задача 7. Диаграма, която въвежда цяло число в N и след това N цели числа в променливите A₁ … Aₙ.
- Задача 9. Диаграма за намиране на най-малкото от числата A₁ … Aₙ. Упътване: в началото постави в
minчислото A₁. - Задача 8. Диаграма за сравняване по големина на две цели числа, представени в p-ична позиционна бройна система. Упътване: разгледай два случая — с различен и с равен брой цифри.
За най-упоритите
Задача 11*. Диаграма на стъпката „заемане“ при изваждане на две числа в p-ична бройна система, когато от по-малка цифра трябва да се извади по-голяма.
Задача 10 и 12. Запиши на ограничения естествен език алгоритмите от задачи 1, 2, 3 и 10.
Какво трябва да запомниш
- Диаграма се чете с трасиране — с конкретни числа и записани междинни стойности.
- Две еднакви проверки една след друга правят втория клон недостижим.
- Цикълът излиза, когато условието е изпълнено — затова крайното i е с единица повече от очакваното.
- Когато цикълът е дълъг, не го трасирай — опиши математически какво прави.
- Линейната диаграма няма ромб; разклонената има; цикличната има стрелка назад.