ALGO – Algoritmizace 2. cvičení ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Řídicí struktura - cyklus důvod – opakování stejných příkazů slovně : „Pokud platí B opakuj P.“ , kde B je podmínka P je skupina příkazů – tzv. tělo cyklu známý počet opakování x neznámý počet opakování rozlišujeme několik typů cyklů
1. Cyklus While do předem neznámý počet průchodů cyklus končí při nesplnění podmínky nemusí se provést ani jednou, končí hned při nesplnění podmínky
Příklad 2.1 Sestavte algoritmus pro výpočet zbytku po dělení dvou přirozených čísel. Vstup: X (dělenec), Y (dělitel) (přirozená čísla) Výstup: Q – zbytek po dělení Řešení: Dělení nahradíme opakovaným odečítáním podle vztahu: X – Y – Y – Y - … - Y =Q, kde Q < Y Odečítej tak dlouho, dokud zbytek je větší než Y. Q = X Q = Q -Y
Příklad 2.1 ČTI X,Y Q = X WHILE Q >= Y DO Q = Q - Y END WHILE TISK Q TRASOVACÍ TABULKA X = 3, Y= 4 X = 5, Y= 5 X = 21, Y = 4 fáze X Y Q načtení 13 5 ? přiřazení 1. průchod 8 2. průchod 3 tisk
Příklad 2.2 Modifikace příkladu 2.1 Jaký je podíl Z? X / Y = Z a zbytek Q Jak změnit algoritmus předchozí úlohy? Řešení: přidání proměnné Z Z je počítadlo průchodů Z = 0 Z = Z+1 Je možné zaměnit pořadí příkazů uvnitř cyklu?
Příklad 2.2 ČTI X,Y Q = X Z = 0 WHILE Q >= Y DO Q = Q – Y Z = Z +1 END WHILE TISK Z, Q Napište si trasovací tabulku pro 25, 8. X=3, Y=3 TRASOVACÍ TABULKA X Y Q Z NAČTENÍ 13 5 ? PŘIŘAZENÍ 1. PRŮCHOD 8 1 2. PRŮCHOD 3 2 TISK
2. Cyklus – Repeat Until „opakuj B dokud platí P“ While Do „opakuj B dokud platí P“ předem neznámý počet průchodů cyklus končí při nesplnění podmínky provede se aspoň jednou REPEAT B UNTIL P
Konečnost cyklu chyba při spuštění zacyklení – neustálé opakování stejných akcí není projev navenek, obtížná identifikace příklad While I <> 0 Do J = I -1 End While Tělo cyklu nemá vliv na hodnotu I !!!! Příkazy v těle cyklu musí měnit hodnotu proměnné, které je v podmínce.
Konečnost cyklu REPEAT Je tam příkaz, který mění I, ale.. I = I +1 I < N – je funkční (neprojde ani jednou) I >N - zacyklí se Počáteční hodnoty proměnných mají vliv na počet průchodů, zda se vykoná cyklus. Musí se měnit hodnota testované proměnné v těle. Změna musí být vést k ukončení cyklu REPEAT I = I +1 P = K * 27,3 UNTIL I > N
Příklad – 2.3 - Faktoriál Sestavte algoritmus pro výpočet faktoriálu. Použijte cyklus While Do. Vstup: N Výstup: F, (kde F = N!) Řešení: N! = N * (N - 1) * (N - 2) * …* (N-I) * … * 1 N! = 1 * 2 * 3 * …* (N-I) * …* (N - 1) * N
Příklad – 2.3 – Faktoriál Řešení A Řešení B ČTI N F = N I = 1 WHILE I < N DO F=F*(N–I) I=I+1 END WHILE TISK F ČTI N F = 1 I = 2 WHILE I =< N DO F=F*I I=I+1 END WHILE TISK F Zapisujte trasovací tabulku pro N=1, 2, 3. N! = N * (N - 1) * (N - 2) * …* (N-I) * … * 1 N! = 1 * 2 * 3 * …* (N-I) * …* (N - 1) * N
Příklad – 2.3 a – Faktoriál Řešení A Přepište řešení na cyklus REPEAT UNTIL. Lze to? Řešení A ČTI N F = 1 I = 0 REPEAT F=F*(N–I) I=I+1 UNTIL I < N TISK F ČTI N F = N I = 1 WHILE I < N DO F=F*(N–I) I=I+1 END WHILE TISK F Zapisujte trasovací tabulku pro N=1, 2, 3. N! = N * (N - 1) * (N - 2) * …* (N-I) * … * 1
Příklad – 2.3 B – Faktoriál Přepište řešení na cyklus REPEAT UNTIL. Lze to? Řešení B ČTI N F = 1 I = 2 WHILE I =< N DO F=F*I I=I+1 END WHILE TISK F N! = 1 * 2 * 3 * …* (N-I) * …* (N - 1) * N