ZPRO cvičení 4 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague November 1, 2016
Outline I 1 Outline 2 Cykly 3 Cykly cvičení 4 Rekurze 5 Rekurze cvičení 6 Domácí úkol 7 Zdroje
Cykly
Cykly www.sallyx.org (Podmínky a cykly): Konečně se dostáváme k té zábavné části programování.
Cykly www.sallyx.org (Podmínky a cykly): Konečně se dostáváme k té zábavné části programování. programujte.com: Cykly jsou jednou ze základních řídících struktur programů, a to nejen v jazyce C/C++, ale obecně. Pochopení cyklů vás posouvá k možnostem psát téměř dokonalé programy...
Cykly Část kódu která se provádí vícekrát O dalším opakování rozhoduje splnění podmínky Počet opakování může i nemusí být předem znám
Cyklus while 1 while ( podminka )// podminky umime z minula 2 { 3 // prikazy 4 }
Cyklus while 1 while ( podminka )// podminky umime z minula 2 { 3 // prikazy 4 } 1 int i = 1; 2 while ( i <= 10) 3 { 4 cout << i << ; 5 i ++; 6 }
Cyklus do while 1 do { Podobný význam jako while cyklus, ale: Vždy proběhne alepsoň jednou Jiná syntaxe 2 // prikazy 3 } while ( podminka );
Cyklus do while 1 do { Podobný význam jako while cyklus, ale: Vždy proběhne alepsoň jednou Jiná syntaxe 2 // prikazy 3 } while ( podminka ); 1 int a; 2 do { 3 cin >> a; 4 } while (a <= 2);
For cyklus Často používaný pokud známe předem počet opakování Může být použit i jinak než v klasickém pojetí (lze zastoupit i while) 1 for ( pocatecni prikaz ; podminka ; iteracni vyraz ) 2 telo cyklu 3 }
For cyklus Často používaný pokud známe předem počet opakování Může být použit i jinak než v klasickém pojetí (lze zastoupit i while) 1 for ( pocatecni prikaz ; podminka ; iteracni vyraz ) 2 telo cyklu 3 } 1 for ( int i = 0; i < 10; i ++) { 2 cout << i << ; 3 }
Break a continue Používají se uvnitř cyklu break Ukončí okamžitě vykonávání cyklu a program následuje prvním příkazem za cyklem. continue Okamžitě ukončí aktuální iteraci a započne novou.
Cykly cvičení 1 Vytvořte cyklus, který vypíše sudá čísla v rozmezí od 50 do 70 2 Vytvořte a zavolejte funkci x n 3 Vytvořte a zavolejte funkci x! 4 Vytvořte a zavolejte funkci, která pro dané x nalezne nejmenší n, tak aby: x 2 n
cv1 1 for ( int i =50;i <=70; i +=2) 2 cout <<i<< endl ;
cv2 1 int xnan ( int x, int n) 2 { 3 int produkt =1; 4 for ( int i =1;i <=n;i ++) 5 produkt *=x; 6 return produkt ; 7 }
cv3 1 int faktorial ( int x) 2 { 3 int produkt =1; 4 for ( int i =1;i <=x;i ++) 5 produkt *=i; 6 return produkt ; 7 }
cv4 1 int najdin ( int x) 2 { 3 int n = 0; 4 while (x >=( xnan (2, n ))) 5 n ++; 6 return n; 7 }
Rekurze Vykonávání funkce vyvolá to samuou funkci ještě před svým dokončením Reprezentativní příklad je funkce která volá sama sebe
Rekurze - Výpočet faktoriálu Pro funkci faktoriál (N) 1 pokud N = 0, potom výsledek = 1 2 jinak výsledek = N * faktoriál(n - 1)
Rekurze cvičení 1 Vytvořte a zavolejte funkci x! 2 Vytvořte a zavolejte funkci x n 3 Vytvořte a zavolejte funkci pro výpočet n-tého prvku Fibonacciho posloupnosti
cv1 1 int f aktori al_rek urze ( int x) 2 { 3 if (x ==0) 4 return 1; 5 else 6 return x* faktorial_rekurze (x -1); 7 8 }
cv2 1 int xnan_rekurze ( int x, int n) 2 { 3 if (n ==0) 4 return 1; 5 else 6 return x* xnan_rekurze (x,(n -1)); 7 }
cv3 1 int fibonacci ( int n) 2 { 3 if (n == 0) 4 return 0; // z definice fib. posloupnosti 5 else if ( n == 1) 6 return 1; // z definice fib. posloupnosti 7 else 8 return fibonacci (n -1)+ fibonacci (n -2); 9 }
Domácí úkol Budete soutěžící v televizní hře o peníze. Pravidla jsou následovná: Dostáváte k dispozici 100 kufříků takových, že v jednom je hotovost 100 000 a ostatní jsou prázdné (nesmíte je otevřít). Bankéř vám v každý moment nabízí za každý kufřík peníze vypočítané jeho průmernou hodnotou. Vy mu můžete libovolný počet kufříků prodat(hned je otevře). Pokud mu prodáte kufřík s penězi, pak už další nabídku nedostanete a odnášíte si získané peníze. Když ale bankéř koupí prázdné kufříky, pak můžete obchodovat znovu. Výši získaných peněz můžete ovlivnit počtem prodaných kufříků v každém kole a samožřejmě jejich výběrem.
Pořadatelé bohužel nepočítají s tím, že jako studenti fjfi dokážete za pomoci znalostí fyziky odhalit, který z kufříků v rukách jemných dívek má nepatrně větší hmotnost. Pro vás jako studenta fjfi nebude pak problém najít optimální strategii. Na co ale už jako studenti nestačíte, je vypočítat, kolik peněz takto vyhrajete. Proto si doma napíšete program, který tuto sumu vypočítá za vás.
Zdorje 1 http :// kmlinux. fjfi. cvut.cz /~ fabiadav / cecko / 2 poznamky -k-jazyku -c/ podminky -a- cykly 3 http :// www. itnetwork.cz/ cplusplus / zaklady / 4 c-plus -plus - tutorial - cykly - while -do - while 5 http :// www. sallyx. org / sally /c/ c12. php 6 http :// programujte. com / clanek /2006040601 7 -cykly -v-c-c/