Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

9 - Struktury, práce se soubory

  • pro vyučující: 09

Procvičované témata

  • Struktury
  • Dynamická alokace
  • Práce se soubory
  • Funkce standardní knihovny

Úkoly na cvičení

  1. Napište program, který bude pracovat s komplexními čísly.
    1. Komplexní čísla budou realizována pomocí struktur.
    2. Implementujte funkce pro operace s komplexními čísly
  2. Napište program, ve kterém bude vektor (matice) reprezentována strukturou.
    1. Struktura obsahuje celočíselnou proměnnou reprezentující počet prvků vektoru (matice) a ukazatel do dynamické paměti.
    2. Implementujte funkce pro inicizaci vektoru (matice) a algebraické operace.
  3. Napište program, který umožní vytváření záznamů (databáze) o studentech
    1. Záznam o jednom studentovi bude ve struktuře
    2. Struktury ukládejte do pole alokovaného v dynamické paměti
    3. Celou databázi vhodným způsobem uložte do souboru
    4. Záznamy řaďte podle vhodného kritéria. Využijte algoritmus Quick sort implementovaný v stdlib.h
  4. Napište program, který vytvoří histogram čísel generovaných generátorem rand()
    1. Ověřte, zda platí předpoklad rovnoměrné hustoty pravděpodobnosti

Ukázkové příklady

1. Struktury

#include <stdio.h>
 
/* 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 <malloc.h>
 
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 <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
 
#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<niter; i++) {
      x = (double)rand()/RAND_MAX;
      y = (double)rand()/RAND_MAX;
      z = x*x+y*y;
      if (z<=1) count++;
   }
   pi=(double)count/niter*4;
   printf("PI = %g / %i iteraci\n", pi, niter);
}

courses/b0b99prpa/labs/lab09.txt · Last modified: 2018/11/27 22:12 by viteks