Odvozené a strukturované typy dat



Podobné dokumenty
Třídy a struktury v C++

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Programování v C++ 1, 1. cvičení

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

2 Datové typy v jazyce C

Sada 1 - Základy programování

Výrazy, operace, příkazy

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

IUJCE 07/08 Přednáška č. 1

Jazyk C++ I. Šablony

Data, výrazy, příkazy

Rozsáhlé programy = projekty

Výrazy, operace, příkazy

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Základy C++ I. Jan Hnilica Počítačové modelování 18

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Mělká a hluboká kopie

Algoritmizace a programování

Opakování programování

Úvod do programovacích jazyků (Java)

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Programovací jazyk C++ Hodina 1

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Elementární datové typy

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Prezentace a vysvětlení programového prostředí NXC

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Př. další použití pointerů

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Zápis programu v jazyce C#

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

PB161 Programování v jazyce C++ Přednáška 10

Proměnná a její uložení v paměti

Základy programování (IZP)

IUJCE Přednáška č. 1. programování v C na vyšší úrovni základy objektově orientovaného programovaní v (C++, C#)

Programovací jazyk Pascal

Programování v C++ 3, 3. cvičení

ADT/ADS = abstraktní datové typy / struktury

dovolují dělení velkých úloh na menší = dekompozice

NPRG030 Programování I, 2015/16 1 / :25:32

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

PROGRAMOVÁNÍ V C++ CVIČENÍ

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Algoritmizace a programování

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Jazyk C++, některá rozšíření oproti C

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Paměť počítače. alg2 1

Vstup a výstup datové proudy v C

Základy programování (IZP)

Programování v C++, 2. cvičení

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Algoritmizace a programování

Assembler - 5.část. poslední změna této stránky: Zpět

PB161 Programování v jazyce C++ Přednáška 4

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Operační systémy. Cvičení 3: Programování v C pod Unixem

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

2 Strukturované datové typy Pole Záznam Množina... 4

Sdílení dat mezi podprogramy

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Uplatnění metod na zvolený jazyk

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Programování v jazyce C a C++

O datových typech a jejich kontrole

Pointery II. Jan Hnilica Počítačové modelování 17

Ukazka knihy z internetoveho knihkupectvi

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

PB161 Programování v jazyce C++ Přednáška 10

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Algoritmizace a programování

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Ukazatele, dynamická alokace

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna / 25

Telemetrický komunikační protokol JETI

Dynamická alokace paměti

Struktura programu v době běhu

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

přetížení operátorů (o)

Transkript:

Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 1 / 20

Odvozené a strukturované typy dat základní datový typ součástí normy jazyka, preprocesor použití bezparametrických maker, raději voĺıme konstanty odvozené datové typy typedef <type d e f i n i t i o n > < i d e n t i f i e r >; vlastní definice datového typu strukturované datové typy struct a union vlastní definice struktury. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 2 / 20

Složitější typové deklarace deklarace typ jméno; typ jméno[]; typ jméno[3]; typ *jméno; typ *jméno[]; typ *(jméno[]); typ (*jméno)[]; typ jméno(); typ *jméno(); typ *(jméno()); typ (*jméno)(); význam typ, (otevřené) pole typu typ, pole (pevné velikosti) tří položek typu typ (jméno[0], jméno[1], jméno[2]), ukazatel na typ, (otevřené) pole ukazatelů na typ, (otevřené) pole ukazatelů na typ, ukazatel na (otevřené) pole typu typ, funkce vracející hodnotu typu typ, funkce vracející ukazatel na hodnotu typu typ, funkce vracející ukazatel na hodnotu typu typ, ukazatel na funkci, vracející typ. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 3 / 20

Obecný postup zevnitř ven. Postup pro správnou interpretaci definice: 1 začněme u identifikátoru a hledejme vpravo kulaté nebo hranaté závorky (jsou li nějaké); 2 interpretujme tyto závorky a hledejme vlevo hvězdičku; 3 pokud narazíme na pravou závorku (libovolného stupně vnoření), vrat me se a aplikujme pravidla jedna a dva pro vše mezi závorkami; 4 aplikujme specifikaci typu. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 4 / 20

Příklad složitější typové konstrukce char ( ( v a r ) ( ) ) [ 1 0 ] ; 7 6 4 2 1 3 5 1 identifikátor var je deklarován jako 2 ukazatel na 3 funkci vracející 4 ukazatel na 5 pole deseti prvků, které jsou 6 ukazateli na 7 hodnoty typu char. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 5 / 20

Příklady složitější typové konstrukce 2 unsigned i n t ( const name [ 5 ] [ 1 0 ] ) ( void ) ; Identifikátor name je dvourozměrným polem o celkem padesáti prvcích. Prvky tohoto pole jsou ukazateli na ukazatele, které jsou konstantní. Tyto konstantní ukazatele ukazují na typ funkce, která nemá argumenty a vrací ukazatel na hodnotu typu unsigned int. double ( v a r ( double ( ) [ 3 ] ) ) [ 3 ] Funkce vrací ukazatel na pole tří hodnot typu double. Její argument, stejně jako návratová hodnota, je ukazatel na pole tří prvků typu double. Argument funkce var je konstrukce, která se nazývá abstraktní deklarace. Obecně se jedná o deklaraci bez identifikátoru. Pro zjednodušení a zpřehlednění abstraktních deklarací se používá typedef konstrukce. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 6 / 20

Příklady abstraktní deklarace typů deklarace int * int *[3] int (*)[5] int *() int (*) (void) int (*const []) (unsigned int,...) význam ukazatel na typ int, pole tří ukazatelů na int, ukazatel na pole pěti prvků typu int, fce bez specifikace arg. vracející uk. na int, uk. na fci nemající argumenty vracející int, uk. na nespecifikovaný počet konst. uk. na fce. z nichž každá má první argument unsigned in a nespecifikovaný počet dalších argumentů. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 7 / 20

Výčtový typ umožňuje definovat konstanty výčtového typu. enum [ tag ] {enum l i s t } [ d e c l a r a t o r ] ; enum je kĺıčové slovo, zahajující definici hodnot výčtového typu; tag je nepovinná visačka, využívaná zejména ve stylu K&R jazyka C, s konstrukcí typedef četnost jejího použití klesá; enum-list je seznam konstant výčtového typu s možnou explicitně přiřazenou hodnotou, viz příklad dále, jinak nabývá první konstanta výčtového typu hodnoty nula, druhá hodnoty jedna,..., každý následník má hodnotu o jedničku vyšší, než jeho předchůdce; declarator je nepovinný seznam proměnných daného typu enum. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 8 / 20

Použití konstant výčtových typů enum use.c typedef enum { Back = 8, Tab = 9, Esc = 27, Enter = 13, Down = 0 x0150, L e f t = 0 x014b, Right = 0x014d, Up = 0 x0148, NUL = 0 x0103, S h i f t T a b = 0 x010f, Del = 0 x0153, End = 0 x014f, Home = 0 x0147, I n s = 0 x0152, PgDn = 0 x0151, PgUp = 0 x0149 } k e y t ; i n t znak ;... e l s e i f ( ( znak == L e f t ) ( znak == Back ) )... e l s e i f ( znak == Enter )... e l s e i f ( znak == Esc )... e l s e i f... Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 9 / 20

Typ struktura s t r u c t [< struct type name>] { [< type> <v a r i a b l e name [, v a r i a b l e name,... ] > ] ; [< type> <v a r i a b l e name [, v a r i a b l e name,... ] > ] ;... } [< s t r u c t u r e v a r i a b l e s >] ;. tečka selektor struktury (záznamu), např. u proměnné. -> selektor struktury, prostřednictvím ukazatele. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 10 / 20

Příklad struktur struct01.c I typedef s t r u c t { f l o a t re, im ; } complex ; complex c i s l o, i m j e d n o t k a = {0, 1 } ; c i s l o. r e = 1 2. 3 4 5 6 ; c i s l o. im = 987.654; p r i n t f ( r e = %10.5 f im = %10.5 f \n, i m j e d n o t k a. re, i m j e d n o t k a. im ) ; p r i n t f ( r e = %10.5 f im = %10.5 f \n, c i s l o. re, c i s l o. im ) ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 11 / 20

Příklad struktur struct01.c II typedef s t r u c t { i n t e v c i s l o ; char nazev [ZNAKU NAZEV + 1 ] ; i n t n a s k l a d e ; f l o a t cena ; } vyrobek ; typedef vyrobek z b o z i [ POLOZEK ZBOZI ] ; vyrobek a = {8765, nazev z b o z i na s k l a d e, 100, 1 2 3. 9 9 } ; vyrobek p p o l o z k y ;... ppolozky >e v c i s l o = 1 ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 12 / 20

Příklad struktur struct01.c III p o l o z k y [ 0 ]. e v c i s l o = 0 ; s t r c p y ( p o l o z k y [ 0 ]. nazev, p o l o z k a c i s l o 0 ) ; p o l o z k y [ 0 ]. n a s k l a d e = 2 0 ; p o l o z k y [ 0 ]. cena = 4 5. 1 5 ; p p o l o z k y = p o l o z k y + 1 ; ppolozky >e v c i s l o = 1 ; / ( p p o l o z k y ). e v c i s l o = 1 ; s t r c p y ( ppolozky >nazev, p o l o z k a c i s l o 1 ) ; ppolozky >n a s k l a d e = 123; ppolozky >cena = 9 9 4 5. 1 5 ; p r i n t f (FORMAT VYROBEK, a. e v c i s l o, a. n a s k l a d e, a. cen p r i n t f (FORMAT VYROBEK, p o l o z k y [ 0 ]. e v c i s l o, p o l o z k y [ 0 p o l o z k y [ 0 ]. cena, p o l o z k y [ 0 ]. nazev ) ; p r i n t f (FORMAT VYROBEK, ppolozky >e v c i s l o, ppolozky > ppolozky >cena, ppolozky >nazev ) ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 13 / 20

Použití struktur výstup struct01.c r e = 0.00000 im = 1.00000 r e = 12.34560 im = 987.65399 c i s l o : 8765 pocet : 100 cena : 123.99 nazev : nazev z b o z i c i s l o : 0 pocet : 20 cena : 45.15 nazev : p o l o z k a c i s c i s l o : 1 pocet : 123 cena : 9945.15 nazev : p o l o z k a c i s Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 14 / 20

Příklad struktury FILE * datové proudy Typ FILE, definice v hlavičkovém souboru stdio.h je: typedef s t r u c t { short l e v e l ; unsigned f l a g s ; char f d ; unsigned char h o l d ; short b s i z e ; unsigned char b u f f e r, curp ; unsigned istemp ; short token ; } FILE ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 15 / 20

Neúplná deklarace struktur s t r u c t A ; / neuplna / s t r u c t B { s t r u c t A pa } ; s t r u c t A { s t r u c t B pb } ; Řešení je možné díky ukazateli jeho velikost je známa, nikoli velikost struktury, na kterou ukazuje. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 16 / 20

Typ union union [<union type name>] { <type> <v a r i a b l e names> ;... } [<union v a r i a b l e s >] ; Syntaxe jako struct. Sémantika (!) z položek unie lze používat v jednom okamžiku pouze jednu. Ostatní mají nedefinovanou hodnotu. Realizace: pamět ové místo, vyhrazené pro unii je tak veliké, aby obsáhlo jedinou (pamět ově největší) položku. Je na programátorovi, pracuje li s prvkem unie, který je určen správně či nikoliv. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 17 / 20

Bitová pole Bitové pole je celé číslo, umístěné na určeném počtu bitů. Tyto bity tvoří souvislou oblast paměti. Bitové pole může obsahovat více celočíselných položek. Můžeme vytvořit bitové pole tří tříd: 1 prosté bitové pole, 2 bitové pole se znaménkem, 3 bitové pole bez znaménka. Bitová pole můžeme deklarovat pouze jako členy struktury či unie. Výraz, který napíšeme za identifikátorem položky a dvojtečkou, představuje velikost pole v bitech. Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 18 / 20

Struktura ftime detailně. s t r u c t f t i m e { unsigned f t t s e c : 5 ; / Two s e c o n d s / unsigned f t m i n : 6 ; / Minutes / unsigned f t h o u r : 5 ; / Hours / unsigned f t d a y : 5 ; / Days / unsigned ft month : 4 ; / Months / unsigned f t y e a r : 7 ; / Year 1980 / } ; Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu 2011 19 / 20