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

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

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

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

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

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

vstup a výstupv jazyce C

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

Vstup a výstup datové proudy v C

vstup a výstupy jazyce C

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

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.

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

Standardní vstup a výstup

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

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

Základy programování (IZP)

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

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

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

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

VISUAL BASIC. Práce se soubory

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

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

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

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

Úvod do programování. Lekce 1

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

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

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

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

Základy programování (IZP)

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

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

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

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

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

vstup a výstupy jazyce C

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

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

Knihovny funkcí. Chyby v CRT. IUJCE Přednáška č. 9

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

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

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

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

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

Algoritmizace a programování

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

Základy algoritmizace a programování

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

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

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

2 Datové typy v jazyce C

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

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

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

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

Základy jazyka C. Základy programování 1 Tomáš Kühr

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

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Textové soubory. alg9 1

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

3 KTE / ZPE Informační technologie

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

Základy programování (IZP)

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í

PB071 Programování v jazyce C

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

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

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

Soubor jako posloupnost bytů

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

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

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

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

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;

Úvod do programovacích jazyků (Java)

Rozklad problému na podproblémy, rekurze

Programovanie v jazyku C - pole treba poorat...

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

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

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

Reference jazyka C - Tahák

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

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

Proměnná a její uložení v paměti

NPRG030 Programování I, 2016/17 1 / :58:13

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

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

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

Základy programování (IZP)

Zápis programu v jazyce C#

ALGORITMIZACE A PROGRAMOVÁNÍ

Základy programování (IZP)

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

NPRG030 Programování I, 2010/11

Algoritmizace a programování

Úvod do programování. Lekce 5

Rozklad problému na podproblémy, rekurze

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Transkript:

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 Programování a algoritmizace 1, ZS 2014-15 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické

Soubory zápis do textového souboru čtení z textového souboru standardní textové soubory parametry funkce main zápis do binárního souboru čtení z binárního souboru přehled knihovních funkcí pro vstup a výstup Metoda Monte Carlo 2/38

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í nebo zápis) může být: sekvenční (proudový) libovolný, nahodilý (přímý) Soubory se sekvenčním přístupem (sekvenční soubory) umožňují pouze postupné (sekvenční) čtení nebo zápis údajů Soubory s nahodilým přístupem umožňují nahodilé (přímé) čtení nebo zápis údaje (podobně jako pole) Způsob přístupu k údajům v souboru není zakódován v souboru, ale je dán programem a samozřejmě technickou podporou Budeme se zabývat pouze sekvenčními soubory 3/38

Výstup do textového souboru Příklad: Z klávesnice přečteme řadu čísel zakončenou nulou a zapíšeme je do textového souboru, jehož jméno je dáno programem (prog9-1a.c) int main(void) { deklarace proměnné reprezentující soubor int cislo, i = 0; otevření textového souboru pro zápis char jmeno[] = "soubor1.txt"; FILE *soubor; soubor = fopen(jmeno, "w"); printf("zadej radu celych cisel zakoncenou nulou\n"); do { scanf("%d", &cislo); fprintf(soubor, "%d ", cislo); i++; výstupní konverze, do souboru if (i==10) fprintf(soubor, "\n"); while (cislo); fclose(soubor); uzavření souboru printf("cisla byla ulozena do souboru %s\n", jmenosouboru); return 0; 4/38

Vstup z textového souboru Příklad: Z textového souboru přečteme řadu čísel zakončenou nulou, vypíšeme je na displej a pak vypíšeme jejich součet (prog9-1b.c) int main(void) { int cislo, soucet = 0; char jmenosouboru[] = "soubor1.txt"; FILE *soubor; soubor = fopen(jmenosouboru, "r"); do { vstupní konverze z textového souboru fscanf(soubor, "%d", &cislo); printf("%d ", cislo); soucet += cislo; while (cislo); fclose(soubor); printf("\nsoucet cisel je : %d\n", soucet); return 0; otevření textového souboru pro čtení uzavření textového souboru 5/38

Funkce pro otevření výstupního textového souboru Jméno souboru můžeme zadat z klávesnice Pro čtení jména souboru a otevření výstupního textového souboru zavedeme funkci (prog9-2a.c): FILE *otevrivystupnisoubor() { FILE *soubor; char jmenosouboru[40]; printf("zadej jmeno vystupniho souboru: "); scanf("%s", jmenosouboru); soubor = fopen(jmenosouboru, "w"); if (!soubor) { printf("spatne jmeno souboru\n"); exit(1); return soubor; 6/38

Možné chyby při otvírání souboru #include <errno.h> /* obsahuje definici globalni promenne errno, pro ukladani kodu chyby v pripade neuspechu a neuspechu nekterych standardnich funkci */ #include <stdio.h> #include <string.h> /* obsahuje deklaraci funkce strerror(), vraci retezec odpovídající kódu chyby v errno */ int main (void) { char *jmsouboru = "neco.txt"; FILE *soubor = fopen(jmsouboru,"r"); if (soubor!=null) { fclose(soubor); printf("soubor %s se podarilo otevrit.\n",jmsouboru); else { int chyba = errno; /* aby nam ji neprepsala dalsi chyba */ printf("soubor %s se nepodarilo otevrit. Chyba:%s\n", return 0; jmsouboru,strerror(chyba)); 7/38

Funkce pro otevření výstupního textového souboru funkce main int main(void) { int cislo, i = 0; FILE *soubor = otevrivystupnisoubor(); printf("zadej radu celych cisel zakoncenou nulou\n"); do { scanf("%d", &cislo); fprintf(soubor, "%d ", cislo); i++; if (i==10) fprintf(soubor, "\n"); while (cislo); fclose(soubor); printf("cisla byla ulozena do souboru\n"); return 0; Věděli jste, že funkce printf vrací počet znaků, které byly funkcí zapsány do stdout? 8/38

Funkce pro otevření vstupního textového souboru FILE *otevrivstupnisoubor() { FILE *soubor; char jmenosouboru[40]; printf("zadej jmeno vstupniho souboru: "); scanf("%s", jmenosouboru); soubor = fopen(jmenosouboru, "r"); if (!soubor) { printf("souboru nenalezen\n"); exit(1); return soubor; 9/38

/*prog9-2b.c */ Funkce pro otevření vstupního textového souboru - main int main(void) { int cislo, soucet = 0; FILE *soubor = otevrivstupnisoubor(); do { fscanf(soubor, "%d", &cislo); printf("%d ", cislo); soucet += cislo; while (cislo); fclose(soubor); printf("\nsoucet cisel je : %d\n", soucet); return 0; 10/38

Ukončení čtení při dosažení konce souboru Pro ukončení čtení textového souboru lze využít toho, že funkce fscanf vrátí hodnotu EOF, když v souboru už nejsou žádná data (prog9-3.c) je-li fukce fscanf volána a v souboru již nic není (bylo dosaženo konce souboru), nezmění hodnotu proměnné a vrátí EOF int main(void) { int cislo, soucet = 0; FILE *soubor = otevrivstupnisoubor(); while (fscanf(soubor, "%d", &cislo)!=eof) { printf("%d ", cislo); soucet += cislo; fclose(soubor); printf("\nsoucet cisel je : %d\n", soucet); return 0; 11/38

Kopie textového souboru 1 Program, který přečte textový soubor a vytvoří jeho kopii čtením znak po znaku. Jména souborů budou přečtena z klávesnice (prog9-4a.c): int main(void) { int znak; printf("vstupni soubor, "); FILE *vstup = otevrisoubor("r"); printf("vystupni soubor, "); FILE *vystup = otevrisoubor("w"); while (fscanf(vstup, "%c", &znak)==1) fprintf(vystup, "%c", znak); fclose(vstup); fclose(vystup); return 0; zde využíváme toho, že funkce fscanf před dosažením konce souboru vrací počet přečtených položek 12/38

Funkce pro otevření souboru s parametrem Způsob (mód) otevření souboru bude dán parametrem FILE *otevrisoubor(char* mode) { FILE *soubor; char jmenosouboru[40]; printf("zadej jmeno souboru: "); scanf("%s", jmenosouboru); soubor = fopen(jmenosouboru, mode); if (!soubor) { printf("spatne jmeno souboru\n"); exit(1); return soubor; 13/38

Kopie textového souboru 2 Pro čtení znaku a výstup znaku použijeme funkce fgetc a fputc (prog9-4b.c): int main(void) { int znak; printf("vstupni soubor, "); FILE *vstup = otevrisoubor("r"); printf("vystupni soubor, "); FILE *vystup = otevrisoubor("w"); while ((znak=fgetc(vstup))!=eof) fputc(znak, vystup); fclose(vstup); funkce fgetc vrátí přečtený znak, pokud je konec souboru, vrátí EOF, což je -1 (proto fclose(vystup); proměnná znak musí být signed, nejlépe int) return 0; funkce fputc zapíše znak do souboru 14/38

Kopie textového souboru 3 Program, který vytvoří kopii textového souboru čtením a zápisem po řádcích (prog9-4c.c) #define MAXDELKA 100 int main(void) { přečte řádek (nanejvýš MAXDELKA-1 char radek[maxdelka]; znaků) a uloží do pole radek printf("vstupni soubor, "); FILE *vstup = otevrisoubor("r"); printf("vystupni soubor, "); FILE *vystup = otevrisoubor("w"); while (fgets(radek, MAXDELKA, vstup)) fputs(radek, vystup); fclose(vstup); fclose(vystup); return 0; zapíše radek do souboru vystup 15/38

Standardní textové soubory Jsou deklarovány v stdio.h a jsou to: stdin vstupní, klávesnice stdout výstupní, obrazovka stderr výstupní, obrazovka Příklad: výpis textového souboru na obrazovku (prog9-5a.c): #define MAXDELKA 100 int main(void) { char radek[maxdelka]; printf("vstupni soubor, "); FILE *vstup = otevrisoubor("r"); while (fgets(radek, MAXDELKA, vstup)) fputs(radek, stdout); fclose(vstup); return 0; 16/38

Standardní textové soubory Příklad: Vytvoření textového souboru čtením z klávesnice (prog9-5b.c): #define MAXDELKA 100 int main(void) { char radek[maxdelka]; printf("vystupni soubor, "); FILE *vystup = otevrisoubor("w"); while (fgets(radek, MAXDELKA, stdin)) fputs(radek, vystup); fclose(vystup); return 0; Konec souboru při čtení z klávesnice zadáme kombinací Ctrl-Z (MS Windows), nebo Ctrl-D (UNIX) 17/38

Parametry funkce main Hlavní funkce main může být napsána jako funkce se dvěma parametry, s jejichž pomocí lze převzít parametry příkazového řádku, kterým je program spuštěn (prog9-6a.c) int main(int argc, char *argv[]) { int i; printf("parametry prikazoveho radku:\n"); printf("argc = %d\n", argc); for (i=0; i<argc; i++) printf("argv[%d]: %s\n", i, argv[i]); return 0; argv[0] argv[1] argv[argc-1] cesta souboru spuštěného programu první parametr poslední parametr 18/38

Zadání jmen souborů příkazovým řádkem Kopie textového souboru, soubory zadané parametry příkazového řádku /*prog9-6b.c*/ #define MAXDELKA 100 int main(int argc, char *argv[]) { char radek[maxdelka]; if (argc<3) { printf("malo parametru prikazoveho radku\n"); return 1; FILE *vstup = otevrisoubor(argv[1], "r"); FILE *vystup = otevrisoubor(argv[2], "w"); while (fgets(radek, MAXDELKA, vstup)) fputs(radek, vystup); fclose(vstup); fclose(vystup); return 0; 19/38

Vytvoření binárního souboru Binární soubory obsahují data ve vnitřní reprezentaci Příklad: z klávesnice přečteme řadu celých čísel zakončenou nulou a zapíšeme je do binárního souboru (prog9-7a.c) int main(void) { int cislo; printf("vystupni binarni soubor, "); FILE *vystup = otevrisoubor("wb"); do { fscanf(stdin, "%d", &cislo); fwrite(&cislo, sizeof(int), 1, vystup); while (cislo); fclose(vystup); return 0; fwrite(odkud, d, n, kam) počínaje adresou odkud zapíše do binárního souboru kam n položek, každá délky d bytů 20/38

Čtení binárního souboru Binární soubor vytvořený předchozím příkladem vypíšeme na obrazovku (prog9-7b.c) int main(void) { int cislo, i=0; printf("vstupni binarni soubor, "); FILE *vstup = otevrisoubor("rb"); while (fread(&cislo, sizeof(int), 1, vstup)==1) { fprintf(stdout, "%d ", cislo); i++; if (i==10) { fprintf(stdout, "\n"); i = 0; fclose(vstup); return 0; fread(kam, d, n, odkud) z binárního souboru odkud přečte n položek, každá délky d bytů, do paměti počínaje adresou kam a vrátí počet přečtených položek 21/38

Rozdíl mezi textovými a binárními soubory Textové soubory se člení na řádky Oddělovačem řádků v paměti (v řetězcích) je jediný znak \n s kódem 10 (LF) Oddělovačem řádků v souboru je: v OS Windows dvojice znaků CR LF s kódy 13 a 10 v OS Unix (Linux a pod.) je jediný znak LF Rozdílné reprezentace oddělovače řádků v souboru řeší knihovna C tak, že v OS Windows: při čtení textového souboru se dvojice bytů s hodnotami 13 a 10 přečte jako jediný znak s kódem 10 (LF) při zápisu do textového souboru se znak s kódem 10 zapíše jako dvojice bytů s hodnotami 13 a 10 Při otevírání binárních souborů, jejichž obsahem nejsou znaky a nečlení se na řádky, je třeba výše uvedenou transformaci potlačit uvedením příznaku b 22/38

Rozdíl mezi textovými a binárními soubory /*prog9-7c.c*/ int main(void) { int c; FILE *vystup = fopen("data.bin", "w"); for (c=5; c<15; c++) fputc(c, vystup); fclose(vystup); FILE *vstup = fopen("data.bin", "rb"); while ((c=fgetc(vstup))!=eof) printf("%d ", c); printf("\n"); fclose(vstup); return 0; Program vypíše 5 6 7 8 9 13 10 11 12 13 14 23/38

Shrnutí vstupu a výstupu Standardní knihovna <stdio.h> Vstup a výstup: textový (formátovaný) binární (neformátovaný) Textový vstup a výstup standardní: z/do souboru: z/do paměti: přímo na obrazovku: printf, putchar, scanf, getchar fprintf, putc, fscanf, getc sprintf, sscanf cprintf Standardní textové soubory: stdin vstupní, klávesnice, lze přesměrovat stdout výstupní, obrazovka, lze přesměrovat stderr výstupní, obrazovka, lze přesměrovat 24/38

int putchar(int c); výstup znaku c; Standardní výstup při chybě vrací EOF (-1), jinak c int puts(char *s); výstup řetězce s + nový řádek int printf(char *format,...); výstup hodnot různých typů; vrací počet vytisknutých znaků formát: řetězec - popisuje typ a tvar argumentů výstupní konverze: začíná znakem % ostatní znaky kopírovány na výstup konverze: % [ příznaky ] [ šířka ] [. přesnost ] [ velikost ] typ 25/38

Výstupní konverze příznaky - zarovnání doleva (jinak doprava) + u číselných typů se znaménkem vždy výstup znamenka mezera místo znaménka plus výstup mezery # alternativní výstup (viz dále) 0 výplňovým znakem je nula (v kombinaci s je ignorován) šířka číslo minimální celková šířka (včetně znamének, exponentu,...) výplňovým znakem je implicitně mezera implicitní způsob zarovnání je doprava * šířka je dána parametrem typu int 26/38

Výstupní konverze (pokračování) 27/38

Výstupní konverze (pokračování) typ d, i int vypisován dekadicky o unsigned int oktalově (s příznakem # i prefix 0) u unsigned int dekadicky x, X unsigned int hexadecimálně: písmena abcdef resp ABCDEF (s příznakem # i prefix 0x resp. 0X) f double ve tvaru 99.999 (implicitní hodnota přesnosti je 6) e, E double ve tvaru 9.9999e±99 před desetinnou tečkou vždy jedna nenulová číslice implicitní hodnota přesnosti je 6 g, G double ve tvaru konverze f nebo e resp.e přesnost udává počet platných číslic c int konvertován na unsigned char a vypsán jako znak s řetězec (char*) vypsán po znacích p ukazatel (void*) vypsán ve tvaru závislém na implementaci n parametr typu int*: celočíselná proměnná je naplněna počtem dosud vypsaných znaků % vypíše se %; celá konverze vypadá %% 28/38

Příklady výstupní konverze Příklady (místo mezery je použito podtržítko) konverze hodnota výstup %d -300-300 %-5i -5-5 %5x 0xABC abc %#09X 0x12AB 0X00012AB %6.2f 4.352 4.35 %+6.0f 100.44 +100 %10.3E 100.44 _1.004E+02 %*.*f 7, 2, 100.123 _100.12 %c 'a' a %4s "hello" hello %.4s "hello" hell %-10.4s "hello" hello 29/38

Standardní vstup int getchar(void); vstup znaku (při chybě, konci souboru EOF) char* gets(char *s); vstup řetězce do konce řádku (nebezpečí: není omezena délka řetězce) int scanf(char *format,...); vstup hodnot různých typů; argumenty musejí být ukazatelé vrací počet úspěšně zkonvertovaných a přiřazených parametrů (s výjimkou koverze n) formát platí obdobná pravidla jako u printf konverze uvedeny znakem % mezery ignorovány (s výjimkou konverze c, [ a n) ostatní znaky srovnávány se vstupem konverze: % [ * ] [ šířka ] [ velikost ] typ 30/38

* Vstupní konverze položka je konvertována, ale není přiřazena Šířka číslo maximální celková šířka (bez úvodních mezer) Velikost viz velikost u printf l u konverze f, e, E, g, G: parametr typu double * (jinak float *) Typ d dekadické celé číslo; parametr typu int * i celé číslo v libovolné soustavě (8, 10, 16); parametr typu int * o oktalové celé číslo; parametr typu unsigned int * x, X šestnáctkové celé číslo; parametr typu unsigned int * f, e, E, g, G reálné číslo; parametr typu float *!!! s posloupnost nemezerových znaků; parametr typu char *; řetězec musí být dostatečně dlouhý! c posloupnost znaků (implicitní šířka je 1); parametr typu char * [ posloupnost [...] 31/38

Formátovaný vstup a výstup v paměti int sscanf(char *Buffer, char *Format,...); vstup z řetězce Buffer int sprintf(char *Buffer, char *Format,...); výstup do řetězce Buffer Příklady: sscanf(retezec, "%s = %f", &S, &F);» Retezec == "Výsledek = 4.52"» S == "Výsledek"» F == 4.52 sprintf(jmeno, "Temp%d", I);» I == 3» Jmeno == "Temp3" 32/38

Otevření a zavření souboru FILE *fopen(char *Jmeno, char *Mod); otevření souboru specifikovaného Jména Jmeno - může obsahovat cestu k souboru (pozor: \\) Mod - způsob otevření souboru; řetězec složen ze znaků: r otevření na začátku (čtení) w existující obsah vymazán (psaní) a otevření na konci (zápis na konec) b binární soubor (jinak textový) + update povolené kombinace: "r", ", "a" textový soubor "rb", "wb", "ab" binární soubor "r+", "w+", "a+" textový soubor, update "rb+" = "r+b", "wb+" = "w+b", "ab+" = "a+b" binární soubor, update int fclose(file *Soubor); zavření souboru 33/38

Textový vstup a výstup int fgetc(file *Soubor); int getc(file *Soubor); char *fgets(char *Retezec, size_t Max, FILE *Soubor); čte nejvýše Max znaků; případný konec řádku je součástí řetězce! int fscanf(file *Soubor, char *Format,...); int fputc(int Znak, FILE *Soubor); int putc(int Znak, FILE *Soubor); int fputs(char *Retez, FILE *Soubor); nepřidává přechod na nový řádek int fprintf(file *Soubor, char *Format,...); 34/38

Binární vstup a výstup size_t fread(void *Kam, size_t Delka, size_t Pocet, FILE *Soubor); vrací počet skutečně přečtených položek size_t fwrite(void *Odkud, size_t Delka, size_t Pocet, FILE *Soubor); vrací počet skutečně zapsaných položek Přímý přístup int fseek(file *Soubor, long Offset, int Odkud); nastaví pozici v Souboru Odkud může nabývat hodnot: SEEK_SET (od začátku souboru) SEEK_CUR (od aktuální pozice) SEEK_END (od konce souboru) long ftell(file *Soubor); vrací pozici v souboru 35/38

Metoda Monte Carlo třída algoritmů pro simulaci systémů stochastické metody používající pseudonáhodná čísla typicky využívány pro výpočet (vícerozměrných)integrálů, řešení diferenciálních rovnic Základní myšlenka: chceme určit střední hodnotu veličiny, která je výsledkem náhodného děje. Vytvoří se počítačový model toho děje a po proběhnutí dostatečného množství simulací se mohou data zpracovat klasickými statistickými metodami, třeba určit průměr a směrodatnou odchylku. 36/38

Metoda Monte Carlo výpočet čísla Π Skruhu Nechť je poloměr kruhu r, pak Skruhu =Π*r*r/4 Scelku =r*r Π = 4 * Skruhu / Scelku Algoritmus: 1. opakovaně budeme generovat body padající do čtverce 2. do proměnné in budeme počítat ty, které padnou dovnitř 3. do proměnné all počet pokusů 4. Π = 4 * in/all 37/38

Metoda Monte Carlo výpočet čísla Π Skruhu /* montecarlo.c */ Přesnost algoritmu ovlivní: 1. počet opakování 2. kvalita generátoru pseudonáhodných čísel 3. zaokrouhlovací chyby 38/38