{{indexmenu_n>9}} ====== 9 - Struktury, práce se soubory ====== * pro vyučující: [[courses:b0b99prp:internal:tutorialinstruction:09|]] ===== Procvičované témata ===== * Struktury * Dynamická alokace * Práce se soubory * Funkce standardní knihovny ===== Úkoly na cvičení ===== - Napište program, který bude pracovat s komplexními čísly. - Komplexní čísla budou realizována pomocí struktur. - Implementujte funkce pro operace s komplexními čísly - Napište program, ve kterém bude vektor (matice) reprezentována strukturou. - Struktura obsahuje celočíselnou proměnnou reprezentující počet prvků vektoru (matice) a ukazatel do dynamické paměti. - Implementujte funkce pro inicizaci vektoru (matice) a algebraické operace. - Napište program, který umožní vytváření záznamů (databáze) o studentech - Záznam o jednom studentovi bude ve struktuře - Struktury ukládejte do pole alokovaného v dynamické paměti - Celou databázi vhodným způsobem uložte do souboru - Záznamy řaďte podle vhodného kritéria. Využijte algoritmus Quick sort implementovaný v stdlib.h - Napište program, který vytvoří histogram čísel generovaných generátorem rand() - Ověřte, zda platí předpoklad rovnoměrné hustoty pravděpodobnosti ===== Ukázkové příklady ===== ==== 1. Struktury ==== #include /* definice struktury */ struct ctverec { int vyska; int sirka; char a; }; struct K { double re; double im; }; // funkce, ktera ma navratovou hodnotu struct K struct K soucet (struct K a, struct K b) { struct K ret; ret.re = a.re + b.re; ret.im = a.im + b.im; return ret; } int obsah (struct ctverec A) { return A.sirka * A.vyska; } int main() { struct ctverec A; struct ctverec *B = &A; A.sirka = 10; A.vyska = 30; printf("%lu %lu\n", sizeof(A), sizeof(struct ctverec)); printf("sirka: %d, vyska: %d, velikost: %lu\n", A.sirka, A.vyska, sizeof(A)); printf("sirka: %d, vyska: %d\n", B->sirka, B->vyska); return 0; } ==== 2. Pole ==== #include struct pole { int velikost; int * data; }; void tisk(struct pole * a) { for (int i = 0; i < a->velikost; i++) printf("%d ", a->data[i]); printf("\n"); } struct pole * insert (struct pole *a) { for (int i = 0; i < a->velikost; i++) { int n; if (scanf("%d", &n) > 0) a->data[i] = n; } return a; } int main() { struct pole *a = (struct pole *)malloc(sizeof(struct pole)); a->velikost = 5; a->data = (int *)calloc(a->velikost, sizeof(int)); a->data[3] = 10; tisk (insert(a)); free(a->data); free(a); return 0; } ==== 3. Výpočet Ludolfova čísla metodou Monte Carlo ==== #include #include #include #include #define SEED 35791246 main(int argc, char* argv) { int niter=0; /* počet iterací algoritmu */ double x,y; int count=0; /* počet bodů v 1. kvadrantu jednotkové kružnice */ double z; double pi; printf("Zadejte pocet iteraci pro vypocet PI: "); scanf("%d",&niter); /* initialize random numbers */ srand(SEED); for (int i=0; i