Příkazy if, while, do-while, for, switch

Rozměr: px
Začít zobrazení ze stránky:

Download "Příkazy if, while, do-while, for, switch"

Transkript

1 Příkazy if, while, do-while, for, switch BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 24. října 2016 a 27. října 2016

2 Přehled Řízení výpočtu. Příkaz if. Příkazy cyklu while, do-while, a for. Příkaz switch. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 2/51

3 Řízení výpočtu Řízení výpočtu: sekvence příkazy se provádějí shora dolů,, větvení jeden nebo několik příkazů se provedou jen za splnění určité podmínky, cykly jeden nebo několik příkazů se provádí opakovaně v závislosti na splnění určité podmínky. Implementace: strukturované programování příkazy jsou ve formě bloků, bloky se používají ve větvích a cyklech (C/C++, Java, Pascal,... ), spaghetti code návěští a goto příkazy (původní BASIC). L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 3/51

4 Řízení výpočtu Sequence + If-then - L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 4/51

5 Řízení výpočtu If-then-else + - switch... L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 5/51

6 Řízení výpočtu while, for do-while L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 6/51

7 Řízení výpočtu Složený příkaz sekvence příkazů ve složených závorkách; považuje se za jediný příkaz (z hlediska syntaxe): { a = 10; b = 20; Blok sekvence deklarací a sekvence příkazů ve složených závorkách (blok může být i prázdný): definice funkcí jsou bloky (např. funkce main), deklarace v blocích jsou lokální, proměnné mimo blok neexistují, lokální proměnné zastíní globální proměnné stejného jména, bloky mohou být vnořeny do bloku. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 7/51

8 Globální a lokální deklarace #include <stdio.h> int x = 1, y = 2; /* globální proměnné */ void fun ( void ) { int a = 1; printf ( "fun(): x=%d y=%d a=%d\n", x, y, a ); int main ( void ) { int x = 10; /* lokální x zastíní globální x */ int a = 20; fun ( ); printf ( "main ( ): x=%d y=%d a=%d\n", x, y, a ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 8/51

9 Příkaz if if příkaz má dvě různé formy: if ( podmínka ) příkaz if ( podmínka ) příkaz1 else příkaz2 podmínka je výraz: nula znamená false, nenula true. příklad jak vypočíst minimum dvou proměnných x a y. if ( x < y ) /* if-then-else */ min = x; else min = y; printf ( "Min = %d\n", min ); min = x; /* nebo alternativně, jen if-then */ if ( y < x ) min = y; printf ( "Min = %d\n", min ); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 9/51

10 Příkaz if Když má být proveden víc než jeden příkaz v podmíněné větvi, je třeba použít blok. Příklad: dány dvě proměnné, jejichž hodnoty je třeba případně zaměnit tak, aby x nebylo větší než y: if ( x > y ) { tmp = x; x = y; y = tmp; Špatné řešení: if ( x > y ) tmp = x; /* větev - pouze tento příkaz */ x = y; y = tmp; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 10/51

11 Příkaz if Dány dvě proměnné x a y, vypočíst max a min. if ( x < y ) { min = x; max = y; else { min = y; max = x; Špatné řešení: if ( x < y ) min = x; max = y; else /* chyba syntaxe: neočekávaný else */ min = y; max = x; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 11/51

12 Příkaz if Jakýkoli příkaz může být vnořen ve větvi if. Tudíž příkaz if lze vnořit do jiného if. Příklad: dána proměnná x, vypočíst znaménko (-1,0,1): if ( x < 0 ) s = -1; else if ( x == 0 ) s = 0; else s = 1; Dány tři proměnné x, y a z, vypočíst maximum: if ( x > y ) if ( x > z ) max = x; else max = z; else if ( y > z ) max = y; else max = z; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 12/51

13 Příkaz if Jakýkoli příkaz může být vnořen ve větvi if. Tudíž příkaz if lze vnořit do jiného if. Příklad: dána proměnná x, vypočíst znaménko (-1,0,1): if ( x < 0 ) s = -1; else if ( x == 0 ) s = 0; else s = 1; Dány tři proměnné x, y a z, vypočíst maximum: if ( x > y ) if ( x > z ) max = x; else max = z; else if ( y > z ) max = y; else max = z; Uvedené zápisy jsou syntakticky správné, kompilátor jim bude rozumět. Pro člověka jsou ale obtížně čitelné. Vhodné formátování zdrojového kódu usnadňuje jeho porozumění. Důležité je zejména zarovnávat bloky. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 12/51

14 Příkaz if Příklad: dána proměnná x, vypočíst znaménko (-1,0,1): if ( x < 0 ) s = -1; else if ( x == 0 ) s = 0; else s = 1; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 13/51

15 Příkaz if Dány tři proměnné x, y a z, vypočíst maximum: if ( x > y ) if ( x > z ) max = x; else max = z; else if ( y > z ) max = y; else max = z; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 14/51

16 Příkaz if Najít druhé maximum... pro dvě proměnné a a b: if ( a > b ) max2 = b; else max2 = a; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 15/51

17 Příkaz if Najít druhé maximum... pro dvě proměnné a a b: if ( a > b ) max2 = b; else max2 = a; pro tři proměnné a, b a c: if ( a > b && b > c ) max2 = b; else if ( a < b && b < c ) max2 = b; else if ( a > c && c > b ) max2 = c; else if ( a < c && c < b ) max2 = c; else if ( b > a && a > c ) max2 = a; else max2 = a; /* 3! = 6 kombinací */ L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 15/51

18 Příkaz if Najít druhé maximum... pro dvě proměnné a a b: if ( a > b ) max2 = b; else max2 = a; pro tři proměnné a, b a c: if ( a > b && b > c ) max2 = b; else if ( a < b && b < c ) max2 = b; else if ( a > c && c > b ) max2 = c; else if ( a < c && c < b ) max2 = c; else if ( b > a && a > c ) max2 = a; else max2 = a; /* 3! = 6 kombinací */ pro čtyři proměnné a, b, c a d: if ( a > b && b > c && c > d ) max2 = b; else... /* 4! = 24 kombinací */... a co, když hodnoty nejsou navzájem různé. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 15/51

19 Příkaz if Nalezení druhého maxima lépe: mějme dvě proměnné: max1 (maximum) a max2 (druhé maximum), inicializace proměnných, nastavit na 0? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 16/51

20 Příkaz if Nalezení druhého maxima lépe: mějme dvě proměnné: max1 (maximum) a max2 (druhé maximum), inicializace proměnných, nastavit na 0? NE: -10, -9, -8 nastavit na první přečtenou hodnotu? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 16/51

21 Příkaz if Nalezení druhého maxima lépe: mějme dvě proměnné: max1 (maximum) a max2 (druhé maximum), inicializace proměnných, nastavit na 0? NE: -10, -9, -8 nastavit na první přečtenou hodnotu? NE: 10, 9, 8 nastavit na první a druhou hodnotu? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 16/51

22 Příkaz if Nalezení druhého maxima lépe: mějme dvě proměnné: max1 (maximum) a max2 (druhé maximum), inicializace proměnných, nastavit na 0? NE: -10, -9, -8 nastavit na první přečtenou hodnotu? NE: 10, 9, 8 nastavit na první a druhou hodnotu? ANO max1 = a > b? a : b; max2 = a < b? a : b; číst další hodnoty (v cyklu): if ( x > max1 ) { max2 = max1; max1 = x; else if ( x > max2 ) max2 = x; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 16/51

23 Příkaz if - i > i < 20 + j = 1 j = 8 if ( i > 0 ) if ( i < 20 ) j = 8; else j = 1; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 17/51

24 Příkaz if - i > i < 20 + j = 1 j = 8 if ( i > 0 ) if ( i < 20 ) j = 8; else j = 1; Špatně, např.: i=-4 L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 17/51

25 Příkaz if - i > i < 20 + j = 1 j = 8 if ( i > 0 ) { if ( i < 20 ) j = 8; else j = 1; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 18/51

26 Příkaz if přestupný rok Země oběhne Slunce za přibližně 365,24219 dne (tropický rok). Rozdíl mezi délkou tropického roku a 365 dny kalendáře kompenzují přestupné roky. Juliánský kalendář (podle Julia Gaia Caesara) vkládal přestupný rok 1x za 4 roky (rok děitelný 4). Průměrná délka Juliánského kalendářního roku je 365,25 dne. V roce 1582 provedl papež Řehoř XIII reformu (Gregoriánský kalendář): pokud je rok dělitelný 400, je přestupný (1600, 2000,... ), jinak, pokud je rok dělitelný 100, není přestupný (1900, 2100,... ), jinak, pokud je rok dělitelný 4, je přestupný (2004, 2008,... ), jinak není přestupný (2001, 2002,... ). Průměrná délka Gregoriánského kalendářního roku je 365,2425 dne, tedy okolo roku 4000 bude potřeba další změna kalendáře. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 19/51

27 Příkaz if přestupný rok Přechod na Gregoriánský kalendář znamenal přeskočit v kalendáři cca 11 dní dne za každých 100 let zpoždění. V různých zemích byl Gregoriánský kalendář zaveden různě: v Čechách a ve Slezsku od ledna 1584, na Moravě od října 1584, v USA od září 1752, L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 20/51

28 Příkaz if přestupný rok Přechod na Gregoriánský kalendář znamenal přeskočit v kalendáři cca 11 dní dne za každých 100 let zpoždění. V různých zemích byl Gregoriánský kalendář zaveden různě: v Čechách a ve Slezsku od ledna 1584, na Moravě od října 1584, v USA od září 1752, v Rusku od února 1918, L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 20/51

29 Příkaz if přestupný rok Přechod na Gregoriánský kalendář znamenal přeskočit v kalendáři cca 11 dní dne za každých 100 let zpoždění. V různých zemích byl Gregoriánský kalendář zaveden různě: v Čechách a ve Slezsku od ledna 1584, na Moravě od října 1584, v USA od září 1752, v Rusku od února 1918, v Řecku od roku 1923 a v Turecku od let 1926/1927. Kuriozity: Češi měli v roce 1584 Velikonoce o 4 týdny dříve než na Moravě (proč o 4 týdny?), v Holandsku neměli v roce 1582 Vánoce, Švédsko chtělo přecházet na nový kalendář plynule 40 let, v Rusku byla říjnová revoluce v listopadu, pravoslavné církve se stále řídí Juliánským kalendářem. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 20/51

30 Příkaz if přestupný rok #include <stdio.h> #include <stdlib.h> int main ( void ) { int year; printf("zadej rok:"); scanf("%d", &year ); printf("rok %d ", year ); if ( year % 4 == 0 && ( year % 100!= 0 year % 400 == 0 ) ) printf("je prestupny\n"); else printf("neni prestupny\n"); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 21/51

31 Příkaz if a efektivita Dána proměnná x, jejíž hodnota je v intervalu Chceme určit počet dekadických cifer. Řešení #1: if ( x < 10 ) digits = 1; else if ( x < 100 ) digits = 2; else if ( x < 1000 ) digits = 3; else if ( x < ) digits = 4; else digits = 5; Řešení #2: if ( x >= ) digits = 5; else if ( x >= 1000 ) digits = 4; else if ( x >= 100 ) digits = 3; else if ( x >= 10 ) digits = 2; else digits = 1; Které řešení je lepší? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 22/51

32 Příkaz if a efektivita Předpokládejme rovnoměrné rozdělení hodnot x z intervalu a uvažujme běhů programu. Řešení #1 provede: rozsah běhů porovnání celkem porovnání/běh Řešení #2 provede: rozsah běhů porovnání celkem porovnání/běh L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 23/51

33 Příkaz if a efektivita Předpokládejme, že hodnoty x nejsou rozděleny rovnoměrně v intervalu , ale například mají Poissonovo rozdělení. Řešení #1 provede: rozsah běhů porovnání celkem , 1.88 porovnání/běh Řešení #2 provede: rozsah běhů porovnání celkem , 3.56 porovnání/běh L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 24/51

34 Příkaz if a efektivita Řešení #2 je skoro čtyřikrát rychlejší (pro rovnoměrné rozdělení), nebo skoro dvakrát pomalejší (Poissonovo rozdělení). Obě řešení jsou špatná z hlediska programování (zdlouhavá, jen pro omezený rozsah hodnot). Celý rozsah nezáporných celých čísel pokrývá řešení: digits = x? (int) log10 ( x ) + 1 : 1; Jednodušší na pochopení je řešení s cyklem while: digits = 1; while ( x >= 10 ) { x /= 10; digits ++; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 25/51

35 Příkaz while Příkaz while má formu: while ( podmínka ) příkaz Příklad: q = x; while ( q >= y ) q -= y; Co je výsledkem tohoto fragmentu kódu? Poznámka: tělo cyklu se nemusí vůbec vykonat. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 26/51

36 Příkaz while Dva nebo více příkazů v těle cyklu musí být obklopeno složenými závorkami (blok): Příklad: q = x; p = 0; while ( q >= y ) { q -= y; p ++; Co je výsledkem tohoto fragmentu kódu? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 27/51

37 Příkaz while Příklad: výpočet faktoriálu: #include <stdio.h> int main ( void ) { int i = 1, f = 1, n; printf ( "Napis prirozene cislo:\n" ); scanf ( "%d", &n ); while ( i < n ) { i = i + 1; f = f * i; printf ( "%d! = %d\n", n, f ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 28/51

38 Příkaz do-while Cyklus do-while je podobný cyklu while. Liší se tím, že podmínka je testována až po vykonání příkazu(ů) v těle cyklu. Příkaz do-while má formu: do statement while ( podmínka ); Příkad faktoriálu: f = 1; i = 0; do { i = i + 1; f = f * i; while ( i < n ); Poznámka: tělo cyklu se vykoná nejméně jednou. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 29/51

39 Příkaz for Cykly bývají často řízeny proměnnou, přičemž je známo: jaká je počáteční hodnota proměnné, jaká je podmínka ukončení cyklu, jak se má měnit hodnota proměnné po každé iteraci. Příklad (faktoriál): f = 1; i = 1; while ( i <= n ) { f = f * i; i = i + 1; Cyklus z předchozího příkladu může být přepsán: f = 1; for ( i = 1; i <= n; i ++ ) f *= i; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 30/51

40 Příkaz for Příkaz for má for obecnou formu: for ( inicializace ; podmínka pokračování cyklu ; změna řídící proměnné ) příkaz Tato syntaxe může být přepsána do formy ekvivalentního cyklu while: inicializace; while ( podmínka pokračování cyklu ) { příkaz; změna řídící proměnné; Nejčastěji je změna řídící proměnné ve tvaru i ++ nebo i --. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 31/51

41 Zpracování sekvencí dat Problém: sečíst čísla ze standardního vstupu. Princip řešení: sum = 0; while ( jsou čísla na vstupu ) { přečíst další číslo; sum += number; Jak zjistit konec vstupu: pevný počet čísel v sekvenci, počet čísel sekvence je dán hodnotou přečtenou před sekvencí, sekvence je zakončena zarážkou (sentinel) zvláštní hodnota, EOF,.... L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 32/51

42 Zpracování sekvencí dat Pevný počet čísel (5 čísel): a 1 a 2 a 3 a 4 a 5 #include <stdio.h> int main ( void ) { int x, sum = 0, i; printf ( "Napis 5 cisel\n" ); for ( i = 0; i < 5; i ++ ) { scanf ( "%d", &x ); sum += x; printf ( "soucet je %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 33/51

43 Zpracování sekvencí dat Pevný počet čísel (5 čísel): a 1 a 2 a 3 a 4 a 5 #include <stdio.h> int main ( void ) { int x, sum = 0, i; printf ( "Napis 5 cisel\n" ); for ( i = 0; i < 5; i ++ ) { scanf ( "%d", &x ); sum += x; printf ( "soucet je %d\n", sum ); return 0; Jak změnit počet čísel (např. na 6)? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 33/51

44 Zpracování sekvencí dat Pevný počet čísel (5 čísel): a 1 a 2 a 3 a 4 a 5 #include <stdio.h> #define INPUT_LENGTH 5 /* žádný středník po #define */ int main ( void ) { int x, sum = 0, i; printf ( "Napis %d cisel\n", INPUT_LENGTH ); for ( i = 0; i < INPUT_LENGTH; i ++ ) { scanf ( "%d", &x ); sum += x; printf ( "soucet je %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 34/51

45 Zpracování sekvencí dat Počet dat v sekvenci je dán prvým číslem: n a 1 a 2... a n #include <stdio.h> int main ( void ) { int x, sum = 0, i, n; printf ( "Napis pocet dat v sekvenci\n" ); scanf ( "%d", &n ); for ( i = 0; i < n; i ++ ) { scanf ( "%d", &x ); sum += x; printf ( "soucet je %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 35/51

46 Zpracování sekvencí dat Sekvence je zakončena zarážkou (hodnota 0): a 1 a , a i 0 #include <stdio.h> int main ( void ) { int x, sum = 0; scanf ( "%d", &x ); while ( x ) { sum += x; scanf ( "%d", &x ); printf ( "soucet je %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 36/51

47 Zpracování sekvencí dat Sekvence je zakončena zarážkou (EOF): a 1 a 2... a n #include <stdio.h> int main ( void ) { int x, sum = 0; while ( scanf ( "%d", &x ) == 1 ) sum += x; if ( feof ( stdin ) ) printf ( "soucet je %d\n", sum ); else... /* špatný vstup - chyba zpracování */ return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 37/51

48 break a continue Cykly for a while mohou být zakončeny před vstupem do těla cyklu, cyklus do-while může být zakončen po opuštění těla cyklu, je-li třeba zakončit cyklus uvnitř těla cyklu (např. při zjištění chyby), použije se příkaz break: while ( cond1 ) {... if ( cond2 ) break;... příkaz continue startuje novou iteraci těla cyklu. Příklad: zobrazit čísla z intervalu kromě násobků 10: for ( i = 1; i <= 100; i ++ ) { if ( i % 10 == 0 ) continue; printf ( "%d\n", i ); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 38/51

49 Konečné a nekonečné cykly Algoritmy jsou konečné, tedy cykly musí skončit. Nekonečný cyklus patří k nejčastějším chybám. Hodnota(y) proměnné(ých) podmínky opakování cyklu se musí v těle cyklu měnit: když se hodnoty proměnných v těle cyklu mění, cyklus může skončit, když se hodnoty proměnných v těle cyklu nemění, iterace bud nikdy nenastane, nebo se bude iterovat stále. Triviální příklady: while ( i > 0 ) j = i - 1; double x = 0; int i = -1; while ( i < 0 ) { x = x + sin ( i * 0.6 ); i --; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 39/51

50 Konečné a nekonečné cykly int i =..., n =...; while ( i!= n ) {...; /* nemění se ani i ani n */ i ++; Co musí splňovat i a n, aby se cyklus ukončil? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 40/51

51 Konečné a nekonečné cykly int i =..., n =...; while ( i!= n ) {...; /* nemění se ani i ani n */ i ++; Co musí splňovat i a n, aby se cyklus ukončil? Zřejmě se ukončí pokud i <= n. Ukončí se cyklus pro i > n? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 40/51

52 Konečné a nekonečné cykly int i =..., n =...; while ( i!= n ) {...; /* nemění se ani i ani n */ i ++; Co musí splňovat i a n, aby se cyklus ukončil? Zřejmě se ukončí pokud i <= n. Ukončí se cyklus pro i > n? Uplatní se případně přetečení rozsahu? Změní se něco, pokud i a n budou typu double? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 40/51

53 Konečné a nekonečné cykly int i =..., n =...; while ( i!= n ) {...; /* nemění se ani i ani n */ i ++; Co musí splňovat i a n, aby se cyklus ukončil? Zřejmě se ukončí pokud i <= n. Ukončí se cyklus pro i > n? Uplatní se případně přetečení rozsahu? Změní se něco, pokud i a n budou typu double? Podmínky konečnosti cyklu lze určit téměř vždy (někdy to je velmi obtížné). Konečnost cyklu musí zajistit kontroly předcházející cyklu. Zabezpečený program musí kontrolovat přípustnost vstupních dat. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 40/51

54 Konečné a nekonečné cykly problém 3x + 1 Problém 3x + 1 (Syrakuský problém, Collatzův problém): int n =...; while ( n!= 1 ) { if ( n % 2 == 0 ) n /= 2; else n = 3 * n + 1; n=6 : 6, 3, 10, 5, 16, 8, 4, 2, 1 n=27 : 27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242,..., 9232,..., 4, 2, 1 (111 iterací) Otázka: zastaví se tento cyklus pro libovolné n? L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 41/51

55 Programujeme cykly efektivně Příklad zjištění, zda x je prvočíslo: int x =..., isprime = 1, i; for ( i = 2; i <= (int) sqrt ( x ); i ++ ) { if ( x % i == 0 ) isprime = 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 42/51

56 Programujeme cykly efektivně Příklad zjištění, zda x je prvočíslo: int x =..., isprime = 1, i; for ( i = 2; i <= (int) sqrt ( x ); i ++ ) { if ( x % i == 0 ) isprime = 0; Při nalezení prvního dělitele je zbytečné pokračovat ve zkoušení dalších hodnot. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 42/51

57 Programujeme cykly efektivně Příklad zjištění, zda x je prvočíslo: int x =..., isprime = 1, i; for ( i = 2; i <= (int) sqrt ( x ); i++ ) { if ( x % i == 0 ) { isprime = 0; break; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 43/51

58 Programujeme cykly efektivně Příklad zjištění, zda x je prvočíslo: int x =..., isprime = 1, i; for ( i = 2; i <= (int) sqrt ( x ); i++ ) { if ( x % i == 0 ) { isprime = 0; break; Výraz (int)sqrt(x) je počítán v každém cyklu, i když se jeho hodnota nemění. Optimalizující kompilátor to pozná, hloupý kompilátor k tomu donutíme: int max = (int) sqrt ( x ); for ( i = 2; i <= max; i ++ )... L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 43/51

59 Metoda shozeného praporku Testování jedné podmínky pro všechny prvky dané sekvence (všechna sudá, všechna kladná čísla lichá,... ). Nastav praporek indikující splnění podmínky na hodnotu true (1). Procházej sekvenci a pro každý prvek ověř, že je podmínka stále splněna: pokud není splněna, shod praporek, pokud je splněna, nic nedělej. L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 44/51

60 Metoda shozeného praporku Test, zda jsou na vstupu pouze sudá čísla: int x, alleven = 1; /* flag is set */ printf("zadej cisla, 0=konec.\n"); do { scanf("%d", &x); if ( x % 2 == 1 ) alleven = 0; else alleven = 1; while ( x!= 0 ); if ( alleven ) printf("vsechna suda\n"); else printf("alespon jedno liche\n"); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 45/51

61 Metoda shozeného praporku Test, zda jsou na vstupu pouze sudá čísla: int x, alleven = 1; /* flag is set */ printf("zadej cisla, 0=konec.\n"); do { scanf("%d", &x); if ( x % 2 == 1 ) alleven = 0; else alleven = 1; /* do not restore! */ while ( x!= 0 ); if ( alleven ) printf("vsechna suda\n"); else printf("alespon jedno liche\n"); Nefunguje pro vstup L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 45/51

62 Metoda shozeného praporku Test, zda jsou na vstupu pouze sudá čísla:... int x, alleven = 1; /* flag is set */ printf("zadej cisla, 0=konec.\n"); do { scanf("%d", &x); if ( x % 2 == 1 ) alleven = 0; while ( x!= 0 ); if ( alleven ) printf("vsechna suda\n"); else printf("alespon jedno liche\n"); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 46/51

63 Metoda shozeného praporku Test, zda jsou na vstupu pouze sudá čísla:... int x, alleven = 1; /* flag is set */ printf("zadej cisla, 0=konec.\n"); do { scanf("%d", &x); if ( x % 2 == 1 ) /* -1 % 2 = -1 */ alleven = 0; while ( x!= 0 ); if ( alleven ) printf("vsechna suda\n"); else printf("alespon jedno liche\n"); Nefunguje pro vstup L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 46/51

64 Metoda shozeného praporku Test, zda jsou na vstupu pouze sudá čísla:... int x, alleven = 1; /* flag is set */ printf("zadej cisla, 0=konec.\n"); do { scanf("%d", &x); if ( x % 2!= 0 ) alleven = 0; while ( x!= 0 ); if ( alleven ) printf("vsechna suda\n"); else printf("alespon jedno liche\n"); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 47/51

65 Příkaz switch Příkaz switch umožňuje větvení programu na několik větví. Větve jsou identifikovány celočíselnými konstantami. Příkaz switch má obecně tvar: switch ( výraz ) { case const1: příkaz1 break; case const2: příkaz2 break;... case constn: příkazn break; default: příkaz L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 48/51

66 Příkaz switch Příkaz break dynamicky zakončuje větev: switch ( n ) { case 1: printf ( ""*"" ); break; case 2: printf ( ""**"" ); break; case 3: printf ( ""***"" ); break; default: printf ( ""---"" ); Když break chybí, pokračuje se další větví (dokud se nedojde příkaz break nebo na konec příkazu switch): switch ( n ) { case 1: printf ( ""*"" ); /* n==1: ******--- */ case 2: printf ( ""**"" ); case 3: printf ( ""***"" ); default: printf ( ""---"" ); L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 49/51

67 Příkaz switch počet dní od počátku roku #include <stdio.h> int main ( void ) { int d, m, y, n = 0; printf ( ""Napis den mesic a rok:\n"" ); scanf ( "%d%d%d", &d, &m, &y ); switch ( m ) { case 1: n = d; break; case 2: n = 31 + d; break; case 3: n = 59 + d; break;... case 12: n = d; break; default: printf ( "Spatny mesic.\n" ); /*... korekce na přestupný rok... */ printf ( "%d dni od pocatku roku.\n", n ); return 0; L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 50/51

68 Otázky a odpovědi Otázky... L. Vagner, J. Vogel, ČVUT FIT Příkazy, BI-PA1 51/51

Řídící struktury, if, while, switch

Řídící struktury, if, while, switch Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Řídící struktury, if, while, switch BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních

Více

Řídící struktury, if, while, switch

Řídící struktury, if, while, switch Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Řídící struktury,

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Jazyk C řízení běhu programu České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Šest zákonů programování 1. V každém programu je alespoň jedna chyba

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Jazyk C řízení běhu programu České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Šest zákonů programování 1. V každém programu je alespoň jedna chyba

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Funkce, intuitivní chápání složitosti

Funkce, intuitivní chápání složitosti Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Funkce, intuitivní

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C. Složený příkaz, blok Pascalské

Více

Operační systémy. Cvičení 4: Programování v C pod Unixem

Operační systémy. Cvičení 4: Programování v C pod Unixem Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Větvení a cykly. Úvod do programování 1 Tomáš Kühr Větvení a cykly Úvod do programování 1 Tomáš Kühr Konstrukce if u Příkazy se provádějí pouze při splnění dané podmínky u Podmínka = jakýkoli logický výraz = cokoli celočíselného u Volitelně i příkazy prováděné

Více

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5 Obsah Obsah 1 Řídicí struktury 1 2 Podmínka 1 2.1 Podmínka typu case......................... 2 3 Příkaz skoku 3 4 Cykly 4 4.1 Cyklus s podmínkou na začátku................... 4 4.2 Cyklus s podmínkou

Více

Funkce, procedury, složitost

Funkce, procedury, složitost Funkce, procedury, složitost BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı

Více

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné

Více

Jazyk C++, některá rozšíření oproti C

Jazyk C++, některá rozšíření oproti C Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr) Cykly Základy programování 1 Martin Kauer (Tomáš Kühr) Z minula Chary můžete používat jako znaky ale i jako čísla 0-255. Jakou formu vybrat záleží na konkrétní aplikaci. Když pracujete se znaky, používejte

Více

Úvod do programování. Lekce 5

Úvod do programování. Lekce 5 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

Úvod do programování. Lekce 3

Úvod do programování. Lekce 3 Úvod do programování Lekce 3 Řízení běhu programu - pokračování /2 příklad: program vypisuje hodnotu sin x dx pro různé délky integračního kroku 0 #include #include // budeme pouzivat funkci

Více

2. lekce Algoritmus, cyklus Miroslav Jílek

2. lekce Algoritmus, cyklus Miroslav Jílek 2. lekce Algoritmus, cyklus Miroslav Jílek 1/36 Algoritmus 2/36 Algoritmus je konečná posloupnost operací, která dává řešení skupiny problémů 3/36 Algoritmus je konečná posloupnost operací, která dává

Více

BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 7., 9. a 10. listopadu 2017

BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 7., 9. a 10. listopadu 2017 Pole, Řetězce BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České

Více

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory Jazyk C Program v jazyku C má následující strukturu: Direktivy procesoru Globální definice (platné a známé v celém programu) Funkce Hlavička funkce Tělo funkce je uzavřeno mezi složené závorky { Lokální

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury 1 / 34 Obsah přednášky Základní řídící struktury posloupnost příkazů podmínka cyklus s podmínkou na začátku cyklus s podmínkou na konci cyklus s pevným počtem opakování Jednoduchá

Více

1. Téma 03 - Rozhodování

1. Téma 03 - Rozhodování 1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů. Příkazy cyklu v C# Kapitola vysvětluje použití tří typů cyklů for, while a -while a plňuje jejich použití řau příkladů programů v jazyku C#. V jazyku C by šlo pouze k záměně funkcí pro vstup a výstup.

Více

Poslední nenulová číslice faktoriálu

Poslední nenulová číslice faktoriálu Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip

Více

Dekompozice problému, rekurze

Dekompozice problému, rekurze Dekompozice problému, rekurze BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České

Více

Algoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

Algoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner Algoritmy BI-PA1 Programování a Algoritmizace I. Ladislav Vagner Katedra teoretické informatiky Fakulta informačních technologíı ČVUT v Praze xvagner@fit.cvut.cz 3. října 2016 a 4. října 2016 Kontakt místnost

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Pole a Funkce. Úvod do programování 1 Tomáš Kühr Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně

Více

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 1/24 Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. 2/24 Editační prostření Kód

Více

Programovani v Maplu Procedura

Programovani v Maplu Procedura Programovani v Maplu Procedura Priklad: procedura, ktera scita 2 cisla: a + 2*b soucet := proc (a, b) local c; # lokalni promenna - existuje a meni se jenom uvnitr procedury c:=a+b; # globalni promenna

Více

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

Algoritmy. BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel

Algoritmy. BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel Algoritmy BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké

Více

Racionální čísla, operátory, výrazy, knihovní funkce

Racionální čísla, operátory, výrazy, knihovní funkce Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Racionální čísla,

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Jazyk C funkce České vysoké učení technické Fakulta elektrotechnická A8B14ADP Algoritmizace a programovaní -Jazyk C -Ver.1.00 funkce J. Zděnek 20151 Funkce Funkce - černá (programová)

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

BI-EP1 Efektivní programování 1

BI-EP1 Efektivní programování 1 BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze Evropský

Více

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Programovací jazyk C++ Hodina 1

Programovací jazyk C++ Hodina 1 Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor

Více

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Preprocesor Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9b https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Více

Martin Flusser. November 1, 2016

Martin Flusser. November 1, 2016 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

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

Programování v jazyce JavaScript

Programování v jazyce JavaScript Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Operátory a příkazy BI-JSC Evropský sociální fond

Více

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004 Dokumentace k projektu č. 2 do IZP Iterační výpočty 24. listopadu 2004 Autor: Kamil Dudka, xdudka00@stud.fit.vutbr.cz Fakulta Informačních Technologií Vysoké Učení Technické v Brně Obsah 1. Úvod...3 2.

Více

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT; Programovací jazyk C(++) static struct vm_area_struct * unmap_fixup(struct mm_struct *mm, struct vm_area_struct *area, unsigned long addr, size_t len, struct vm_area_struct 1. *extra) Základy { struct

Více

Racionální čísla, operátory, výrazy, knihovní funkce

Racionální čísla, operátory, výrazy, knihovní funkce Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Racionální čísla, operátory, výrazy, knihovní funkce BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík

Více

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

Základní stavební prvky algoritmu

Základní stavební prvky algoritmu Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká

Více

Programování v jazyce JavaScript

Programování v jazyce JavaScript Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe 1. část BI-JSC Evropský sociální fond

Více

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Část 2

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Část 2 MQL4 COURSE By Coders guru www.forex-tsd.com -5 Smyčky & Rozhodnutí Část 2 Vítejte v šesté lekci mého kurzu MQL 4. Doufám, že se vám předchozí lekce líbily. V předchozí lekci jsme se bavili o smyčkách.

Více

Přednáška 3. Rekurze 1

Přednáška 3. Rekurze 1 Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programová realizace DKA typedef enum {q0, q1,... qn,

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Přednáška 1 Olga Majlingová Katedra matematiky, ČVUT v Praze 21. září 2009 Obsah Úvodní informace 1 Úvodní informace 2 3 4 Organizace předmětu Přednášky 1. 5. Základní

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Programování v jazyce C

Programování v jazyce C Programování v jazyce C Obecné charakteristiky jazyka C: jazyk C je programátorsky přívětivý, obecně použitelný většinou je implementován jako překladač překladač jazyka C je rozsahem malý a lze ho poměrně

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup

Více

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace. 1. Úvod. Algoritmus 1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá

Více

Rozklad problému na podproblémy, rekurze

Rozklad problému na podproblémy, rekurze Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Rozklad problému

Více

Programování a algoritmizace 1 2012-2013

Programování a algoritmizace 1 2012-2013 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Algoritmy Kdo je

Více

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1 Výraz - syntaxe i sémantika podobné jako v matematice - obsahuje proměnné, konstanty, operátory, závorky, volání funkcí - všechny operátory nutno zapisovat (nelze např. vynechat znak násobení) - argumenty

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce. Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento

Více

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí 02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální

Více

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Algoritmy BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura

Více

Abstraktní datové typy, moduly

Abstraktní datové typy, moduly Abstraktní datové typy, moduly BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních

Více

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá

Více

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

Více

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla Použití: - náhodnost při rozhodování např. ve hrách (výběr z více možných stejně dobrých tahů v dané pozici, házecí kostka) - generování

Více

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list

Více