{{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