Struktury.

Slides:



Advertisements
Podobné prezentace
Programovací jazyk C++
Advertisements

Pokročilé datové typy (struktury, unie, dynamické proměnné)
2.1 Pevný disk Fyzická struktura  plotny  záznamový materiál  č/z hlavičky  prachotěsný obal  motorky otáčení ploten  plotny na jedné hřídely.
ALGORITMIZACE Mgr. Milan Pastyřík IUVENTAS, s. r. o.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Význam diferenciálních rovnic převzato od Doc. Rapanta.
Formáty souborů (neboli typ souboru) obvykle určuje význam dat v elektronickém souboru. Existuje množství různých formátů, přizpůsobených pro ukládání.
IP adresace (IPv4) Velikost a určení IP adresy I. Epocha (dělení na třídy) II. Epocha (zavedení masky) Speciální adresy Příklady a řešení IP adres Souhrn.
Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava Šablona 32 VY_32_INOVACE_031.ICT.34 Tvorba webových stránek – úvod do CSS.
HTML HyperText Markup Language Je to značkovací jazyk používaný na tvorbu webových stránek, které jsou propojeny hypertextovými odkazy. Je hlavním z.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Výukový materiál zpracovaný v rámci projektu Číslo projektuCZ.1.07/1.4.00/ Šablona klíčové aktivityIII/2 SadaMatematika 6 NázevDesetinná čísla_8.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 10: Tvorba vlastních funkcí Bc. Radek Libovický.
Senzory pro EZS.
Grafická úprava prezentace
Základní pojmy pro práci s OS Windows
POPR Počítačová podpora řízení
Uspořádání dat na disku
Věta se skládá ze slov Název školy
Slovní úlohy o společné práci
STATISTIKA Starší bratr snědl svůj oběd i oběd mladšího bratra. Oba snědli v průměru jeden oběd.
Software počítače – opakování
Grafické programy - opakování
ANALYTICKÁ GEOMETRIE V ROVINĚ
Programovací jazyk C++
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
ORGANIZACE DAT V POČÍTAČI
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Uživatelem definované datové typy
Financováno z ESF a státního rozpočtu ČR.
Programování v jazyce C++
Programování v jazyce C++
Abstraktní datové typy
Úměrnosti Nepřímá úměrnost. Zavedení pojmu nepřímá úměrnost.
Jedno-indexový model a určení podílů cenných papírů v portfoliu
Výukový materiál zpracován v rámci projektu
Databáze MS ACCESS 2010.
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Datové typy v jazyce C Datové typy void skalární aritmetické
Lexikální atomy jazyka C
Stránkování Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Překladače 6. Sémantická analýza
Procedury a Funkce v programovacím jazyce Pascal
Slovní úlohy o společné práci stejný čas
Číslo projektu CZ.1.07/1.4.00/ Název sady materiálů
Stavební fakulta ČVUT, B407
Provozováno Výzkumným ústavem pedagogickým v Praze.
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Materiál byl vytvořen v rámci projektu
Dvourozměrné geometrické útvary
Slovní úlohy o společné práci
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Datové typy v jazyce C Datové typy void skalární aritmetické
Tvorba webových stránek - úvod
Dvourozměrné geometrické útvary
Union neboli sjednocení Bitová pole
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
K-mapa: úvod a sestavení
Funkce v jazyce C = „množina“ operací, která provádí nějakou činnost s různými vstupy odstranění vícenásobného psaní či vkládání téhož kódu a lepší přehlednost.
Algoritmizace a datové struktury (14ASD)
Grafy kvadratických funkcí
Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char)
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Slovní úlohy o společné práci − 3
Union neboli sjednocení Bitová pole
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Struktury

Strukturované datové typy struktura je heterogenní datový typ proměnná typu struktura tedy obsahuje několik položek různých datových typů, které ovšem spolu logicky souvisejí struktura umožňuje „společné“ pojmenování všech sdružených údajů, s nimiž se potom pohodlněji pracuje

Struktura deklarace proměnné bod typu struktura, která reprezentuje body v dvourozměrném prostoru: struct { float x; float y; } bod;

deklarace nového typu TBod: typedef struct { float x; float y; } TBod; deklarace proměnné bod1, která je typu TBod: TBod bod1; deklarace pole „bodů“ TBod body[20];

přístup k položkám se provádí pomocí tečkové notace: bod.x = -3; bod.y = 5; bod1.x = 2; bod1.y = 0; body[0].x= 0; body[0].y = 1; uložení v paměti: 5 y bod: -3 x

pole struktur TBod body[20]; uložení v paměti body: … 1 2 19 y 1 … x …

stejně jako u pole je možné již při deklaraci inicializovat položky struktury (tzv. konstruktor): TBod b1 = {3,-1};

dynamická alokace proměnné typu struct v C: TBod *b3; b3 = (TBod*)malloc(sizeof(TBod)); resp. v C++ b3 = new TBod; přístup k položkám: *b3.x = 5; *b3.y = 0; nebo: b3 -> x = 5;

dynamická alokace pole struktur o n položkách: TBod *b4; b4 = (TBod*)malloc(sizeof(TBod)*n); resp. v C++ b4 = new Tbod[n]; přístup k položkám: b4[1].x = 5; b4[1].y = 0;

dealokace v C: free(b4); v C++: delete [] b4;

do procedur a funkcí předáváme buď celé struktury nevýhodné, uvědomme si, že se celá struktura kopíruje na zásobník definice funkce float vzdalenost(TBod b) { return sqrt(b.x*b.x+b.y*b.y); } volání vzdalenost(b1); vzdalenost(*b3);

nebo raději přes ukazatele na zásobník se kopíruje pouze adresa, úsporné definice funkce float vzdalenost(TBod *b) { return sqrt(b->x*b->x+b->y*b->y); } volání vzdalenost(&b1); vzdalenost(b3);

Poznámka struktura odpovídá záznamu (record) v Pascalu existuje ještě datový typ sjednocení (union) analogie variantního záznamu v Pascalu kapitola Doplněk na webových stránkách

Jiný příklad typedef struct { char *znacka_vozidla; char SPZ[10]; int objem_valcu; } TAuto; TAuto auto1;

přístup k položkám: auto1.objem_valcu = 1221; auto1.znacka_vozidla = "Škoda"; int d=length("Škoda"); auto1.znacka_vozidla = new char[d+1]; strcpy(auto1.znacka_vozidla,"Škoda"); strcpy(auto1.SPZ,"1A1 01 01");

v klasickém C bychom alokovali: auto1.znacka_vozidla = (char*)malloc(sizeof(char)*(d+1)); dealokujeme: v C++: delete [] auto1.znacka_vozidla; v C: free(auto1.znacka_vozidla);

Příklad – formát BMP grafický formát pro uložení obrázků bmp (Bitmap) obsahuje úvodní hlavičku o délce 14 bytů.

Položka Délka položky Popis typ 2 byty 2 znaky „BM“ velikost 4 byty celková velikost souboru rezervováno1 rezervováno pro pozdější použití, musí být na 0 rezervováno2 posun posun obrazových dat od začátku této hlavičky (struktury)

předpokládejme, že pracujeme na platformě Intel uložení dat little-endian, tj. slabiky nižšího řádu jsou uloženy na nižších adresách), sizeof(unsigned short) ==2 sizeof(unsigned int) == 4

strukturu, která odpovídá hlavičce souboru, nadeklarujeme následovně: typedef struct { unsigned char B; unsigned char M; unsigned int velikost; unsigned short res1; unsigned short res2; unsigned int posun; } THeadBMP; nadeklarujeme proměnnou pro hlavičku: THeadBMP hlavicka;

fread((void*)&hlavicka,sizeof(THeadBMP),1,vst) hlavičku načteme ze soubor vst, který byl otevřen pomocí fopen v binárním módu: fread((void*)&hlavicka,sizeof(THeadBMP),1,vst) upozornění: některé překladače v rámci optimalizace přístupu do paměti neukládají položky struktur těsně za sebou, ale zarovnávají je na adresy dělitelné 4. V takovém případě by mezi položkami M a velikost byla v paměti mezera a velikost struktury by byla větší než velikost hlavičky. Museli bychom tedy v překladači tuto optimalizaci (zarovnání položek na adresy dělitelné 4) vypnout. Např. v gcc použijeme přepínač překladu -fpack-struct=1, popř. lze použít makro #pragma pack(1) (zarovnat na 1 byte - pack(1) je makro z důvodu kompatibility s překladači Microsoft)

Úloha 1 Napište program, kde deklarujete strukturovaný typ pro uložení bodu v prostoru. Definujte dva body (dvě proměnné), jejichž souřadnice načtete z klávesnice. Napište dvě funkce, jedna vrací vzdálenost bodu od počátku (inspirujte se funkcí vzdalenost na slidech 11 a 12), druhá funkce má dva body jako parametry a vrací vzdálenost mezi nimi.