pokročilé datové typy (struktury, unie, dynamické proměnné)

10
Pokročilé datové typy Pokročilé datové typy (struktury, unie, dynamické (struktury, unie, dynamické proměnné) proměnné) Přednáška č. 6 Přednáška č. 6

Upload: cocheta-green

Post on 05-Jan-2016

25 views

Category:

Documents


4 download

DESCRIPTION

Pokročilé datové typy (struktury, unie, dynamické proměnné). Přednáška č. 6. Struktury (structures) (1). Soubor položek různých typů Syntaxe deklarace. struct t_auto // typ struktura { char znacka[21]; // znacka auta - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Pokročilé datové typyPokročilé datové typy(struktury, unie, dynamické proměnné)(struktury, unie, dynamické proměnné)

Přednáška č. 6Přednáška č. 6

Page 2: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Struktury (structures) (1)Struktury (structures) (1)

Soubor položek různých typůSoubor položek různých typů Syntaxe deklaraceSyntaxe deklarace

struct t_auto // typ struktura { char znacka[21]; // znacka auta unsigned short rok; // rok vyroby double cena; // cena auta } auto1; // promenna typu struct t_auto

struct t_auto auto2; // dalsi promenna typu struct t_auto

auto1.rok = 1999; // pristup k clenum struktury auto2.rok = 2001; // pristup k clenum struktury printf("Rok vyroby: %d",auto1.rok);

Page 3: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Struktury (structures) (2)Struktury (structures) (2)

Definice typu pomocí Definice typu pomocí typedeftypedef

typedef struct { char znacka[21]; // znacka auta unsigned short rok; // rok vyroby double cena; // cena auta } t_auto; // typ t_auto

t_auto auto1; // promenna typu t_auto

Page 4: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Struktura ve struktuřeStruktura ve struktuřestruct t_datum // typ struktura{

unsigned short den;unsigned short mesic;unsigned short rok;

};

struct t_auto // typ struktura{

char znacka[21]; // znacka auta

// datum vyroby typu struktura t_datumstruct t_datum datum_vyroby;

double cena; // cena auta} auto1; // promenna typu struct t_auto

// pristup k clenum strukturyauto1.datum_vyroby.den = 22;auto1.datum_vyroby.mesic = 10;auto1.datum_vyroby.rok = 2011;

printf("Datum vyroby: %d/%d/%d", auto1.datum_vyroby.den,auto1.datum_vyroby.mesic, auto1.datum_vyroby.rok);

Page 5: Pokročilé datové typy (struktury, unie, dynamické proměnné)

UnieUnie Možnost jak do jedné proměnné ukládat více typůMožnost jak do jedné proměnné ukládat více typů V paměti alokuje tolik místa kolik je zapotřebí pro největší použitý typ V paměti alokuje tolik místa kolik je zapotřebí pro největší použitý typ Má význam, potřebujeme-li šetřit místem – bylo aktuální dříve, dnes jen u Má význam, potřebujeme-li šetřit místem – bylo aktuální dříve, dnes jen u

jednočipových mikropočítačůjednočipových mikropočítačů Syntaxe deklarace:Syntaxe deklarace:

union t_unie // typ unie { int i; // clen pro pristup k typu int double d; // clen pro pristup k typu double (nejvetsi typ - 8 byte) char c; // clen pro pristup k typu char } U = {'u'}; // promenna typu t_unie a jeji inicializace

printf("Char: %c\r\n",U); U.d = 1.5; // pristup k clenum unie, pozor timto se prepise U.c !!! printf("Double: %f\r\n",U); printf("Char: %c\r\n",U); printf("Int: %d\r\n",U);

Page 6: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Výčtový typ (enumeration) (1)Výčtový typ (enumeration) (1) Množina striktně definovaných hodnotMnožina striktně definovaných hodnot Odpovídá typu Odpovídá typu intint, jednotlivým hodnotám jsou přiděleny číselné konstanty, , jednotlivým hodnotám jsou přiděleny číselné konstanty,

lze tedy použít např. v příkazu lze tedy použít např. v příkazu switchswitch

enum karty {sedma, osma, desitka, kral, eso} karta_1, karta_2;

enum karty karta_3; // moznost dalsi promenne typu enum karty

int i; karta_1 = osma; i = karta_1; printf("Osma: %d", i);

enum karty {sedma = 7, osma, desitka, kral = 20, eso = 30} karta_1, karta_2;

Page 7: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Výčtový typ (enumeration) (2)Výčtový typ (enumeration) (2) Příklad s příkazem Příklad s příkazem switchswitch

enum days {mo,tu,we,th,fr,sa,su} a_day;

switch( a_day) { case mo: ...; break; case tu: ...; break; case we: ...; break; case th: ...; break; case fr: ...; break; case sa: ...; break; case su: ...; }

Page 8: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Dynamické proměnné (1)Dynamické proměnné (1) Statické proměnnéStatické proměnné Alokaci a uvolnění paměťového místa si řídí sám překladač jazykaAlokaci a uvolnění paměťového místa si řídí sám překladač jazyka Velikost alokovaného místa musí být definována v době překladu Velikost alokovaného místa musí být definována v době překladu

programuprogramu Alokace proměnných na zásobníku, uvolnění na konci bloku/programuAlokace proměnných na zásobníku, uvolnění na konci bloku/programu

Dynamické proměnnéDynamické proměnné Alokaci a uvolnění paměťového místa řídí autor programu pomocí Alokaci a uvolnění paměťového místa řídí autor programu pomocí

funkcí funkcí mallocmalloc – alokace paměti a – alokace paměti a freefree – uvolnění paměti – uvolnění paměti Velikost alokovaného místa lze za běhu měnit pomocí funkce Velikost alokovaného místa lze za běhu měnit pomocí funkce reallocrealloc Funkce jsou definovány v knihovně <stdlib.h>Funkce jsou definovány v knihovně <stdlib.h> Paměť je alokována z oblasti tzv. halda (heap) – velkou výhodou je že Paměť je alokována z oblasti tzv. halda (heap) – velkou výhodou je že

za běhu programu určujeme kolik místa bude alokovánoza běhu programu určujeme kolik místa bude alokováno

Page 9: Pokročilé datové typy (struktury, unie, dynamické proměnné)

Dynamické proměnné (2)Dynamické proměnné (2) PříkladPříklad

#include <stdio.h>#include <stdlib.h>

int main(int argc, char* argv[]){ double *x, y;

x = (double*) malloc( sizeof( double)); // alokace mista v pameti pro // promennou typu double

*x = 3.14; // zapis do dynamicke promenne (pres ukazatel) y = *x; // cteni z dynamicke promenne (pres ukazatel)

free( x); // uvolneni pameti (parametrem musi byt ukazatel // ktery vratila funkce malloc)

printf("Cislo PI: %f", y); getchar(); return 0;}

Page 10: Pokročilé datové typy (struktury, unie, dynamické proměnné)

ProgramProgram Vytvořte program, který bude pracovat jako Vytvořte program, který bude pracovat jako

databáze automobilů. Každé auto je popsáno databáze automobilů. Každé auto je popsáno značkou a rokem výroby. Údaje o autech jsou značkou a rokem výroby. Údaje o autech jsou ukládány do dynamických proměnných, ukládány do dynamických proměnných, ukazatelé jsou ukládány do pole. Přidání je ukazatelé jsou ukládány do pole. Přidání je aktivováno klávesou A, mazání údajů klávesou aktivováno klávesou A, mazání údajů klávesou D, přehled zadaných položek klávesou P a D, přehled zadaných položek klávesou P a program je ukončen stiskem Q. V databázi musí program je ukončen stiskem Q. V databázi musí zůstat nejméně jeden údaj.zůstat nejméně jeden údaj.