Funkce, procedury, složitost

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

Download "Funkce, procedury, složitost"

Transkript

1 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íı České vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 31. října 2017 a 2. a 3. listopadu 2017

2 Obsah Funkce. Parametry. Deklarace a definice. Procedury. Výstupní parametry. Složitost (intuitivně). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 2/48

3 Funkce faktoriál #include <stdio.h> int main ( void ) { int n, i = 1, f = 1; /* čtení vstupu */ printf ( "Napis prirozene cislo:\n" ); scanf ( "%d", &n ); if ( n<1 ) { printf ( "%d neni prirozene cislo\n", n ); return 1; /* výpočet faktoriálu */ while ( i<n ) { i = i + 1; f = f * i; printf ( "%d! = %d\n", n, f ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 3/48

4 Funkce faktoriál int readnumber ( void ) { int n; printf ( "Napis prirozene cislo:\n" ); scanf ( "%d", &n ); if ( n < 1 ) { printf ( "%d neni prirozene cislo\n", n ); exit ( 1 ); /* to by mohlo být uděláno lépe */ return n; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 4/48

5 Funkce faktoriál Funkce readnumber() čte přirozené číslo ze standardního vstupu. int readnumber ( void ) je prototyp funkce (hlavička, signatura): funkce nemá žádné parametry (void seznam parametrů), jméno funkce je readnumber, funkce vrací návratovou hodnotu typu int. return n; příkaz končící zpracování funkce (návrat do volající funkce). Návratová hodnota je hodnota n. Pokud kompilátor zná hlavičku funkce, je možno funkci zavolat: int x = readnumber (); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 5/48

6 Funkce faktoriál int factorial ( int n ) { int i = 1, f = 1; while ( i<n ) { i = i+1; f = f*i; return f; Funkce factorial() má jeden parametr n a vrací hodnotu typu int. Příklad volání funkce: int y = factorial ( 10 ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 6/48

7 Funkce faktoriál /*... volání funkcí readnumber() a factorial() */ int main ( void ) { int x = readnumber (); printf ( "%d! = %d\n", x, factorial(x) ); return 0 ; Funkce main () je krátká, jednoduchá a snadno pochopitelná. Proměnné i a f v main ( ) už nejsou třeba. Jsou-li zachovány funkční prototypy, funkce mohou být vylepšovány (zrychlení výpočtu, bezpečnější,... ) bez přepsání zbytku programu. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 7/48

8 Funkce faktoriál int readnumber ( void ) { int n; printf("napis prirozene cislo:\n"); if ( scanf ( "%d", &n )!= 1 ) { printf ( "Spatny vstupni format.\n" ); exit ( 1 ); if ( n<1 ) { printf ( "%d neni prirozene cislo\n", n ); exit ( 1 ); /* to by mohlo být uděláno lépe */ return n; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 8/48

9 Odbočka proč je exit() špatně Funkce exit() je zamýšlena jako havarijní ukončení programu za podmínek, kdy další běh programu nemá cenu a může vést k dalším problémům (např. při poruše HW, který je programem řízen). Použití exit() jako reakce na nesprávný vstup je zbrklé. Chyba vstupu nemusí nutně znamenat konec programu: uživatel může být vyzván k opravě, vstupní údaj nemusí být povinný, v programu (v dalších vláknech) může probíhat důležitý výpočet, může být potřeba uložit stav výpočtu před ukončením,... Obecně, dílčí funkce (jako např. zde readnumber) nezná celkový obraz programu, aby mohla rozhodnout, zda se lze z chyby zotavit. O tom zpravidla rozhodují jiné vrstvy programu (volající). Proto bývá lepší chybu oznámit volajícímu (zde např. úpravou rozhraní funkce nebo výjimkou v C++). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 9/48

10 Funkce definice Funkce je podprogram řešící dílčí problém a vracející hodnotu. Definice funkce: hlavička_funkce tělo_funkce hlavička funkce v C/C++ má obecný tvar: typ jméno ( seznam parametrů ) typ je návratový typ funkce, jméno je identifikátor funkce, seznam parametrů seznam formálních parametrů, každý ve tvaru typ jméno, parametry jsou odděleny čárkou. Funkce bez parametrů používají místo seznamu parametrů kĺıčové slovo void. Tělo funkce je blok, jež je proveden, když je funkce zavolána. Funkce se vrací do volající funkce po provedení příkazu return výraz. Hodnota výrazu je výsledek předaný volající funkci. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 10/48

11 Funkce parametry Parametry funkce (formální parametry) jsou lokální proměnné této funkce. Před vlastním zavoláním funkce jsou výrazy reprezentující skutečné parametry vyhodnoceny a tyto hodnoty vytvoří počáteční hodnoty formálních parametrů. Při předání parametrů se mohou provádět typové konverze, jako při regulérním přiřazení. Pořadí vyhodnocení parametrů není normou definováno. #include <stdio.h> int max(int x, int y) { if (x > y) return x; return y; int main ( void ) { int a = 9, b = 20, x = 100; printf ( "%d\n", max( a, b - a ) ); printf ( "%d\n", max( 32.4, b )) ; printf ( "%d\n", x ); /* 100, nemodifikováno */ printf ( "%d, %d\n", a ++, a); /* 10, 9 nebo 10!!! */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 11/48

12 Funkce parametry Formální parametr funkce je při volání naplněn hodnotou skutečného parametru. Je chybou přepsat tuto hodnotu hodnotou přečtenou ze vstupu (obvyklá začátečnická chyba). int max ( int x, int y ) { scanf ( "%d %d", &x, &y ); /* zde nesmysl */ /* x a y jsou parametry, tedy už žádné volání scanf! Pokud by x a y mělo být čteno z klávesnice, tak by to neměly být parametry funkce. */ if ( x > y ) return x; return y; Poznámka: Výše uvedený kód funkce max () je formálně správný (nebot hodnoty formálních parametrů je možno ve funkci měnit), ale zde je nesmyslný. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 12/48

13 Funkce deklarace Deklarace funkce je hlavička funkce následovaná středníkem. Deklarované funkce mohou být použity v programu (tj. volány). Definice funkce (tělo funkce) může být dodáno později z jiného modulu nebo z knihovny. Hlavičkové soubory obsahují deklarace knihovních funkcí. #include <stdio.h> int max (int x, int y ); /* deklarace */ int main ( void ) { int a = 10, b = 20; printf ( "%d\n", max(a, b) ); /* OK, lze použít */ int max ( int x, int y ) { /* definice */ if ( x > y ) return x; return y; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 13/48

14 Funkce deklarace Jaké deklarace jsou v C správné int foo ( void ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 14/48

15 Funkce deklarace Jaké deklarace jsou v C správné int foo ( void ); Ok. void 2foo (int p); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 14/48

16 Funkce deklarace Jaké deklarace jsou v C správné int foo ( void ); Ok. void 2foo (int p); Špatně, identifikátor funkce nesmí začínat číslicí. void foo (int p, q; double r); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 14/48

17 Funkce deklarace Jaké deklarace jsou v C správné int foo ( void ); Ok. void 2foo (int p); Špatně, identifikátor funkce nesmí začínat číslicí. void foo (int p, q; double r); Špatně, typ musí být uveden pro každý parametr zvlášt. void foo ( p, q, r, s ) int p,r; double q,s;... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 14/48

18 Funkce deklarace Jaké deklarace jsou v C správné int foo ( void ); Ok. void 2foo (int p); Špatně, identifikátor funkce nesmí začínat číslicí. void foo (int p, q; double r); Špatně, typ musí být uveden pro každý parametr zvlášt. void foo ( p, q, r, s ) int p,r; double q,s;... Špatně, toto je zápis hlavičky funkce v původní Kernighan & Ritchie notaci. Tento zápis není kompatibilní s ANSI C ani s C++. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 14/48

19 Funkce deklarace Jaké deklarace jsou v C správné int foo (); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 15/48

20 Funkce deklarace Jaké deklarace jsou v C správné int foo (); Ok, ale v ANSI C znamená, že funkce má nějaké bĺıže neurčené parametry. V C++ znamená, že funkce nemá žádné parametry. Pokud chceme kompatibilitu pro C i C++, je lepší explicitně vypsat void. foo (int p); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 15/48

21 Funkce deklarace Jaké deklarace jsou v C správné int foo (); Ok, ale v ANSI C znamená, že funkce má nějaké bĺıže neurčené parametry. V C++ znamená, že funkce nemá žádné parametry. Pokud chceme kompatibilitu pro C i C++, je lepší explicitně vypsat void. foo (int p); Ok, v C je návratový typ implicitně int. V C++ správně není. Z důvodu kompatibility raději nepoužívat. int foo (int, char **, int (*(*)(int (*)[3]))(void)); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 15/48

22 Funkce deklarace Jaké deklarace jsou v C správné int foo (); Ok, ale v ANSI C znamená, že funkce má nějaké bĺıže neurčené parametry. V C++ znamená, že funkce nemá žádné parametry. Pokud chceme kompatibilitu pro C i C++, je lepší explicitně vypsat void. foo (int p); Ok, v C je návratový typ implicitně int. V C++ správně není. Z důvodu kompatibility raději nepoužívat. int foo (int, char **, int (*(*)(int (*)[3]))(void)); Ok, v C i C++ lze v deklaraci vynechat názvy parametrů. Ale je lepší názvy parametrů vypsat, aby byl zřejmý jejich význam. Pokud vás tato ukázka nepřesvědčila, podívejte se do hlavičkových souborů OpenSSL (a případně je zkuste použít). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 15/48

23 Funkce volání Funkce foo() muže být volána z funkce bar(), je-li je znám prototyp funkce foo(). To znamená: bud je definice foo() před bar() anebo je deklarace foo() před bar(). Funkce foo() s n formálními parametry je volána: foo (p1, p2, p3,..., pn ) Skutečné parametry (výrazy) jsou vyhodnoceny a zkopírovány do formálních parametrů. Pořadí parametrů je důležité pro správné spárování. Návratová hodnota je předána příkazem return výraz. Funkce jsou obvykle volány ve výrazech. Je-li je funkce volána jako samostatný příkaz, návratová hodnota je tiše zahozena. x = foo(1,2,3) + 4; /* návratová hodnota použita */ foo(1,2,3); /* návratová hodnota zahozena */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 16/48

24 Funkce příklady #include <stdio.h> /* --- Přestupný rok */ int leapyear ( int y ) { if ( y % 4 == 0 && ( y % 100!= 0 y % 400 == 0 )) return 1; int main ( void ) { int y; printf ( "Napis rok:\n" ); scanf ( "%d", &y ); printf ( "Rok %d ", y ); if ( leapyear( y ) ) printf ( "je prestupny rok.\n" ); else printf ( "neni prestupny rok.\n" ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 17/48

25 Funkce příklady #include <stdio.h> /* --- Přestupný rok */ int leapyear (int y) { return ( y % 4 == 0 && ( y % 100!= 0 y % 400 == 0 )); int main ( void ) { int y; printf ( "Napis rok:\n" ); scanf ( "%d", &y ); printf ( "Rok %d ", y ); if ( leapyear( y ) ) printf ( "je prestupny rok.\n" ); else printf ( "neni prestupny rok.\n" ); Poznámka: vnější závorky okolo výrazu v návratové hodnotě funkce leapyear jsou zbytečné, ale někdy zpřehledňují kód funkce. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 18/48

26 Funkce příklady #include <stdio.h> /* --- Největší společný dělitel */ int gcd ( int x, int y ) { int min = x < y x : y; while ( x % min y % min ) min --; return min; int main ( void ) { int a, b; printf ( "Napis dve prirozena cisla:\n" ); if ( scanf ( "%d %d", &a, &b )!= 2 a <= 0 b <= 0 ) { printf ( "Spatny vstup.\n" ); return 1; printf ( "gcd(%d,%d) = %d\n", a, b, gcd (a, b) ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 19/48

27 Funkce příklady #include <stdio.h> /* --- Největší společný dělitel */ int gcd ( int x, int y ) { while ( x!= y ) if ( x > y ) x -= y; else y -= x; return x; int main ( void ) { int a, b; printf ( "Napis dve prirozena cisla:\n" ); if ( scanf ( "%d %d", &a, &b )!= 2 a <= 0 b <= 0 ) { printf ( "Spatny vstup.\n" ); return 1; printf ( "gcd(%d,%d) = %d\n", a, b, gcd (a, b) ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 20/48

28 Funkce příklady #include <stdio.h> /* --- Největší společný dělitel - Euklidův algoritmus --- */ int gcd ( int x, int y ) { int remainder = x % y; while ( remainder ) { x = y; y = remainder; remainder = x % y; return y; int main ( void ) { int a, b; printf ( "Napis dve prirozena cisla:\n" ); if ( scanf ( "%d %d", &a, &b )!= 2 a <= 0 b <= 0 ) { printf ( "Spatny vstup.\n" ); return 1; printf ( "gcd(%d,%d) = %d\n", a, b, gcd (a, b) ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 21/48

29 Procedury Procedura je podprogram řešící dílčí problém. Procedura nemá návratovou hodnotu. Procedury a funkce se liší právě jen návratovou hodnotou: v jazyce C jsou procedury funkcemi s návratovou hodnotou typu void, návrat z procedury do volající funkce nastane po provedení posledního příkazu procedury, nebo provedením příkazu return ;, na rozdíl od funkce, v příkazu return ; chybí argument výraz. Příklad vypsat větší ze dvou čísel: void printmax ( int x, int y ) { if ( x > y ) printf ( "%d", x ); else printf ( "%d", y ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 22/48

30 Vstupní a výstupní parametry Parametry jsou obvykle použity na předání vstupních dat podprogramu (algoritmu) implementovanému funkcí. Hodnoty parametrů jsou zkopírovány z volající funkce do formálních parametrů volané funkce, což jsou vlastně lokální proměnné volané funkce. Ty je možno ve funkci měnit. V jazyce C jsou parametry zásadně vstupní. Změny hodnot vstupních parametrů se tedy neprojeví ve volající funkci hodnoty parametrů nejsou kopírovány zpět při návratu. Tento způsob je obvykle výhodou zabraní nevyžádaným modifikacím hodnoty proměnné tvořící skutečný parametr volanou funkcí. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 23/48

31 Vstupní a výstupní parametry void printsequence ( int n, int start ) { int i; for ( i = 0; i < n; i ++ ) printf ( "%d\n", start ++ ); /* start je změněn */ int main ( void ) { int a = 3, b = 2; printsequence ( 5, 1 ); /* */ printsequence ( a, b ); /* */ /* a ani b nejsou změněny */ printsequence ( a, a + b ); /* */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 24/48

32 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); main a 3 b 2 int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

33 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 2 i M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

34 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 5 i 3 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

35 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 5 i 3 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

36 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); main a 3 b 2 int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

37 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 5 i M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

38 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 8 i 3 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

39 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); main a 3 b 2 printseq n 3 st 8 i 3 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

40 Vstupní a výstupní parametry obsah paměti void printseq (int n, int st) { int i; for (i = 0; i < n; i ++) printf ( %d, st ++); main a 3 b 2 int main ( void ) { int a = 3, b = 2; printseq ( a, b ); printseq ( a, a+b ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 25/48

41 Vstupní a výstupní parametry Když má funkce vrátit dvě (nebo více) hodnot, jsou třeba výstupní parametry (jedna hodnota může být vrácena použitím mechanizmu return). Vstupní parametry nemohou předat hodnotu z volané do volající funkce. Programovací jazyky obvykle používají speciální modifikátory měnící chování parametrů (reference in C++, kĺıčové slovo var v Pascalu,... ). Taková možnost v jazyku C není. Místo toho je nutné pro výstupní parametr předat volané funkci ukazatel na proměnnou volající funkce: volající předá volané funkci ukazatel na proměnnou (adresu v paměti), který může fungovat jako výstupní parametr, ukazatel (adresa v paměti) je předán jako vstupní parametr, volaná funkce použije tuto adresu na přístup k proměnné volající funkce, kde může číst či zapsat hodnotu, ukazatel (adresa v paměti) zmizí při návratu. Ale hodnota proměnné ve volající funkci zůstane. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 26/48

42 Vstupní a výstupní parametry Když má mít funkce výstupní parametr typu T, deklaruje (vstupní) parametr typu T*, tj. ukazatel na typ T. Pro přístup k proměnné (výstupnímu parametru) je třeba ukazatel dereferencovat pomocí * (prefixový operátor hvězdička). Volající předává ukazatel (adresu) výstupní proměnné místo její hodnoty. Adresa proměnné je získána pomocí & (prefixový operátor ampersand). Hvězdičky v deklaraci se množí: požadovaný typ výstupního parametru deklarace formálního parametru int int * char char * double double * M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 27/48

43 Vstupní a výstupní parametry Když má mít funkce výstupní parametr typu T, deklaruje (vstupní) parametr typu T*, tj. ukazatel na typ T. Pro přístup k proměnné (výstupnímu parametru) je třeba ukazatel dereferencovat pomocí * (prefixový operátor hvězdička). Volající předává ukazatel (adresu) výstupní proměnné místo její hodnoty. Adresa proměnné je získána pomocí & (prefixový operátor ampersand). Hvězdičky v deklaraci se množí: požadovaný typ výstupního parametru deklarace formálního parametru int int * char char * double double * int * int ** int ** int *** M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 27/48

44 Vstupní a výstupní parametry Když má mít funkce výstupní parametr typu T, deklaruje (vstupní) parametr typu T*, tj. ukazatel na typ T. Pro přístup k proměnné (výstupnímu parametru) je třeba ukazatel dereferencovat pomocí * (prefixový operátor hvězdička). Volající předává ukazatel (adresu) výstupní proměnné místo její hodnoty. Adresa proměnné je získána pomocí & (prefixový operátor ampersand). Hvězdičky v deklaraci se množí: požadovaný typ výstupního parametru deklarace formálního parametru int int * char char * double double * int * int ** int ** int *** int (*)[5] int (**)[5] int (*)(void) int (**)(void) int (*(*)(int **))[7] int (*(**)(int **))[7] M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 27/48

45 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) { if ( a < b ) { *min = a; *max = b; /* dereference min a max */ else { *max = a; *min = b; int main(void) { int a, b, max, min; printf ( "Napis dve cisla:\n" ); scanf ( "%d%d", &a, &b ); minmax ( a, b, &min, &max ); /* adresa min a max */ printf ( "min = %d, max = %d\n", min, max ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 28/48

46 Vstupní a výstupní parametry obsah paměti Nesprávné řešení void minmax ( int a, int b, int min, int max) { if ( a < b ) { min = a; max = b; else { min = b; max = a; main min max int main ( void ) { int min, max; minmax ( 3, 8, min, max ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 29/48

47 Vstupní a výstupní parametry obsah paměti Nesprávné řešení void minmax ( int a, int b, int min, int max) { if ( a < b ) { min = a; max = b; else { min = b; max = a; int main ( void ) { int min, max; minmax ( 3, 8, min, max ); main min max minmax a 3 b 8 min max M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 29/48

48 Vstupní a výstupní parametry obsah paměti Nesprávné řešení void minmax ( int a, int b, int min, int max) { if ( a < b ) { min = a; max = b; else { min = b; max = a; int main ( void ) { int min, max; minmax ( 3, 8, min, max ); main min max minmax a 3 b 8 min 3 max 8 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 29/48

49 Vstupní a výstupní parametry obsah paměti Nesprávné řešení void minmax ( int a, int b, int min, int max) { if ( a < b ) { min = a; max = b; else { min = b; max = a; int main ( void ) { int min, max; minmax ( 3, 8, min, max ); main min max minmax a 3 b 8 min 3 max 8 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 29/48

50 Vstupní a výstupní parametry obsah paměti Nesprávné řešení void minmax ( int a, int b, int min, int max) { if ( a < b ) { min = a; max = b; else { min = b; max = a; main min max int main ( void ) { int min, max; minmax ( 3, 8, min, max ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 29/48

51 Vstupní a výstupní parametry obsah paměti Správné řešení void minmax ( int a, int b, int * min, int * max) { if ( a < b ) { *min = a; *max = b; else { *min = b; *max = a; main min max int main ( void ) { int min, max; minmax ( 3, 8, &min, &max ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 30/48

52 Vstupní a výstupní parametry obsah paměti Správné řešení void minmax ( int a, int b, int * min, int * max) { if ( a < b ) { *min = a; *max = b; else { *min = b; *max = a; int main ( void ) { int min, max; minmax ( 3, 8, &min, &max ); main min max minmax a 3 b 8 min max M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 30/48

53 Vstupní a výstupní parametry obsah paměti Správné řešení void minmax ( int a, int b, int * min, int * max) { if ( a < b ) { *min = a; *max = b; else { *min = b; *max = a; int main ( void ) { int min, max; minmax ( 3, 8, &min, &max ); main min 3 max 8 minmax a 3 b 8 min max M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 30/48

54 Vstupní a výstupní parametry obsah paměti Správné řešení void minmax ( int a, int b, int * min, int * max) { if ( a < b ) { *min = a; *max = b; else { *min = b; *max = a; int main ( void ) { int min, max; minmax ( 3, 8, &min, &max ); main min 3 max 8 minmax a 3 b 8 min max M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 30/48

55 Vstupní a výstupní parametry obsah paměti Správné řešení void minmax ( int a, int b, int * min, int * max) { if ( a < b ) { *min = a; *max = b; else { *min = b; *max = a; main min 3 max 8 int main ( void ) { int min, max; minmax ( 3, 8, &min, &max ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 30/48

56 Vstupní a výstupní parametry Pro vstupní parametry se může lišit typ skutečného a formálního parametru. Například skutečný parametr typu int je zkonvertován na formální parametr typu double (v jazyce C dokonce i naopak). To neplatí pro výstupní parametry. Datové typy ukazatelů se musí přesně shodovat. Neshoda datových typů ukazatelů vede pouze na varovné hlášení. Nicméně je nepravděpodobné, že by takový program správně fungoval. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 31/48

57 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

58 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... minmax(fa, ib+10, &imin, &imax ); /* ok - fa parametr se zkonvertuje na int */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

59 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... minmax(fa, ib+10, &imin, &imax ); /* ok - fa parametr se zkonvertuje na int */ minmax(fa, fb, &fmin, &fmax); /*!! varování - float *!= int * */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

60 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... minmax(fa, ib+10, &imin, &imax ); /* ok - fa parametr se zkonvertuje na int */ minmax(fa, fb, &fmin, &fmax); /*!! varování - float *!= int * */ minmax(ia, ib, &(imin + imax), &imax ); /*!!! chyba - nejde o l-value (proměnnou) */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

61 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... minmax(fa, ib+10, &imin, &imax ); /* ok - fa parametr se zkonvertuje na int */ minmax(fa, fb, &fmin, &fmax); /*!! varování - float *!= int * */ minmax(ia, ib, &(imin + imax), &imax ); /*!!! chyba - nejde o l-value (proměnnou) */ minmax(ia, ib, &imin + 10, &imax ); /*!! syntaxe ok - bude provádět něco zcela jiného */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

62 Vstupní a výstupní parametry #include <stdio.h> void minmax ( int a, int b, int * min, int * max ) {... int main(void) { int ia, ib, imax, imin; float fa, fb, fmax, fmin;... minmax(fa, ib+10, &imin, &imax ); /* ok - fa parametr se zkonvertuje na int */ minmax(fa, fb, &fmin, &fmax); /*!! varování - float *!= int * */ minmax(ia, ib, &(imin + imax), &imax ); /*!!! chyba - nejde o l-value (proměnnou) */ minmax(ia, ib, &imin + 10, &imax ); /*!! syntaxe ok - bude provádět něco zcela jiného */ minmax(ia, ib, &4, &imax ); /*!!! chyba - nejde o l-value */... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 32/48

63 Alokace paměti Alokace paměti je dána kompilátorem a běhovým prostředím. Jak se rezervuje pamět pro proměnné: Globální proměnné jsou alokovány v datovém segmentu kompilátorem. Alokace je provedena jedinkrát v době kompilace (statická alokace) a je stejná po celou dobu běhu programu. Alokace lokálních proměnných funkce probíhá až za běhu programu. Prostor pro proměnné je vytvořen v momentu, kdy je třeba. Proměnné jsou alokovány až při volání funkce (nebo vstupu do bloku). Po návratu je pamět ový prostor uvolněn a může být použit jinou (nebo i stejnou) funkcí (blokem). To šetří pamět ovým prostorem a umožňuje např. rekurzi. Lokální proměnné jsou alokovány na zásobníku (stack). Zásobník pracuje v režimu LIFO (last-in, first-out) - poslední dovnitř, první ven. Když je funkce zavolána, její proměnné jsou alokovány na vrcholu zásobníku. Když funkce skončí (návratem do volající), vrchol zásobníku se vrátí do stavu před zavoláním funkce. Prostor, který zabíralo volání funkce se tím uvolní pro nové využití. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 33/48

64 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

65 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

66 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

67 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d e 6 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

68 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d e 6 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

69 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d e 6 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

70 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d e 6 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

71 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d f 6 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

72 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d f 6 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

73 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d x 5 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

74 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d x 5 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

75 Alokace paměti int g; void h ( int x ) {... void f ( void ) { int c, d; if (... ) { int e = 6; h(8+e); while (... ) { int f;... h(5); int main ( void ) { int a, b; f(); globals g 0 stack a b c d x 5 x 14 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 34/48

76 Složitost prvočísla Spočítat počet prvočísel menších než zadaná mez n. Odhadnout čas potřebný pro výpočet. Prvočíslo je přirozené číslo x větší než 1, které má jen dva dělitele 1 a x. Nástin algoritmu: pro všechna přirozená čísla x od 2 do n-1 když x je prvočíslo inkrementovat čítač změřit potřebný čas M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 35/48

77 Složitost prvočísla int countprimes ( int max ) { int i, cnt = 0; for ( i = 2; i < max; i ++ ) if ( isprime ( i ) ) /* budeme mít různé varianty */ cnt ++; return cnt; int main ( void ) { double timest; int cnt, max = ; timest = timestamp (); cnt = countprimes ( max ); printf ("%d prvocisel < %d, trvalo %.3f s\n", cnt, max, timestamp () - timest ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 36/48

78 Složitost prvočísla #include <time.h> #include <sys/time.h> double timestamp ( void ) { struct timeval tv; gettimeofday ( &tv, NULL ); /* funkce UNIX OS - čtení HW timeru */ /* Windows má obdobnou funkci - GetTickCount() */ return ( tv. tv_sec * tv. tv_usec ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 37/48

79 Složitost prvočísla int isprime1 ( int n ) { int i, divisors = 0; if (n < 2) for (i = 1; i <= n; i++) if (n % i == 0) divisors ++; return ( divisors == 2 ); Číslo n je prvočíslem, když počet jeho dělitelů je právě 2. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 38/48

80 Složitost prvočísla int isprime2 ( int n ) { int i; if (n < 2) for (i = 2; i < n; i++) if (n % i == 0) return 1; Když je nalezen dělitel (různý od 1 a n), pak n není prvočíslo. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 39/48

81 Složitost prvočísla int isprime3 ( int n ) { int i; if (n < 2) for (i = 2; i <= n/2; i++) if (n % i == 0) return 1; Číslo n není prvočíslo, když existuje dělitel čísla n menší nebo roven n/2. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 40/48

82 Složitost prvočísla int isprime4 ( int n ) { int i; if (n < 2) for (i = 2; i <= sqrt ( n ); i++) if (n % i == 0) return 1; Číslo n není prvočíslo, když existuje dělitel čísla n menší nebo roven odmocnině z n. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 41/48

83 Složitost prvočísla int isprime5 ( int n ) { int i, max; if (n < 2) max = (int) sqrt ( n ); for (i = 2; i <= max; i++) if (n % i == 0) return 1; Výraz sqrt ( n ) byl vyhodnocován při každém průchodu cyklem. Odmocninu stačí vypočítat jen jednou, před cyklem. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 42/48

84 Složitost prvočísla int isprime6 ( int n ) { int i, max; if (n < 2) if (n == 2) return 1; if (n % 2 == 0) max = (int) sqrt ( n ); for (i = 3; i <= max; i += 2) if (n % i == 0) return 1; Není důvod testovat sudé dělitele. Když n není dělitelné 2, můžeme vynechat všechna sudá i. Kolik je iterací pro n = Kolik je iterací pro n = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 43/48

85 Složitost prvočísla Mi 16 Mi 256 Mi 1 Gi isprime ms 0.19 ms ms s isprime ms 0.04 ms 5.95 ms 1.02 s isprime ms 0.02 ms 3.44 ms ms isprime ms 0.03 ms 1.27 ms ms 2.49 s isprime ms 0.02 ms 0.46 ms ms ms s isprime ms 0.01 ms 0.25 ms 8.15 ms ms s M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 44/48

86 Složitost prvočísla Mi 16 Mi 256 Mi 1 Gi isprime ms 0.19 ms ms s isprime ms 0.04 ms 5.95 ms 1.02 s isprime ms 0.02 ms 3.44 ms ms isprime ms 0.03 ms 1.27 ms ms 2.49 s isprime ms 0.02 ms 0.46 ms ms ms s isprime ms 0.01 ms 0.25 ms 8.15 ms ms s sieve 0.06 ms 0.00 ms 0.06 ms 0.98 ms ms ms 9.14 s s M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 44/48

87 Složitost prvočísla Celkový čas závisí na n. Naměřené hodnoty naznačují exponenciální nárůst. Program sieve je založen na algoritmu Eratosthenova síta na prvočísla. Ten je nejrychlejší, avšak stále exponenciální. Proč exponenciální Není lineární M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 45/48

88 Složitost prvočísla Celkový čas závisí na n. Naměřené hodnoty naznačují exponenciální nárůst. Program sieve je založen na algoritmu Eratosthenova síta na prvočísla. Ten je nejrychlejší, avšak stále exponenciální. Proč exponenciální Není lineární Důležitý je základ. Typicky se počet operací vyjadřuje ve vztahu k velikosti vstupu (počtu bitů na vstupu). Náš program počítal počet prvočísel menších než n. Pro zadání čísla n bylo potřeba b = log 2 (n) bitů vstupu. Tedy n = 2 b. Programy provedly testy čísel 1 až n, každé testování zabralo nejvýše n pokusů o dělení, lepší varianty méně. Celkově tedy bylo provedeno až n 2 operací (horní odhad). Tato hodnota vyjádřena pomocí velikosti vstupu b dává: n 2 = (2 b ) 2 = 2 2b, tedy program opravdu má exponenciální složitost. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 45/48

89 Složitost prvočísla Předpokládejme ideální algoritmus, který pomocí jediné operace rozhodne, zda x je pročíslo: takový algoritmus je hypotetický, nejlepší známé testy prvočíselnosti pracují v polynomiálním čase log K 2 (x) = a K, K je konstanta, a je počet bitů testovaného čísla x. Jedná se o pravděpodobnostní testy prvočíselnosti (Rabin-Miller, Agrawal-Biswas) a deterministický test prvočíselnosti (Agrawal-Kayal-Saxena). Pokud bychom tímto ideálním algoritmem otestovali čísla od 1 do n, musíme jej použít n-krát. Celková složitost bude n = 2 b, tedy opět exponenciální (dolní odhad). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 46/48

90 Složitost hledání maxima Uvažme jiný problém: nalezení maxima v n vstupních číslech. Vstupem je n čísel, tedy velikost vstupu je b = n K bitů (předpokládáme K bitů na jedno číslo). Program musí porovnat těchto n čísel, tedy potřebuje provést 3n operací (čtení, porovnání a případné uložení nového maxima). Celková složitost bude 3n = 3 K b, tedy jedná se o lineární složitost vzhledem k velikosti vstupu. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 47/48

91 Otázky a odpovědi Otázky... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Funkce, BI-PA1 48/48

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

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod 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 třídám a objektům, instančním

Více

Ukazatele #1, struktury

Ukazatele #1, struktury Ukazatele #1, struktury 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

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

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

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

Příkazy if, while, do-while, for, switch 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íı

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

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

Č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 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

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

Více

Pointery II. Jan Hnilica Počítačové modelování 17

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

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

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

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

PB161 Programování v jazyce C++ Přednáška 4

PB161 Programování v jazyce C++ Přednáška 4 PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20

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

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

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

Ú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

Ú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

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

Více

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

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

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

IUJCE 07/08 Přednáška č. 6

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

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

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

Ukazatele #2, dynamická alokace paměti

Ukazatele #2, dynamická alokace paměti Ukazatele #2, dynamická alokace paměti 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

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

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

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

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

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

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

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer 4. Rekurze 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

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

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

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2 PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C

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

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

Sdílení dat mezi podprogramy

Sdílení dat mezi podprogramy Sdílení dat mezi podprogramy Datové objekty mohou být mezi podprogramy sdíleny pomocí ne-lokálních referenčních prostředí, která jsou vytvářena na základě æ explicitních modifikací (formální parametry

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

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

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

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

Ú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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

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

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

ZPRO v C Ing. Vít Hanousek. verze 0.3 verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

IUJCE 07/08 Přednáška č. 1

IUJCE 07/08 Přednáška č. 1 Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií 9 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 28. prosince 2009 Struktury Struktury heterogenní struktura položky mohou být různých datových typů vystupuje jako jediný objekt

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

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

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

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

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

Ří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

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

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

NPRG030 Programování I, 2015/16 1 / :25:32

NPRG030 Programování I, 2015/16 1 / :25:32 NPRG030 Programování I, 2015/16 1 / 21 22. 10. 2015 13:25:32 Podprogramy Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X

Více

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

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky 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 Ukazatele BI-PA1

Více

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku Podprogramy zásady: jednu věc programovat pouze jednou podprogram logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku // nacteni strany 1 double

Více

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Páté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 5. týden

Více

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

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

Spojová implementace lineárních datových struktur

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5

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

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

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

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

Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016 Úvod Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016 Přednášky byly připraveny i s pomocí materiálů, které vyrobili Ladislav Vágner a Pavel Strnad

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

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

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

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

Testování prvočíselnosti

Testování prvočíselnosti Dokumentace zápočtového programu z Programování II (NPRG031) Testování prvočíselnosti David Pěgřímek http://davpe.net Úvodem V různých oborech (například v kryptografii) je potřeba zjistit, zda je číslo

Více

NPRG031 Programování II --- 2/2 Z, Zk

NPRG031 Programování II --- 2/2 Z, Zk NPRG031 Programování II --- 2/2 Z, Zk paralelka Y St 14:00-15:30 v S3 Pavel Töpfer Kabinet software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer

Více

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Rekurze doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Rekurze 161 / 344 Osnova přednášky

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Mazanec Karel Richta,

Více

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více