Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilPavlína Němečková
1
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 10
2
Programování se soubory (1/7) Datový typ FILE V knihovně stdio.h definován speciální typ FILE (psáno velkým p í smem), pomoc í něhož se lze odkazovat na soubor otevřený v operační paměti počítače. Součástí knihovny stdio.h je skupina funkcí, umožňujících snadnou práci se soubory: funkce FILE *fopen(jmeno_soub., atribut) Funkce otevře soubor jmeno_soub., na kterém lze provádět operace podle atributu atribut a vrát í ukazatel na otevřený soubor typu FILE*.
3
Atributy funkce fopen() - atribut je vždy řetězec: "r" otevře soubor pro čten í (mus í existovat) "w" otevře nový prázdný soubor pro zápis (existuje-li soubor se stejným názvem, smaže se jeho obsah) "a" otevře existující soubor pro zápis (další obsah je přidán na konec původního souboru, neexistuje-li soubor s daným názvem vytvoří se nový) "r+" otevře existující soubor pro čtení i zápis "w+" otevře nový soubor pro čtení i zápis "a+" otevře nový soubor pro čtení i zápis, při zápisu je nový obsah zapsán na konec Programování se soubory (2/7)
4
funkce int fprintf(ukazatel na soubor, řetězec) Funkce vloží formátovaný řetězec řetězec do otevřeného souboru s povoleným zápisem, soubor je definován ukazatelem ukazatel na soubor typu FILE. funkce int fclose(ukazatel na soubor) Funkce uzavře soubor definovaný ukazatelem ukazatel na soubor typu FILE. Př. Sestavte program jako konzolovou aplikaci, který načte šest jmen a uloží je do příslušného textového souboru (každé jméno zvlášť na nový řádek, pořadí je počítáno od 1) a to ve formátu: pořadí. jméno Programování se soubory (3/7)
5
dgf Programování se soubory (4/7) #include int main(void) {int n;// index for loop char name[20];// string for name FILE *ptrfile;// spec. type pointer to file ptrfile=fopen("testfile.txt","w"); // open a new file for writing and obtaining address if(ptrfile!=NULL) // if file is open for(n=1; n<=6; n++) { printf("Insert %d. name: \n", n); gets(name); fprintf(ptrfile, "%d. %s\n", n, name); //putstring into the file }
6
funkce int fscanf(ukazatel na soubor, řetězec) Funkce načte formátovaný řetězec řetězec z otevřeného souboru s povoleným čtením, soubor je definován ukazatelem ukazatel na soubor. fclose(ptrfile);// close the file return 0; } Př í klad: BPC1E_Ex78.c Programování se soubory (5/7)
7
#include int main(void) { int n, num;// index for loop and number char name[20];// string for name FILE *ptrfile;// spec. type pointer to file ptrfile=fopen("testfile.txt","r"); // open an existing file for reading and // obtaining its address Př. Sestavte program jako konzolovou aplikaci, který načte šest pořadí a jmen z textového souboru (viz příklad BPC1E_Ex78.c ) a vytiskne je do konzolového okna. Programování se soubory (6/7)
8
if(ptrfile!=NULL) // if file is open for(n=0; n<6 ; n++) { fscanf(ptrfile, "%d.", &num); //read // number from the file fscanf(ptrfile, "%s", name); //read // string from the file printf("%d. name: %s\n", num, name); } fclose(ptrfile); // close the file getchar(); return 0; } Př í klad: BPC1E_Ex79.c Programování se soubory (7/7)
9
Záloha databáze v souboru (1/10) Př. Vytvořte program jako konzolovou aplikaci pro jednoduchý elektronický index studenta. Záznam předmětu v elektronickém indexu bude obsahovat následující údaje: zkratka (řetězec, např. BPC1E ), typ = povinnost (znak, např. P = povinný) počet kreditů (celé číslo) ročník (celé číslo) semestr (znak, Z = zimní, L = letní) Při vhodné definici obsahu souboru pro zápis a čtení pomocí formátovaných řetězců fprintf() a fscanf() lze soubor využít jako zálohu vlastní databáze tak, aby data byla uchována i po ukončení programu pracujícího s databází.
10
počet udělených bodů Pro výše uvedené údaje navrhněte vhodnou strukturu a vy- tvořte pole 100 ukazatelů na tuto strukturu. Strukturu naplňte údaji z textového souboru, ve kterém jsou zapsány postupně za sebou na jednotlivých řádcích, poslední předmět, který již není započítáván do indexu je identifikován zkratkou XXXX. Pro práci s databází sestavte: funkci pro výpis indexu, každý předmět doplňte o vyge- nerování známky (A až F) na základě bodů. funkci pro přidání nového záznamu funkce pro výpočet počtu kreditů a celkového průměru s výpisem na obrazovku. Záloha databáze v souboru (2/10)
11
typedef struct t_course { charabbrev[5]; chartype; intcredits; intyear; charsemester; intpoints; }; Struktura pro předmět Vložit do hlavičkového souboru index.h Záloha databáze v souboru (3/10) Databáze jako pole 100 ukazatelů na záznamy předmětů
12
Výpis předmětů: Záloha databáze v souboru (4/10)
13
Přidání předmětu a výpočet studijního průměru: Záloha databáze v souboru (5/10)
14
dgf #include #include "index.h" int main(void) { T_course *my_index[100]; // ptrs. to courses int no_courses; // number of records char cmd; // command letter no_courses = fill_index(my_index); printf("ELECTRONIC INDEX \n\nInsert command: \n\n'q' = quit \n'p' = print full index, \n'a' = add a new course, \n's' = print study mean\n"); scanf("%c", &cmd); fflush(stdin); Hlavn í program s ovládáním main.c (1/2) Záloha databáze v souboru (6/10)
15
dgf while(cmd!='q')// if not quit { switch(cmd) { case 'p': print_index(my_index, no_courses); break; case 'a': no_courses = insert_course( my_index, no_courses); break; case 's': print_stmean(my_index, no_courses); } printf("\n\nInsert command: … \n"); scanf("%c", &cmd); fflush(stdin); }; save_erase_index(my_index, no_courses); return 0; } Hlavn í program s ovládáním main.c (2/2) Záloha databáze v souboru (7/10)
16
dgf int add_course(T_course **rec, int num, char *new_abbrev, char new_type, int new_credits, int new_year, char new_semester, int new_points); char get_grade(int points); float get_eval(int points); int credit_sum(T_course **rec, int num); float study_mean(T_course **rec, int num); int fill_index(T_course **rec); int insert_course(T_course **rec, int num); void print_index(T_course **rec, int num); void print_stmean(T_course **rec, int num); void save_course(char *save_abbrev, char save_type, int save_credits, int save_year, char save_semester, int save_points, FILE *pf); void save_erase_index(T_course **rec, int num); Hlavičky výkonn ých funkcí v knihovně index.h Záloha databáze v souboru (8/10)
17
dgf Hierarchie použit í funkc í Záloha databáze v souboru (9/10)
18
Hierarchie použit í funkc í Záloha databáze v souboru (10/10) Příklad: BPC1E_Ex80.c
19
Příklady (1/6) Př. Na automatickém pětimístném voltmetru bylo měřeno napětí na výstupu stabilizátoru 3,3V LF33. Během dlouhodobého měření byla naměřena sada výstupních napětí stabilizátoru a uložena do souboru meas_LF33.dat, kde jsou napětí uvedena jako číselné hodnoty oddělené mezerou (případně koncem řádku). Poslední hodnota je 0 (ukončení souboru měření). Vytvořte program, která určí počet naměřených hodnot, vygeneruje statistický histogram (procentuální četnost) po intervalech 10 mV a určí minimální napětí, maximální napětí, střední hodnotu a směrodatnou odchylku z naměřených napětí.
20
Příklady (2/6) #include int main() { int n, m, ind, mv=0; float V, maxV, minV, avV=0, roV=0; int VtoV[40]; // voltage in 40 intervals 3.10-3.11, 3.11-3.12 to 3.49-3.50 FILE *ptrf; for(n=0; n<40; n++) VtoV[n]=0; ptrf=fopen("meas_LF33.dat","r"); if(ptrf!=NULL) // if file is open {
21
Příklady (3/6) fscanf(ptrf, "%f", &V); minV=V; maxV=V; while(V!=0) { // printf("%f\n", V); ind=floor((V-3.1)*100); if(ind>=0 && ind<=39) VtoV[ind]++; if(V<minV) minV=V; if(V>maxV) maxV=V; mv++; avV+=V; roV+=V*V; fscanf(ptrf, "%f", &V); }
22
Příklady (4/6) printf("\nNumber of measured values: %d\n", n); printf("\nProbability characteristics:\n"); for(n=0; n<40; n++) { printf("\n(%4.2f - %4.2f) V", 3.1+n/100.0, 3.1+(n+1)/100.0); m=VtoV[n]; while(m>0) { putchar(219); m--; } printf(" - %4.1f %", 100.0*VtoV[n]/mv); } printf("\n\nMinimum voltage: %f V\n", minV); printf("\nMaximum voltage: %f V\n", maxV);
23
Příklady (5/6) avV/=mv; printf("\nAverage voltage: %f V\n", avV); roV=1.0/mv*roV-avV*avV; roV=sqrt(roV); printf("\nStd. deviation of voltage: %f V\n", roV); } fclose(ptrf); // close the file getchar(); return 0; } Vztah pro výpočet směrodatné odchylky:
24
Příklady (6/6) Příklad: BPC1E_Ex81.c Výstup programu po zpracování souboru naměřených napětí
25
Téma následující přednášky DĚKUJI ZA POZORNOST – Vazby dynamických proměnných – Dynamická databáze
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.