Stromy, soubory. BI-PA1 Programování a Algoritmizace 1. Ladislav Vagner, Josef Vogel

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

Download "Stromy, soubory. BI-PA1 Programování a Algoritmizace 1. Ladislav Vagner, Josef Vogel"

Transkript

1 Stromy, soubory BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 2. ledna 2017 a 5. ledna 2017

2 Přehled Stromy a jejich aplikace. Soubory textové. Soubory binární. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 2/57

3 Stromy Strom: Nelineární spojová struktura. Prvky (uzly) ve stromě mohou mít více než jediného potomka: binární strom uzel může mít 0, 1, nebo 2 potomky, k-nární strom uzel může mít 0, 1,..., k potomků. Typy uzlů: listy uzly bez potomků, kořen uzel bez rodiče, vnitřní uzly uzly s rodičem a potomkem či potomky. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 3/57

4 Stromy A root B E C F G D left subtree H right subtree leaves internal nodes L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 4/57

5 Binární stromy implementace Uzly jsou reprezentovány strukturami: hodnota uzlu (užitečná data), spoje na dva potomky (dva ukazatele), spoj na rodiče (nepovinný). Spoje jsou reprezentovány ukazateli: platný spoj je reprezentován referencí na potomka, chybějící spoj (tzn. listy) obsahuje ukazatel NULL. typedef struct TNode { int data; struct TNode * left, *right; struct TNode * parent; /* nepovinný */ TNODE; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 5/57

6 Binární stromy příklad Dekodér Morseovy abecedy: e t i a n m s u r w d k g o h v f l p j b x c y z q L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 6/57

7 Binární stromy dekodér Morseovy abecedy typedef struct TNode { char ch; struct TNode *dot, *dash; TNODE; /* pomocné funkce */ TNODE *newnode ( char ch, TNODE *dot, TNODE * dash ) { TNODE *p = (TNODE*)malloc ( sizeof(*p) ); p->ch = ch; p->dot = dot; p->dash = dash; return p; TNODE *newleaf (char ch) { TNODE *p = (TNODE*)malloc ( sizeof(*p) ); p->ch = ch; p->dot = p->dash = NULL; return p; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 7/57

8 Binární stromy dekodér Morseovy abecedy TNODE *createtree ( void ) { return newnode (, newnode ( E, /*. */ newnode ( I, /*.. */ newnode ( S, /*... */ newleaf ( H, /*... */ newleaf ( V )), /*...- */ newnode ( U, /*..- */ newleaf ( F, /*..-. */ NULL ))), /*..-- nepoužito */ newnode( A, /*.- */...)), newnode ( T, /* - */...))); void freetree ( TNODE * n ) { /* rekurzivní uvolnění uzlů */ if (!n ) return; freetree ( n->left ); freetree ( n->right ); free ( n ); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 8/57

9 Binární stromy dekodér Morseovy abecedy char * decodechar ( char * src, char * res ) { TNODE *node = g_root; /* kořen dekodéru morseovky */ while (*src) { char c = *src ++; if (node!= NULL ) { if (c ==. ) node = node->dot; else if (c == - ) node = node->dash; else { *res = node->ch; return src; else { *res =? ; while (*src ==. *src == - ) src++; return src; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 9/57

10 Binární stromy dekodér Morseovy abecedy TNODE *g_root; int main ( void ) { char text[100], ch, *ptr; g_root = createtree () ; while ( fgets ( text, sizeof(text), stdin ) ) { ptr = text; while ( *ptr ) { ptr = decodechar ( ptr, &ch ); putchar ( ch ); putchar ( \n ); freetree ( g_root ); /* uvolnění dynamické paměti */ return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 10/57

11 Hra uhodni zvíře Vyber si nějaké zvíře. Já ho uhodnu. Létá? člověk> ne Je to ryba? člověk> ne Neuhádl jsem. Prosím o doplnění mé báze znalostí: Jaké zvíře jsi myslel? člověk> pes Otázka vystihující rozdíl mezi pes a ryba? člověk> štěká? Jaká odpověd je pro psa? člověk> ano Děkuji za doplnění mých znalostí. Chceš pokračovat?... L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 11/57

12 Hra uhodni zvíře Báze znalostí rozhodovací strom. Strom před a po doplnění. Does it fly? Does it fly? bird fish bird Does it bark? dog fish L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 12/57

13 Hra uhodni zvíře Nástin řešení: úvodní dialog. inicializace počátečního stromu: létá - pták, ryba aktuální_uzel = kořen while aktuální_uzel není list polož otázku uvedenou v aktuálním_uzlu kladná odpověd -> jdi na levý podstrom záporná odpověd -> jdi na pravý podstrom polož závěrečnou otázku -- je to - název zvířete z listu? kladná odpověd -> úspěšné hledání záporná odpověd -> úprava stromu L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 13/57

14 Hra uhodni zvíře #define MAX 100 typedef struct TNode { char text[max]; struct TNode *yes, *no; TNODE; TNODE *createnode ( char *text, TNODE *yes, TNODE *no ) { TNODE *n = (TNODE*)malloc ( sizeof(*n) ); strncpy ( n->text, text, sizeof (n->text) ); n->yes = yes; n->no = no; return n; int isleaf ( TNODE * n ) { return n->yes == NULL && n->no == NULL; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 14/57

15 Hra uhodni zvíře int positiveans ( void ) { char ans[20]; scanf ( "%19s", ans ); /* porovnání řetězců, velká = malá písmena */ return!strcasecmp ( ans, "ano" ); TNODE *inittree ( void ) { return createnode ( "Leta?", createnode ( "pták", NULL, NULL ), createnode ( "ryba", NULL, NULL ) ); void deltree ( TNODE * n ) {/* rekurzivní uvolnění stromu */ if (!n ) return; deltree ( n->yes ); deltree ( n->no ); free ( n ); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 15/57

16 Hra uhodni zvíře int main ( void ) { TNODE *root = inittree (); do { TNODE * node = root; printf ( "Vyber si nejake zvire. Ja ho uhodnu.\n" ); while (!isleaf ( node ) ) { printf ( "%s\n", node->text ); if ( positiveans () ) node = node->yes; else node = node->no; printf ( "Je to %s?\n", node->text ); if (! positiveans () ) updateknowledge ( node ); printf ( "Chces pokracovat?\n" ); while ( positiveans () ); deletetree ( root ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 16/57

17 Hra uhodni zvíře void updateknowledge ( TNODE *p ) { char newanim[max], newque[max]; printf ( "Neuhadl jsem. " "Prosim o doplneni me baze znalosti:\n" ); printf ( "Jake zvire jsi myslel?\n" ); scanf ( "%99s", newanim ); printf ( "Otazka vystihujici rozdil mezi %s a %s?\n", newanim, p->text ); scanf ( "%99s", newque ); printf ( "Jaka odpoved je pro %s?\n", newanim ); if ( positiveans () ) { p->yes = createnode ( newanim, NULL, NULL ); p->no = createnode ( p->text, NULL, NULL ); else { p->no = createnode ( newanim, NULL, NULL ); p->yes = createnode ( p->text, NULL, NULL ); strncpy( p->text, newque, sizeof ( p->text ) ); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 17/57

18 Soubory Soubor je sekvence bajtů uložená na externí paměti počítače (obvykle na disku). Aplikace obvykle provádějí nad soubory tyto operace: otevření souboru, čtení ze souboru nebo zápis do souboru, uzavření souboru. Přístup k údajům: sekvenční údaje jsou zpracovány postupně, náhodný (libovolný, přímý) jakýkoli údaj může být zpracován (podobně jako v poli). Operační systém (obvykle) neurčuje přístup k údajům v souboru. Metoda přístupu bývá věcí aplikačního programu. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 18/57

19 Soubory příklad Čtení čísel z klávesnice. Konec je dán přečtením nulové hodnoty. Zápis těchto čísel do souboru. int main( void ) { int x, i = 0; char filename[] = "file1.txt"; FILE *fp; fp = fopen ( filename, "w" ); /* w - pouze zápis, přepsání existujícího souboru! */ printf ( "Napis cisla, konec nula\n" ); do { scanf ( "%d", &x ); fprintf ( fp, "%d", x ); i++; if ( i!= 10 && x!= 0 ) fprintf (" "); else { fprintf( fp, "\n" ); i = 0; while ( x ); if ( i!= 0 ) fprintf ( "\n" ); fclose ( fp ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 19/57

20 Soubory příklad Čtení čísel ze souboru, jejich výpis do řádku, sečtení a výpis součtu. int main( void ) { int x, sum = 0; char filename[] = "file1.txt"; FILE *fp; fp = fopen ( filename, "r" ); /* r - pouze čtení */ do { fscanf ( fp, "%d", &x ); printf ( "%d ", x ); sum += x; while ( x ); fclose ( fp ); printf ( "\nsoucet: %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 20/57

21 Jména souborů Jméno souboru je řetězec. Je obvykle zadáno jako: pevně jako řetězcový literál v programu, uživatel je vyzván k zadání jména souboru z klávesnice, jméno souboru se získá jako argument z příkazového řádku. int main( void ) { char filename[] = "file1.txt"; FILE *fp; /* jméno souboru je pevné - řetězcová konstanta */ fp = fopen ( filename, "r" );... L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 21/57

22 Jména souborů Jméno souboru je řetězec. Je obvykle zadáno jako: pevně jako řetězcový literál v programu, uživatel je vyzván k zadání jména souboru z klávesnice, jméno souboru se získá jako argument z příkazového řádku. int main( void ) { char filename[] = "file1.txt"; FILE *fp; /* jméno souboru je pevné - řetězcová konstanta */ fp = fopen ( filename, "r" );... /* Nesprávné jméno souboru: */ FILE * fp = fopen("c:\program files\foo.txt", "r"); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 21/57

23 Jména souborů Jméno souboru je řetězec. Je obvykle zadáno jako: pevně jako řetězcový literál v programu, uživatel je vyzván k zadání jména souboru z klávesnice, jméno souboru se získá jako argument z příkazového řádku. int main( void ) { char filename[] = "file1.txt"; FILE *fp; /* jméno souboru je pevné - řetězcová konstanta */ fp = fopen ( filename, "r" );... /* Nesprávné jméno souboru: */ FILE * fp = fopen("c:\program files\foo.txt", "r"); /* Oprava: */... = fopen("c:\\program files\\foo.txt", "r"); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 21/57

24 Jména souborů FILE *openfile ( char * mode ) { FILE *fp; char filename[40]; printf ( "Napis jmeno souboru:\n" ); scanf ( "%39s", filename ); /* jméno souboru přečteno ze standardního vstupu */ fp = fopen ( filename, mode ); if (! fp ) { printf ( "Spatne jmeno souboru\n" ); exit ( 1 ); /* v produkčním kódu takto nikoli */ return fp; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 22/57

25 Jména souborů int main( int argc, char * argv []) { FILE *fp; if ( argc < 2 ) { printf ( "Chybi argument jmeno_souboru.\n" ); return 1; /* jméno souboru je dáno argumentem příkazového řádku */ fp = fopen ( argv[1], "r" ); /* argv[0] je jméno programu */ /* argv[1] je první argument programu */... L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 23/57

26 Chyby vstupu/výstupu Funkce pracující se soubory mohou selhat. Existuje mnoho důvodů proč: soubor neexistuje, uživatel nemá práva k přístupu nebo k zápisu souboru, soubor nemůže být zapsán (read-only medium, např. CD-ROM), HW chyba při přístupu k externímu zařízení, vstupní data jsou špatně formátovaná nebo zcela chybí, data nemohou být zapsána (disk full),... Aplikace musí testovat chybové kódy, aby chyby mohla zpracovat. Ignorování chyb je nehorší řešení: problém je skryt, uživatel není varován, data mohou být ztracena. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 24/57

27 Soubory zpracování chyb int main( void ) { int x; char filename[] = "file1.txt"; FILE *fp; if (! ( fp = fopen(filename, "w") ) ); { /* soubor se nepodařilo otevřít */ printf ( "Napis cisla, konec nula\n" ); do { if ( scanf ( "%d", &x )!= 1 ) { /* číslo se nepodařilo přečíst */ if ( fprintf(fp, "%d ", x) < 0 ) { /* chyba zápisu */ ; while ( x ); if ( fclose ( fp ) == EOF ) { /* chyba uzavření souboru - asi disk full */ return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 25/57

28 Konec souboru End-of-file End-of-file je příznakm který OS sleduje u každého otevřeného souboru. Funkce OS, jež je volána při zpracování souboru, nastaví příznak konce souboru, když už ve čteném souboru nejsou další data: aplikace přečetla všechna data ze souboru (z diskového souboru), uživatel se rozhodl zakončit standardní vstup (stiskem Ctrl-D nebo Ctrl-Z), druhá strana sít ového spojení spojení uzavřela (speciální soubor spojený se sít ovou linkou, např. spojení TCP),... Pokud bylo dosaženo konce souboru, žádná další data nebudou ze souboru čtena a další požadavky na čtení vrací chybu. Konec souboru je testován voláním funkce feof (). Aplikace musí použít funkci feof (), aby odlišila konec souboru od od chyby vstupu/výstupu, obě situace jsou signalizovány podobně. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 26/57

29 End-of-file int main( void ) { int x, sum = 0, err = 0; FILE *fp = fopen ( "in.txt", "r" ); if ( fp ) { while (fscanf ( fp, "%d", &x ) == 1) sum += x; if (! feof ( fp ) ) err = 1; fclose ( fp ); else err = 1; if ( err ) printf ( "chyba vstupu/vystupu\n" ); else printf ( "\nsoucet: %d\n", sum ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 27/57

30 Standardní soubory Program má k dispozici několik standardních souborů: stdout standardní výstup (konzolový výstup), stdin standardní vstup (vstup z klávesnice), stderr standardní chybový výstup (konzole). Používá se pro chybová a diagnostická hlášení. Standardní soubory jsou otevřeny operačním systémem při startu procesu. Standardní vstup a výstup má speciální funkce (zkráceně): printf (...) fprintf ( stdout,... ) puts (...) fputs (..., stdout ) putchar (...) fputc (..., stdout ) scanf (...) fscanf ( stdin,...) getchar () fgetc ( stdin ) L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 28/57

31 Kopie textového souboru int main( void ) { char c; FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( fscanf ( in, " %c", &c ) == 1 ) fprintf ( out, "%c", c ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 29/57

32 Kopie textového souboru int main( void ) { char c; FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( fscanf ( in, " %c", &c ) == 1 ) fprintf ( out, "%c", c ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Nefunguje: odstraňuje bílé znaky, nové řádky zmizí, může být pomalý. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 29/57

33 Kopie textového souboru int main( void ) { int c; /* záměrně int */ FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( ( c = fgetc ( in ) )!= EOF ) fputc ( c, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 30/57

34 Kopie textového souboru int main( void ) { int c; /* záměrně int */ FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( ( c = fgetc ( in ) )!= EOF ) fputc ( c, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Nefunguje: může zkazit nové řádky, může být pomalý. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 30/57

35 Kopie textového souboru int main( void ) { char buffer[100]; FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( fgets ( buffer, sizeof(buffer), in )!= NULL ) fputs ( buffer, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 31/57

36 Kopie textového souboru int main( void ) { char buffer[100]; FILE * in, * out; if ( (in = fopen ( "...", "r" ) ) == NULL ) {... if ( (out = fopen ( "...", "w" ) ) == NULL ) { fclose ( in );... while ( fgets ( buffer, sizeof(buffer), in )!= NULL ) fputs ( buffer, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Nefunguje: může zkazit nové řádky. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 31/57

37 Textové a binární soubory Operační systém nerozlišuje typy souborů. Soubory jsou prostě sekvence bajtů. Textové a binární soubory jsou kategorie zavedené lidmi: textové soubory jsou čitelné lidmi. Soubor je tvořen sekvencí rozumně dlouhých řádků (složených ze znaků), oddělených znakem nový řádek (nové řádky). Informace je poskytována v lidské formě (dekadické číslice... ). Bílé znaky (mezery, tabelátory, nové řádky) se mohou vyskytovat kdekoli v souboru a nemají vliv na význam informace v souboru obsažené. binární soubory nejsou lidem jednoduše srozumitelné. Informace je zakódována do vnitřní reprezentace (např. dvojkový doplněk) bez oddělovačů. Ztratí-li se bajt, je celá informace zkažená. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 32/57

38 Textové soubory Výhody: Jednoduše čitelné (lidem). Jednoduše manipulovatelné (textový editor). Dobře přenositelné mezi různými platformami. Redundance (když je kus textu zkažen, tak je zbytek stále použitelný). Nevýhody: Informace musí být zkonvertována z vnitřní formy (výstup) nebo do vnitřní formy (vstup). Obtížnější zpracování (SW složitost, časové požadavky). Obvykle delší než ekvivalentní binární reprezentace. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 33/57

39 Binární soubory Výhody: bez konverze na vstupu/výstupu (rychlé, snadno naprogramovatelné). Kompaktní (stejná informace zaujímá obvykle méně místa než ve vnější reprezentaci). Nevýhody: Obtížně srozumitelné lidem. Obtížná manipulace (specializované programy utility). Problematická portabilita mezi platformami (může vyžadovat konverzi). Snáze rozbitné (je-li soubor částečně poškozený, zbytek je často nepoužitelný). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 34/57

40 Textové a binární soubory Textové soubory jsou portabilní mezi platformami. Jediný problém je nový řádek: DOS and Windows používají dva bajty (CR + LF 0x0d 0x0a) pro oddělení řádků, UNIX (Linux, Solaris,... ) k tomuto účelu používá jediný bajt (LF 0x0a), (starý) Mac používá jeden bajt (CR 0x0d). Standardní knihovna provádí automatickou konverzi. Zdrojový program zůstává stejný pro všechny platformy: zdrojový kód (programátor) používá LF (0x0d, \n) pro oddělení řádků, standardní knihovna je si vědoma konvencí operačního systemu pro nové řádky, standardní knihovna konvertuje oddělovače řádků z platformy vstupu na platformu výstupu. Tyto konverze musí být korektně povoleny (zpracování textových souborů) nebo zakázány (zpracování binárních souborů). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 35/57

41 Kopie souboru (kopie 1:1, textový nebo binární) int main( void ) { int c; /* záměrně int */ FILE * in, * out; if ( (in = fopen ( "...", "rb" ) ) == NULL ) {... if ( (out = fopen ( "...", "wb" ) ) == NULL ) { fclose ( in );... while ( ( c = fgetc ( in ) )!= EOF ) fputc ( c, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Mód otevření souboru: wb / rb (binární bez konverze nových řádků). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 36/57

42 Kopie souboru (kopie 1:1, textový nebo binární) int main( void ) { int c; /* záměrně int */ FILE * in, * out; if ( (in = fopen ( "...", "rb" ) ) == NULL ) {... if ( (out = fopen ( "...", "wb" ) ) == NULL ) { fclose ( in );... while ( ( c = fgetc ( in ) )!= EOF ) fputc ( c, out ); if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Mód otevření souboru: wb / rb (binární bez konverze nových řádků). Jen jeden bajt na jedno volání to může být pomalé. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 36/57

43 Kopie souboru (kopie 1:1, textový nebo binární) int main( void ) { char buffer[100]; int len; FILE * in, * out; if ( (in = fopen ( "...", "rb" ) ) == NULL ) {... if ( (out = fopen ( "...", "wb" ) ) == NULL ) { fclose ( in );... while ((len = fread (buffer, 1, sizeof(buffer), in ))!= 0 ) if ( fwrite ( buffer, 1, len, out )!= len ) { /* write error */ if (! feof ( in ) ) {... fclose ( in ); if ( fclose ( out ) == EOF ) { Mód otevření: wb / rb (binární bez konverze nových řádků). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 37/57

44 Zpracování binárních souborů int main( void ) { int x; FILE *fp = fopen ( "...", "wb" ); if (! fp ) { /*... */ do { scanf ( "%d", &x ); if ( fwrite( &x, sizeof(x), 1, fp )!= 1 ) { /* zpracování chyby */ while ( x ); if ( fclose ( fp ) == EOF ) {... return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 38/57

45 Struktury a binární soubory Struktury reprezentují komplexní informace, tj. popisují vlastnosti nějaké entity (studenta v našem příkladu). Když mají být data uložena perzistentně, binární soubor obsahující struktury je zajímavou volbou. Přístup je rychlý (nejsou třeba žádné konverze), a navíc, je možný náhodný (přímý) přístup k datům. Struktury uložené v binárních souborech jsou základní ideou implementace databázové paměti. Tato idea má několik nedostatků: Reprezentace struktur je podstatně závislá na platformě, pro výpis a úpravu binárních souborů jsou třeba speciální programy. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 39/57

46 Struktury a binární soubory int main( void ) { TSTUDENT st[max]; int cnt = 0, i; FILE *fp;... /* naplnění pole st nějakým způsobem */... fp = fopen ( "students.bin", "wb" ); /* binární soubor s přístupem na zápis: wb */ if (! fp fwrite( st, sizeof(st[0]), cnt, fp)!= cnt ) fclose ( fp ) == EOF ) { /* chyba */ if ( fp ) fclose ( fp ); /* uvolnění zdrojů, také v případě chyby */ return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 40/57

47 Struktury a binární soubory Čtení binárního souboru struktur. Tento příklad čte obsah souboru po jednotlivých záznamech. int main( void ) { TSTUDENT s; FILE * fp; fp = fopen ( "students.bin", "rb" ); if (!fp ) { /* chyba */ while (fread ( &s, sizeof(s), 1, fp ) == 1 ) printstudent ( st ); fclose ( fp ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 41/57

48 Struktury a binární soubory Čtení binárního souboru struktur (celé pole). int main( void ) { TSTUDENT * s; int cnt; FILE * fp; fp = fopen ( "students.bin", "rb" ); if (!fp ) { /* chyba */ fseek ( fp, 0, SEEK_END ); /* nastavení na EOF */ cnt = ftell ( fp ) / sizeof(*s); fseek ( fp, 0, SEEK_SET ); /* nastavení na začátek */ s = (TSTUDENT *)malloc ( cnt * sizeof(*s) ); if ( fread ( s, sizeof (*s), cnt, fp )!= cnt ) { /* chyba */ fclose ( fp ); /*... použití pole */ free ( s ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 42/57

49 Struktury a binární soubory Jak přidat nového studenta na konec binárního souboru? int main( void ) { TSTUDENT s; FILE * fp; printf ( "Enter new student:\n" ); readstudent ( stdin, *s ); fp = fopen ( "students.bin", "ab"); /* mod souboru: ab = jen append (doplnění), binárně */ if (!fp ) { /* chyba */ if ( fwrite ( &s, sizeof (s), 1, fp )!= 1 fclose ( fp ) == EOF ) { /* chyba */ return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 43/57

50 Struktury a binární soubory Problém: zapsat nového studenta do binárního souboru. Předpokládáme, že soubor je seřazen (podle průměrného prospěchu, vzestupně). Nově vložený záznam musí zachovat toto pořadí. Je třeba nový pomocný soubor. Nástin řešení: přečíst data nového studenta z klávesnice, zkopírovat záznamy všech studentů majících lepší prospěch, než nový student, zkopírovat nový záznam do pomocného souboru, zkopírovat zbylé záznamy z původního souboru, zkopírovat obsah pomocného souboru zpět do původního souboru. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 44/57

51 Struktury a binární soubory int main( void ) { TSTUDENT x, st; FILE *orgfp, *tmpfp; int valid; printf( "Napis data noveho studenta:\n"); readstudent ( stdin, &st ); orgfp = fopen ( "students.bin", "rb" ); /* test chyby vynechán - málo místa na stránce */ tmpfp = fopen ( "students.tmp", "wb" ); /* kopie věch lepších studentů */ while ( (valid = fread ( &x,sizeof(x), 1, orgfp ) ) == 1 && x.avg <= st.avg ) fwrite( &x, sizeof(x), 1, tmpfp ); /* ted zápis záznamu nového studenta */ fwrite( &st, sizeof(st), 1, tmpfp ); /* pokračování dále... */ L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 45/57

52 Struktury a binární soubory /*... pokračování */ /* kopie zbytku původního souboru */ /* pozor: když valid == 0, tak není už nic ke zkopírování nezbývá */ if (valid) { fwrite ( &x, sizeof(x), 1, tmpfp ); while (fread( &x, sizeof(x), 1, orgfp ) == 1) fwrite ( &x, sizeof(x), 1, tmpfp ); /* uzavření obou souborů */ fclose ( orgfp ); fclose ( tmpfp ); movefile ( "students.tmp", "students.bin" ); return 0; L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 46/57

53 Struktury a binární soubory Jak zkopírovat obsah souboru? void movefile ( char * src, char * dst ) { FILE * srcfp, * dstfp; TSTUDENT x; srcfp = fopen ( src, "rb" ); dstfp = fopen ( dst, "wb" ); while ( fread ( &x, sizeof(x), 1, srcfp ) == 1) fwrite ( &x, sizeof(x), 1, dstfp ); fclose ( srcfp ); fclose ( dstfp ); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 47/57

54 Struktury a binární soubory Alternativně použitím OS funkcí pro manipulaci se soubory (rychlejší, ale ne na 100% portabilní). void movefile ( char * src, char * dst ) { unlink ( dst ); rename ( src, dst ); L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 48/57

55 Přehled standardního vstupu/výstupu (I/O) Standardní I/O (stdio.h): textový I/O (formátovaný), binární I/O (surový). Textový vstup/výstup: standardní I/O printf, scanf, putchar, getchar souborový I/O fprintf, fscanf, fputc, fgetc pamět ový I/O snprintf, sscanf Binární input/output: I/O fread, fwrite řízení fseek, ftell Standardní soubory: stdout konzolový výstup, stdin konzolový vstup (klávesnice), stderr konzolový výstup, diagnostika chyb a hlášení (error log). Standardní soubory mohou být přesměrovány (na úrovni OS). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 49/57

56 Přehled textového výstupu int putchar ( int ch ) výstup znaku ch. int fputc ( int ch, FILE * fp ) výstup znaku ch do souboru fp. int puts ( char * str ) výstup řetězce str, s doplněním nového řádku. int fputs ( char * str, FILE * fp ) výstup řetězce str do souboru fp, bez doplnění nového řádku. int printf ( char * fmt,... ) výstup formátovaného řetězce, fmt je řetězec obsahující konverze. int fprintf ( FILE * fp, char * fmt,... ) výstup formátovaného řetězce do souboru fp, fmt je řetězec obsahující konverze. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 50/57

57 Přehled textového výstupu Výstupní formátový řetězec (specifikace konverze): %[značky][šířka][.přesnost][modifikace_délky]znak_konverze Exaktní popis je v manuálových stránkách viz man 3 printf. Příklady výstupního formátu: konverze argument výstup %d %-5i -5-5 %5x 0xABC abc %#09X 0x12AB 0X00012AB %6.2f %+6.0f %10.3E _1.004E+02 %*.*f 7, 2, _ %c a a %4s "hello" hello %.4s "hello" hell %-10.4s "hello" hello L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 51/57

58 Přehled textového vstupu int getchar ( void ) čte znak. Návratová hodnota je typu int, aby se odlišil skutečný znak od hodnoty EOF (chyba nebo end-of-file). int fgetc ( FILE * fp ) čte znak ze souboru fp. char * gets ( char * str ) NIKDY nepoužívejte tuto funkci! Nelze ji použít bezpečně. Místo ní použijte funkci fgets (). char * fgets ( char * str, int max, FILE * fp ) čte řádek ze souboru fp (nejvýše však (max - 1) znaků) a uloží je do bufferu str. int scanf ( char * fmt,... ) vstup formátovaných dat. fmt je řetězec obsahující konverze. int fscanf ( FILE * fp, char * fmt,... ) vstup formátovaných dat ze souboru fp. fmt je řetězec obsahující konverze. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 52/57

59 Přehled textového vstupu vstupní formátový řetězec (specifikace konverze): %[*][šířka][modifikátor délky]znak_konverze Exaktní popis je v manuálových stránkách viz man 3 scanf. Příklady vstupního formátu: konverze typ argumentu poznámka %d int * %*i none číslo je přečteno, ale není uloženo %x int * vstup je hexadecimální %f float * %e float * %g float * %lf double * %s char * buffer musí být dostatečně dlouhý (je skoro nemožné to garantovat) %23s char * řetězec, max. 23 znaků L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 53/57

60 Přehled pamět ového I/O snprintf ( char * dst, int max, char * fmt,... ) fmt a argumenty se použijí k přípravě textové reprezentace (podobně jako printf nebo fprintf). Výsledný řetězec je uložen do pamět ového bufferu dst o délce max znaků. int sscanf ( char * src, char * fmt,... ) čte řetězec src. Podle konverzí ve fmt, extrahuje argumenty ze src. Pracuje jako funkce scanf nebo fscanf, ale čte vstup z pamět ového bufferu. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 54/57

61 Souborový I/O FILE * fopen ( char * filename, char * mode ) otevře soubor filename v módu mode. Vrací NULL při chybě. Mód je kombinace: r čtení (read-only), w zápis (write-only), obsah původního souboru je přepsán, a připsání (append) za konec pův. souboru, b binární mód (konverze nových řádků neaktivní), t textový mód (konverze nových řádků aktivní, implicitní hodnota), + mód úprav (update) ( r+ - čtení + zápis, w+ - zápis bez počátečního přepsání). int fclose ( FILE * fp ) zapíše diskové buffery fyzicky do souboru na disku, zavře otevřený soubor, uvolní zdroje OS. Vrací EOF při chybě (chyba při fyzickém zápisu bufferů). L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 55/57

62 Binární souborový I/O int fread ( void * dst, size t size, size t n, FILE * fp ) čte n bloků o délce size bajtů do bufferu dst. Vrací počet skutečně přečtených bloků. int fwrite ( void * src, size t size, size t n, FILE * fp ) zapisuje n bloků o délce size bajtů z bufferu src. Vrací počet bloků skutečně zapsaných. int fseek ( FILE * fp, long offset, int how ) přesune souborový ukazatel (náhodný přístup) o offset bajtů vzhledem k pozici dané argumentem how: SEEK SET od počátku, SEEK CUR od současné pozice, SEEK END od konce. long ftell ( FILE * fp ) vrací aktuální pozici v otevřeném souboru. L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 56/57

63 Otázky a odpovědi Otázky... L. Vagner, J. Vogel, ČVUT FIT Stromy, soubory, BI-PA1 57/57

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

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Práce se soubory. Úvod do programování 2 Tomáš Kühr Práce se soubory Úvod do programování 2 Tomáš Kühr Soubory z pohledu C u Soubor chápeme jako posloupnost bytů uložených na disku u Datový proud (anglicky stream) u Ještě obecnější přístup u Sjednocuje

Více

Vstup a výstup datové proudy v C

Vstup a výstup datové proudy v C Vstup a výstup datové proudy v C Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 24. října 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Vstup a výstup 24. října 2011 1 / 37 Přehled, rozdělení

Více

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Práce s binárními soubory. Základy programování 2 Tomáš Kühr Práce s binárními soubory Základy programování 2 Tomáš Kühr Binární soubory Mohou mít libovolnou strukturu Data jsou uložena ve stejné podobě jako v paměti za běhu programu Výhody: Pro uložení je potřeba

Více

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Práce se soubory. Úvod do programování 2 Tomáš Kühr Práce se soubory Úvod do programování 2 Tomáš Kühr Soubory z pohledu C Soubor zjednodušeně chápeme jako posloupnost bytů uložených někde na disku Datový proud (anglicky stream) Ještě obecnější přístup

Více

vstup a výstupv jazyce C

vstup a výstupv jazyce C vstup a výstupv jazyce C - funkce vstupu a výstupu nejsou součástí jazyka, jsou především v knihovně stdio.h (její obsah je dán normou) - pro práci se soubory (lépe streamy "sériový vstup/výstup", tj.

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

- 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

Práce se soubory. Základy programování 2 Tomáš Kühr

Práce se soubory. Základy programování 2 Tomáš Kühr Práce se soubory Základy programování 2 Tomáš Kühr Soubory z pohledu C Soubor zjednodušeně chápeme jako posloupnost bytů uložených někde na disku Datový proud (anglicky stream) Ještě obecnější přístup

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

vstup a výstupy jazyce C

vstup a výstupy jazyce C vstup a výstupy jazyce C - funkce vstupu a výstupu nejsou součástí jazyka, jsou především v knihovně stdio.h (její obsah je dán normou definující standardní knihovny) - pro práci se soubory (lépe streamy

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

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

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

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

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

Ú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

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

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

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 Soubory BI-PA1

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

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Spojové struktury. Spojová struktura (linked structure):

Spojové struktury. Spojová struktura (linked structure): Spojová struktura (linked structure): Spojové struktury množina objektů propojených pomocí spojů (odkazů, referencí, ukazatelů) Spoj často vyjadřuje vztah předchůdce následník Lineární spojové struktury

Více

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný

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

Standardní vstup a výstup

Standardní vstup a výstup Standardní vstup a výstup Trochu teorie S pojmy standardní vstup/výstup (I/O, input/output) jste se již pravděpodobně setkali, pokud ale ne, zde je krátké vysvětlení. Standardní vstup a výstup jsou vlastně

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

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

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

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

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

Více

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) % vstup a výstup na konzolu - vstupním zařízením je klávesnice, výstupním monitor (přístup jako k sériovým zařízením) - spojení s konzolami je nastaveno automaticky na začátku programu - ke konzole je možné

Více

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Textové řetězce V jazyce C neexistuje typ proměnné, který by byl určen výhradně pro ukládání textu V jazyce C používáme

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

Ú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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

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

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

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

Ošetřování chyb v programech

Ošetřování chyb v programech Ošetřování chyb v programech Úvod chyba v programu = normální záležitost typy chyb: 1) programátorská chyba při návrhu každých 10 000 řádek 1 chyba lze jen omezeně ošetřit (před pádem aplikace nabídnout

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

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových

Více

PB071 Programování v jazyce C

PB071 Programování v jazyce C Programování v jazyce C Union, I/O, Práce se soubory Vnitrosemestrální test Termín 7.4. v 12:00 a 13:00 v D1 (příští týden) Bude vypsáno hned v 14:10 Nutno se přihlásit přes IS Formou papírového odpovědníku

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

vstup a výstupy jazyce C

vstup a výstupy jazyce C FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ VSTUPY A VÝSTUPY V JAZYKU C Autor textu: Ing. Miloslav Richter, Ph. D. Květen 2014 Komplexní inovace studijních programů

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

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

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

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 Spojové struktury BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií

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

Textové soubory. alg9 1

Textové soubory. alg9 1 Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle

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

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

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

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

11b Další příklady operací vstupu a výstupu (úvod viz 10)

11b Další příklady operací vstupu a výstupu (úvod viz 10) 11b Další příklady operací vstupu a výstupu (úvod viz 10) V souboru budu mít uloženo:....... ahoj - čtu tečky pomocí c = getc(fr) až po 'a', ale potom volám funkci, která má zpracovat celé slovo ahoj a

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

PROGRAMOVÁNÍ V C++ CVIČENÍ PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné

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

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7 Hung Hoang Dieu Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7 Co je to soubor? Soubor je kus diskového prostoru, vyhrazeného

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

Vstupní a vstupní proudy v C++

Vstupní a vstupní proudy v C++ Programovací jazyk C++ MZLU - PEF - Ústav informatiky 11. října 2007 Vstup na terminál a čtení z něj Používá se knihovna iostream. Pro výstup lze použít standardní výstup cout. nebo chybový výstup cerr.

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Devá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 27.11.2017,

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

printf - formatovany vystup

printf - formatovany vystup printf - formatovany vystup Formatove specifikace: %d - na toto misto se v retezci dosadi cele cislo %f - desetinne cislo %e - cislo v semilogaritmickem tvaru %s - retezec s 2 az 6 znaky \n - novy radek

Více

Formátové specifikace formátovací řetězce

Formátové specifikace formátovací řetězce 27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete

Více

Spojové struktury. x, y, a, b. X1 y1 X2 y2 X3 y3. Grafické objekty bod. kružnice. obdélník. lomenáčára

Spojové struktury. x, y, a, b. X1 y1 X2 y2 X3 y3. Grafické objekty bod. kružnice. obdélník. lomenáčára Spojové struktury Grafické objekty bod x y kružnice x y r obdélník x, y, a, b lomenáčára X1 y1 X2 y2 X3 y3 Algoritmizace (Y36ALG), Šumperk - 13. přednáška 1 Spojové seznamy I Prvek seznamu: class Prvek

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

Ú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

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A Motivace Vstup a výstup Ing. Lumír Návrat katedra informatiky, A-1018 59 732 3252 Načtení čísla val :: Int val = 42 function :: Int -> Int function = val + n inputint :: Int inputdiff = inputint - inputint

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

Abstraktní datové typy

Abstraktní datové typy Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,

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áklady programování (IZP)

Základy programování (IZP) Základy programování (IZP) Třetí 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 Verze

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

Struktury a dynamická paměť

Struktury a dynamická paměť Struktury a dynamická paměť Petyovský, Macho, Richter (bpc2a_cv12), ver. 2017.2 Definujte strukturu TVector pro dynamické pole dat typu double. Definujete strukturu TMatrix, která bude obsahovat dynamické

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

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

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

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

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

E+034 = ; = e E+034

E+034 = ; = e E+034 Formátovaný textový výstup fprintf Příklad: m = 123.3456; fprintf('%f\n', m); 123.345600 fprintf('%e\n', m); 1.233456e+002 fprintf('%e\n', m); 1.23456E+002 fprintf('%g\n', m); 123.346 fprintf('%g\n', m);

Více

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

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

Více

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

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Příklad na tvorbu třídy Richter 1 4. prosince 2017 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno Dvourozměrné pole pomocí tříd Zadání Navrhněte a napište třídu pro realizace

Více

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti LEXIKÁLNÍ ANALÝZA Kód ve vstupním jazyku Lexikální analyzátor

Více

Základní datové struktury III: Stromy, haldy

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy 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í

Více

- tzv. standardní vstupní a výstupní proud (input / output stream)

- tzv. standardní vstupní a výstupní proud (input / output stream) Vstup a výstup standardní - obvykle klávesnice / obrazovka - každý program v jazyce C má standardně otevřen standardní vstup stdin, standardní výstup stdout a standardní chybový výstup stderr. - ty jsou

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

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

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

Více

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd Soubory Druhy souborů textové nestrukturované txt strukturované - ini, xml, csv binární veřejné bmp, jpg, wav proprietární docx, cdr, psd Základy zápisu using System.IO; nutné pro odkázání na jmenný prostor,

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

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

Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0') Práce s řetězci string.h size_t strlen(const char *str); délku řetězce str (bez '\0') int strcmp(const char *str1, const char *str2); porovná řetězce o

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

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

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