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

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

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

Transkript

1 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é vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 7., 9. a 10. listopadu 2017

2 Přehled Pole (deklarace, použití). Pole příklady. Řetězce. Multidimenzionální pole (matice). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 2/43

3 Pole motivace Problém: uložit změřené teploty pro každý den týdne, spočítat průměrnou teplotu (v týdnu), zobrazit průměr, zobrazit rozdíl mezi naměřenou a průměrnou teplotou pro každý den týdne. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 3/43

4 Pole motivace int main ( void ) { int t1,t2,t3,t4,t5,t6,t7,avg; printf ( "Napis zmerene teploty (7 x):\n" ); scanf ( "%d%d%d%d%d%d%d", &t1,&t2,&t3,&t4,&t5,&t6,&t7 ); avg = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; printf ( "Prumerna teplota: %d\n", avg ); printf ( "Nedelni diference: %d\n", t1 - avg ); printf ( "Pondelni diference: %d\n", t2 - avg );... printf ( "Sobotni diference: %d\n", t7 - avg ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 4/43

5 Pole motivace Naivní řešení je nešikovné: program je rozvláčný, některé příkazy se opakují (pouze s malými modifikacemi), program není škálovatelný (průměr za měsíc, za rok). Problém může být elegantněji vyřešen pomocí pole (array). Pole je strukturovaný datový typ skládající se nějakých prvků (buněk), které jsou všechny stejného typu. Prvek pole je identifikován svým indexem (celočíselnou hodnotou). V jazyce C jsou indexy čísla 0, 1,..., array size - 1. Velikost pole (array size) je dána jeho deklarací. Za běhu nemůže být změněna (pro statická pole). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 5/43

6 Pole motivace Pole bude použito pro uložení hodnot teploty: int temp[7] Vstupní hodnoty budou čteny ve for cyklu: for ( i = 0; i < 7; i ++ ) scanf ( "%d", &temp[i] ); Průměr bude opět počítán cyklem: avg = 0; for ( i = 0; i < 7; i ++ ) avg += temp[i]; avg /=7; A závěrečný report: for ( i = 0; i < 7; i ++ ) printf ( "diference: %d\n", temp[i] - avg ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 6/43

7 Pole Pole p obsahující n prvků typu T se deklaruje: T p[n] T n p je libovolný datový typ, je kladná celočíselná konstanta a je jméno proměnné (identifikátor). Je-li pole globální proměnná (mající rozsah platnosti v celém souboru), pak je počáteční obsah všech prvků pole definován - samé nulové bajty. Je-li pole lokální proměnná (deklarovaná v bloku funkce), pak je počáteční obsah pole nedefinován. Prvky pole jsou přístupné pomocí indexu: p[i] M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 7/43

8 Pole meze Indexování pole: p[i] je-li i nezáporná hodnota a i je menší než počet prvků pole (dimenze pole) p, pak p[i] je proměnná typu T, když i není v rozsahu indexu pole, tak p[i] znamená nějaké místo v paměti. Čtení nebo zápis na takové místo paměti může mít fatální následky (abnormální konec programu, přepis dat, ztrátu dat,... ), indexy pole nejsou testovány za běhu programu. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 8/43

9 Pole meze int a; int b[4]; int c; a b c b[0] b[1] b[2] b[3] b[0] = 10 b[4] = 20 Indexování mimo meze není za běhu programu testováno: chování programu je nedefinované, chování se může lišit podle kompilátoru a operačního systému, indexování mimo meze (out-of-bounds) se obtížně ladí. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 9/43

10 Pole sekvence #include <stdio.h> #define DAYS_MAX 100 int main ( void ) { int temp[days_max], n, avg=0, i; printf ( "Napis pocet dni (1.. %d):\n", DAYS_MAX ); scanf ( "%d", &n ); printf ( "Napis teploty (%d x):\n", n ); for ( i = 0; i < n; i ++ ) scanf ( "%d", &temp[i] ); for ( i = 0; i < n; i ++ ) avg += temp[i]; avg /= n; printf ( "Prumerna teplota: %d\n", avg ); printf ( "diference:\n" ); for ( i = 0; i < n; i ++ ) printf ( "%d ", temp[i] - avg ); printf( "\n" ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 10/43

11 Pole sekvence Co když uživatel napíše počet dní větší než DAYS MAX? int readint ( int min, int max ) { int x; scanf ( "%d", &x ); while ( x < min x > max ) { printf ( "Spatne, prosim napsat znovu:"); scanf ( "%d",&x ); return x;... printf ( "Napis pocet dni (1.. %d):\n", DAYS_MAX ); n = readint ( 1, DAYS_MAX ); printf("napis teploty (%d x):\n", n );... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 11/43

12 Pole sekvence Obrácení vstupu (verze s polem). #include <stdio.h> #define ARRAY_MAX 100 int main ( void ) { int arr[array_max], x, i = 0; printf ( "Napis sekvenci, maximum %d cisel, " "zakoncenou nulou\n", ARRAY_MAX ); do { scanf ( "%d", &x ); arr[i++] = x; while ( x!= 0 && i < ARRAY_MAX ); for ( i = i - 1; i >= 0; i -- ) printf ( "%d ", arr[i] ); printf ( "\n" ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 12/43

13 Pole jako tabulka V předchozích příkladech byly do poĺı uloženy sekvence. Pole mohou být použity i pro tabulky dvojice (index, hodnota). Toto mapování přiřadí hodnotě indexu příslušný prvek pole. Jednoduchý příklad Přečíst sekvenci přirozených čísel z intervalu od 1 do 100, včetně mezí, a sestavit tabulku četnosti hodnot sekvence. Tabulka bude obsahovat 100 prvků typu int. Hodnota frq[x] bude reprezentovat počet výskytů čísla x+1 v sekvenci. Tabulku deklarujeme jako globální pole, tedy její prvky budou na počátku nulové. (Globální pole ale není ideální řešení.) Použijeme dvě funkce na manipulaci s polem: readnumbers() čte prvky ze standardního vstupu a plní frekvenční tabulku, printtable() vypisuje obsah tabulky četnosti. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 13/43

14 Pole jako tabulka int frq[100]; void readnumbers ( void ) { int x; printf ( "Napis cisla, zakonceni nulou\n" ); scanf ( "%d", &x ); while ( x!= 0 ) { if ( x >= 1 && x <= 100 ) frq[x-1] ++; scanf ( "%d", &x ); void printtable ( void ) { int i; for ( i = 1; i <= 100; i ++ ) if ( frq[i-1] ) printf ( "%2d vyskyt %d krat\n",i, frq[i-1] ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 14/43

15 Pole jako tabulka Modifikace tabulka četnosti pro rozsah od MIN do MAX #define MIN 1 #define MAX 100 int frq[max-min+1]; void readnumbers ( void ) { int x; printf ( "Napis cisla zakoncena nulou\n"); scanf ( "%d", &x ); while ( x!=0 ) { if ( x >= MIN && x <= MAX) frq[x-min] ++; scanf ( "%d", &x ); void printtable ( void ) { int i; for ( i = MIN; i <= MAX; i ++ ) if ( frq[i-min] ) printf ( "%2d vyskyt %d krat\n",i, frq[i-min] ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 15/43

16 Pole jako parametr funkce Problém program čte dva vektory a počítá jejich skalární součin. Dimenze vektorů jsou dány konstantou MAX. Vektory jsou čteny funkcí readvector(). void readvector (int v[], int n ) { int i; printf ( "Napis %d konponent vektoru:\n", n); for ( i = 0; i < n; i ++ ) scanf ( "%d", &v[i] ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 16/43

17 Pole jako parametr funkce Skalární součin počítá funkce dotproduct(): int dotproduct ( int x[], int y[], int n ) { int i, s = 0; for ( i = 0; i < n; i ++ ) s += x[i] * y[i]; return s; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 17/43

18 Pole jako parametr funkce #define MAX 100 int readint( int min, int max ) {... void readvector ( int v[], int n ) {... int dotproduct( int x[], int y[], int n ) {... int main ( void ) { int x[max], y[max], n; printf ( "Pocet komponent vektoru (1.. %d):\n", MAX ); n = readint( 1, MAX ); printf ( "vektor x\n" ); readvector ( x, n ); printf ( "vektor y\n" ); readvector (y, n ); printf ( "Skalarni soucin: %d\n", dotproduct(x, y, n)); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 18/43

19 Pole jako parametr funkce shrnutí Funkce deklaruje pole s prvky typu T jako parametr ve dvou variantách: T arr[] T * arr Obě možnosti jsou jak z pohledu syntaxe, tak implementace, ekvivalentní. Parametr arr slouží pro přístup k prvku pole obvyklým způsobem: arr[i] Skutečným parametrem je pole, jehož prvky musí být typu T, libovolné velikosti. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 19/43

20 Pole jako parametr funkce shrnutí Funkce nezná velikost předaného pole. Parametr arr nemá tuto informaci. Hodnota parametru předaná funkci je pouze adresa pole v paměti (ukazatel na počátek pole). Pozor: sizeof ( arr ) vrací délku ukazatele, nikoli velikost pole (tj. skutečný počet prvků pole)! Pokud funkce potřebuje znát skutečný počet prvků pole, je třeba předat další parametr, třeba int nrelem. Jaký je rozdíl mezi polem parametrem funkce a výstupním parametrem? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 20/43

21 Řetězce Řetězcový literál je sekvence znaků uzavřená do uvozovek: "Toto je retezec" "jeste jiny retezec\n" "Rekl \"Ahoj!\"\n" "" Reprezentace řetězců v paměti: pole znaků, prvek pole má datový typ char, řetězec je zakončen nulovým znakem (nulový bajt znak \0 ). Řetězcové proměnné: pole znaků, char astring[10] je proměnná, která může obsahovat řetězec dlouhý až 9 znaků (jeden znak je třeba pro zakončení nulovým znakem). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 21/43

22 Řetězce Operace s řetězci funkce ve standardní knihovně. Hlavičkový soubor: #include <string.h> Některé důležité funkce: strcpy kopírování řetězce (nebezpečné), strcat připojení řetězce za řetězec (nebezpečné), strcmp porovnání dvou řetězců, strlen délka řetězce, strncpy kopírování řetězce (bezpečná varianta), strncat připojení řetězce za řetězec (bezpečná varianta). Společný problém nebezpečné varianty netestují, zda se výsledný řetězec vejde do cílového pole. Je-li řetězec příliš dlouhý, přepíše se pamět! M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 22/43

23 int main(void) { char w1[max_len], w2[max_len], gt[max_len]; printf ( "Napis prvni slovo:\n" ); scanf ( "%s", w1 ); printf ( "Napis druhe slovo:\n" ); scanf ( "%s", w2 ); /* scanf %s konverze čte slovo ze vstupu, bílé znaky (mezery, tabulátory, nové řádky) jsou oddělovače */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 23/43 Řetězce příklad Přečíst dvě slova. Vypsat jejich délku. Najít a vypsat lexikograficky větší slovo. #include <stdio.h> #include <string.h> #define MAX_LEN 100

24 Řetězce příklad printf ( "%s, delka je %d znaku\n", w1, strlen(w1)); printf ( "%s, delka je %d znaku\n", w2, strlen(w2)); if ( strcmp ( w1, w2 ) > 0 ) strcpy ( gt, w1 ); else strcpy ( gt, w2 ); printf("vetsi slovo %s\n", gt ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 24/43

25 Řetězce příklad Program může havarovat, když na vstupu bude slovo delší než 99 znaků. Tato technika se nazývá přeplnění bufferu ( buffer overflow ). Je to obecná metoda, jak se nabourat do vzdáleného systému. K zamezení této zranitelnosti je vhodné vždy omezit max. délku vstupního řetězce:... scanf ( "%99s", w1 ); /* 99 znaků max. */... Dále je dobrou technikou vždy omezit délku i při kopírovacích operacích (zde nelze zneužít k nabourání se do vzdáleného sytému, ale je to dobré obecné opatření pro bezpečnost programu):... strncpy ( gt, w1, sizeof ( gt ) ); /* strncpy místo strcpy */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 25/43

26 Řetězce příklad Slovo pozpátku: #include <stdio.h> #include <string.h> #define MAX_LEN 100 void reverse ( char w[] ); int main ( void ) { char w[max_len]; printf ("Napis slovo:\n"); scanf ( "%99s", w ); reverse ( w ); printf ( "Pozpatku: %s\n", w ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 26/43

27 Řetězce příklad void reverse ( char w[] ) { int len = strlen ( w ), last = len-1, half = len/2, i; char tmp; for (i=0; i<half; i++) { tmp = w[i]; w[i] = w[last-i]; w[last-i] = tmp; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 27/43

28 Multidimenzionální pole Pole je multidimenzionální, když pro přístup k prvku jsou třeba dva nebo více indexů. Multidimenzionální pole je v C implementováno jako pole, jehož elementy jsou pole (která mají o dimenzi méně). Dvoudimenzionální pole může reprezentovat třeba matici: double mat[4][3]; matice má prvky typu double, matice má 4 řádky a 3 sloupce, matice je organizována jako pole 4 prvků, kde každým prvkem je opět pole 3 prvků, každý je hodnotou typu double. Pro přístup k prvku matice musí být použity 2 indexy: sum = 0; for ( i = 0; i < 4; i ++ ) for ( j = 0; j < 3; j ++ ) sum += mat[i][j]; /* součet všech prvků */ M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 28/43

29 Multidimenzionální pole příklad Vstup programu: dvě matice, obě m x n prvků. Výstup programu: součet matic. Poznámka: velikost matic musí být pevně daná (statická alokace), tudíž velikost matic je omezena na ROWS MAX x COLS MAX prvků, kde ROWS MAX a COLS MAX jsou symbolické konstanty. Program bude umět zpracovávat i menší matice, část vyhrazeného prostoru se nevyužije. Pokud bychom chtěli pracovat s maticemi libovolné velikosti, museli bychom pole alokovat dynamicky. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 29/43

30 Multidimenzionální pole příklad #include <stdio.h> #define ROWS_MAX 10 #define COLS_MAX 10 int readint (int min, int max ) {... /* čte číslo ze vstupu, testuje rozsah min..max */ void readmatrix ( int mat[][cols_max], int m, int n ) {... void matrixsum (int x[][cols_max], int y[][cols_max], int z[][cols_max], int m, int n ) {... void printmatrix ( int mat[][cols_max], int m, int n) {... int main (void ) {... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 30/43

31 Multidimenzionální pole příklad int main (void ) { int x[rows_max][cols_max], y[rows_max][cols_max], z[rows_max][cols_max], m, n; printf ( "Napis pocet radku (max. %d):\n", ROWS_MAX ); m = readint ( 1, ROWS_MAX ); printf ( "Napis pocet sloupcu (max. %d):\n", COLS_MAX ); n = readint ( 1, COLS_MAX ); printf ( "Prvni matice:\n" ); readmatrix (x, m, n ); printf ( "Druha matice:\n" ); readmatrix ( y, m, n); matrixsum (x, y, z, m, n); printf ( "Vysledek:\n" ); printmatrix (z, m, n ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 31/43

32 Multidimenzionální pole příklad void readmatrix ( int mat[][cols_max], int m, int n ) { int r, c; printf ( "Napis %d x %d celych cisel\n", m, n ); for ( r = 0; r < m; r ++ ) for ( c = 0; c < n; c ++ ) scanf ( "%d", &mat[r][c] ); void printmatrix ( int mat[][cols_max], int m, int n ) { int r, c; for ( r = 0; r < m; r ++ ) { for ( c = 0; c < n; c ++ ) printf ( "%5d ", mat[r][c] ); printf ( "\n" ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 32/43

33 Multidimenzionální pole příklad void matrixsum (int x[][cols_max], int y[][cols_max], int z[][cols_max], int m, int n) { int r, c; for ( r = 0; r < m; r ++ ) for (c = 0; c < n; c ++ ) z[r][c] = x[r][c] + y[r][c]; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 33/43

34 Minimální a maximální prvek pole Najít nejmenší a největší prvek při použití co nejmenšího možného počtu porovnání. #include <stdio.h> void dump ( int arr[], int lng ) { int i; for ( i = 0; i < lng; i++ ) printf ( "[%2d]=%5d\n", i, arr[i] ); int main ( void ) { int min, max; int a[] = {1, 4, 5, 78, -100, 45, 28, 34, 5; /* počet prvků pole a: sizeof ( a ) / sizeof ( a[0] ) */ dump ( a, sizeof ( a ) / sizeof ( a[0] ) ); minmax ( a, sizeof ( a )/ sizeof ( a[0] ), &min, &max ); printf ( "Max: %d,\nmin %d\n", max, min ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 34/43

35 Minimální a maximální prvek pole void minmax1 ( int arr[], int len, int *min, int *max ) { int i; *min = *max = arr[0]; for (i = 1; i < len; i ++ ) { if ( arr[i] > *max ) *max = arr[i]; if ( arr[i] < *min ) *min = arr[i]; Kolik porovnání je v nejlepším případě? Kolik porovnání je v nejhorším případě? Co když len == 0? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 35/43

36 Minimální a maximální prvek pole void minmax2 ( int arr[], int len, int *min, int *max ) { int i; *min = *max = arr[0]; for ( i = 1; i < len; i ++ ) { if ( arr[i] > *max ) *max = arr[i]; else if ( arr[i] < *min ) *min = arr[i]; Kolik porovnání je v nejlepším případě? Kolik porovnání je v nejhorším případě? {1,2,10,20,50,100 {10,3,0,-7,-200 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 36/43

37 Minimální a maximální prvek pole void minmax3 ( int arr[], int len, int *min, int *max ) { int i; if ( arr[0] > arr[1] ) { *max = arr[0]; *min = arr[1]; else { *max = arr[1]; *min = arr[0]; for ( i = 2 - len % 2; i < len - 1; i += 2 ) if ( arr[i] > arr[i + 1] ) { if ( arr[i] > *max ) *max = arr[i]; if ( arr[i + 1] < *min ) *min = arr[i + 1]; else { if ( arr[i + 1] > *max ) *max = arr[i + 1]; if ( arr[i] < *min ) *min = arr[i]; Kolik porovnání je v nejlepším případě? Kolik porovnání je v nejhorším případě? Co když je len je liché? A co když len == 1? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 37/43

38 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

39 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

40 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

41 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

42 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

43 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

44 Eratosthénovo síto Problém: nalézt prvočísla menší než zadané n. Naivní řešení: zkusit pro každé číslo, zda je či není prvočíslo. Eratosthénes z Kyrény ( př.n.l.): vylepšený algoritmus, který eliminuje složená čísla prime M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 38/43

45 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

46 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

47 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x 3x M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

48 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x 3x x 2 Pro jaké x budeme naposledy vypalovat nějaké číslo? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

49 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x 3x x 2 Pro jaké x budeme naposledy vypalovat nějaké číslo? n 2 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

50 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x 3x x 2 Pro jaké x budeme naposledy vypalovat nějaké číslo? n 2 n 3 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

51 Eratosthénovo síto algoritmus 1 Na voskovou destičku napiš čísla 1 až n. 2 Vypal číslo 1 horkou jehlou. 3 Začni od x = 2, toto je prvočíslo. 4 Vypal horkou jehlou všechny násobky x. 5 Ukonči se, pokud již neexistuje větší číslo. 6 Nalezni další větší nevypálené číslo x, toto číslo je prvočíslo. Pokračuj bodem 4. Který první násobek x budeme v bodě 4 vypalovat? 2x 3x x 2 Pro jaké x budeme naposledy vypalovat nějaké číslo? n n 2 n 3 Časová složitost: T (n) O(n log(log(n))), kde n je horní mez. Časová složitost: T (b) O(2 b log(b)), kde b je počet bitů na vstupu (b = log 2 (n) ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 39/43

52 Eratosthénovo síto implementace #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX void sieve ( char set[], int max ); void print ( char set[], int max ); int count ( char set[], int max ); int main ( void ) { char set [MAX]; sieve ( set, MAX ); printf( "Prvocisla od 2 do %d:\n", MAX ); print ( set, MAX ); printf( "Celkem %d prvocisel\n", count ( set, MAX ) ); return 0; M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 40/43

53 Eratosthénovo síto implementace void sieve ( char set[], int max ) { int i, p = 2, pmax = (int) sqrt ( max ); /* všechna čísla jsou kandidáti */ for (i = 0; i < max; i ++ ) set[i] = 1; set[0] = set[1] = 0; /* 0 a 1 nejsou prvočísla */ do { for ( i = p*p; i < max; i += p ) set[i] = 0; /* škrtání násobků */ /* Hledáme další prvočíslo */ do { p++; while (!set[p] ); while ( p <= pmax ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 41/43

54 Eratosthénovo síto implementace void sieve ( char set[], int max ) { int i, p = 2, pmax = (int) sqrt ( max ); /* všechna čísla jsou kandidáti */ for (i = 0; i < max; i ++ ) set[i] = 1; set[0] = set[1] = 0; /* 0 a 1 nejsou prvočísla */ do { for ( i = p*p; i < max; i += p ) set[i] = 0; /* škrtání násobků */ /* Hledáme další prvočíslo */ do { p++; while (!set[p] ); while ( p <= pmax ); Je hledání dalšího prvočísla vždy bezpečné? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 41/43

55 Eratosthénovo síto implementace int count ( char set[], int max) { int i, res = 0; for (i = 2; i < max; i++ ) res += set[i]!= 0; return res; void print ( char set[], int max) { int i, res = 0; for (i = 2; i < max; i++ ) if ( set[i] ) printf ( " %d", i ); printf ( "\n" ); M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Pole, BI-PA1 42/43

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

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

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

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

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

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

BI-PA1 Programování a algoritmizace 1 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 Pole, řetězce BI-PA1

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

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

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

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ; Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,

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

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

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

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

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

Ú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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Čtvrté 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 4.

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

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

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

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

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

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

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 Vstup, výstup BI-PA1

Více

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

Operační systémy. Cvičení 3: Programování v C pod Unixem Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené

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

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11. David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo

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

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 Vstup, výstup BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České

Více

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK; Struktury - složený datový typ. - datový typ jehož položky jsou jiné proměnné: - používá obvykle dohromady s příkazem typedef nechci vypisovat opakovaně složitou deklaraci pomocí typedef udělám nový datový

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

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

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

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Osmé 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 20.11.2017,

Více

Programovanie v jazyku C - pole treba poorat...

Programovanie v jazyku C - pole treba poorat... CVIČENIE 3/13 (SW2) Programovanie v jazyku C - pole treba poorat... PrednaskaB: Operátory, pravidla vyhodnocování PrednaskaZ: Číselné typy, operátory, typové konstrukce, pole a struktury About zadefinovanie

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

Ú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

10 Práce s řetězci - pokračování

10 Práce s řetězci - pokračování 10 Práce s řetězci - pokračování Máme deklarováno: char retez[50]; - čtení z klávesnice: scanf("%s", retez); - čtení zadané počtu znaků z klávesnice scanf("%10s", retez); // přečti řetězec z klávesnice,max

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

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

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

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

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

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr) Základy jazyka C Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační záležitosti Konzultace Pracovna 5.076 Úterý 15:00 16:30 Emailem martin.kauer@upol.cz Web předmětu http://tux.inf.upol.cz/~kauer/index.php?content=var&class=zp1

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Čí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

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

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

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

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

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

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Pole (array), ukazatele (pointer) Jazyk C České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Pole (array) (1) Pole je množina

Více

Př. další použití pointerů

Př. další použití pointerů Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Programování v jazyce C a C# část I. Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Algoritmizace a programování Téma: Programování Vyučující: Ing. Milan Káža

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

- 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

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek 1/73 https://en.cppreference.com internetová stránka s referencemi https://gedit.en.softonic.com/download

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

- 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

BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 10., 12. a 13. října 2017

BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel. 10., 12. a 13. října 2017 Proměnné, základní vstup a výstup 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

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

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

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

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 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 formátovanému výstupu,

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

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

BI-PA1 Programování a algoritmizace 1 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

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

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

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16 Jazyk C práce se soubory 1 Soubory Použití souborů pro vstup většího množství dat do programu (uživatel nezadává z klávesnice ručně tisíce údajů...) pro uložení většího množství výsledků, např. k pozdějšímu

Více

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele Strukturu lze funkci předat: hodnotou i pomocí ukazatele pouze pomocí ukazatele (reference na strukturu) pouze hodnotou (kopie struktury) (pole[i])+j adresa prvku na souřadnicích i, j adresa i-tého řádku

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce

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í 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection

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

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

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

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

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

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Programovanie v jazyku C - funkcie a makra

Programovanie v jazyku C - funkcie a makra CVIČENIE 4/13 (S7) Programovanie v jazyku C - funkcie a makra About co je to funkcia a procedura, rekurzivne funkcie, co je to makro TODO: ŘETĚZCE řetězec je pole znaků zakončené 0 ( \0 má ASCI-kód 0,

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

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

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

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

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

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

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

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

Ú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

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

Lekce 19 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

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

Více

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru Reprezentace reálnách čísel v počítači Reálná čísla jsou v počítači reprezentována jako čísla tvaru ±x

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

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

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

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

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

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více