Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 2 · Урок 2

UML диаграми

Практикум по четене и съставяне на UML диаграми: трасиране на чужда диаграма, откриване на дефекти в нея и рисуване на собствени — линейни, разклонени и циклични.

Какво правим тук

Този урок е практикум. Елементите на UML диаграмите ги знаеш от Модул 1; сега трябва да ги четеш и да ги пишеш. Първото е по-трудно и по-полезно: диаграма, която не си рисувал ти, се разбира само чрез трасиране.

Ключово

Трасиране значи да минеш през диаграмата стъпка по стъпка с конкретни числа и да записваш стойността на всяка променлива. Наум — не става.

Задача 1 — прочети чужда диаграма

За диаграмата на фиг. 1 определи какъв ще бъде изведеният резултат при следните стойности на входните променливи: а) A = −5, B = 2; б) A = 7, B = 7; в) A = 5, B = 12.

Въведи A, BB > AДАИзведи AНЕB > AДАИзведи BНЕИзведи "="
Фиг. 1. Диаграма, каквато е в учебника.

Трасираме честно, без да предполагаме какво е искал авторът:

ВходПърва проверка B > AРезултат
A = −5, B = 22 > −5 → ДАИзвежда A, т.е. −5
A = 7, B = 77 > 7 → НЕВтора проверка: пак НЕ → извежда „=“
A = 5, B = 1212 > 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 е с единица повече от очакваното.
  • Когато цикълът е дълъг, не го трасирай — опиши математически какво прави.
  • Линейната диаграма няма ромб; разклонената има; цикличната има стрелка назад.