290 likes | 649 Views
Verze 2009.01. Datové typy. 6. A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz. Agenda. Co je to „Datový typ“ Celočíselné datové typy Racionální datové typy Prázdný typ (void) Typ definovaný uživatelem (typedef) Výčtový typ (enum) Struktury. Datové typy.
E N D
Verze 2009.01 Datové typy 6 A1PRG - Programování – Seminář Ing. Michal Heczko heczko@fai.utb.cz
Agenda • Co je to „Datový typ“ • Celočíselné datové typy • Racionální datové typy • Prázdný typ (void) • Typ definovaný uživatelem (typedef) • Výčtový typ (enum) • Struktury
Datové typy • Pro uchovávání uživatelských hodnot, výsledků výpočtů a dalších hodnot používáme proměnné. • Pro každou proměnnou je nutné definovat datový typ: • Definuje jaká hodnota bude uložena v dané proměnné • Definuje velikost paměti, která je proměnné vyhrazena.
Celočíselné datové typy • Rozdělení • Znaménkové (klíčové slovo signed) • Kladná a záporná čísla • Neznaménkové (klíčové slovo unsigned) • Pouze kladná čísla a 0
Celočíselné datové typy • Způsob uložení neznaménkových čísel v paměti: • Př. Uložení čísla 131
Celočíselné datové typy • Způsob uložení znaménkových čísel v paměti • Př. Uložení čísla 131 • Př. Uložení čísla -131
Celočíselné datové typy Pozn.: Datový typ long long int zavádí až norma C99
Celočíselné datové typy Pozn.: Datový typ long long int zavádí až norma C99
Celočíselné datové typy • Klíčové slovo unsigned značí použití čísla bez znaménka, signed se znaménkem. Pokud není uvedeno, je číslo definované jako číslo se znaménkem. • Velikosti v bitech a rozsahy jsou pouze orientační. U některých překladačů se mohou tyto hodnoty lišit.
Celočíselné datové typy • Datový typ long long: • Specifikován v normě C99 • Pro vstup a výstup na terminál – %LLd (nebo %lld): long long x; scanf(“%LLd”,&x); printf (“%LLd”,x);
Celočíselné datové typy Ukázka 1 Rozsahy datových typů
Racionální datové typy • Někdy označovány i názvem „Reálné datové typy“, ten však není zcela přesný. • Velikosti v bitech a rozsahy jsou pouze orientační. U některých překladačů se mohou tyto hodnoty lišit.
Racionální datové typy • V paměti uloženy v souladu s normou IEEE 754. • Float (racionální číslo v jednoduché přesnosti): • Nejvyšší bit – znaménko (0 = kladné; 1 = záporné číslo) • Exponent – 8 bitů – exponent (pro 2e) posunutý o hodnotu 127 (tak, aby mohl být v rozsahu od -126 do 127). • Mantisa – 23 bitů – od nejvyššího bitu (2-1, 2-2, 2-3, … 2-22. 2-23)
Racionální datové typy • Double (racionální číslo s dvojitou přesnosti): • Nejvyšší bit – znaménko (0 = kladné; 1 = záporné číslo) • Exponent – 11 bitů – exponent (pro 2e) posunutý o hodnotu 1023 (tak, aby mohl být v rozsahu od -1022 do 1023). • Mantisa – 52 bitů – od nejvyššího bitu (2-1, 2-2, 2-3, … 2-52. 2-53)
Prázdný typ • Klíčové slovo void • Nenabývá žádných hodnot • Použití: • Pokud funkce nemá žádné vstupní parametry: int soucet(void) { int a, b; scanf("%d %d",&a,&b); return (a+b); }
Prázdný typ • Pokud funkce nemá žádnou návratovou hodnotu: void pozdrav(void) { printf(„AHOJ!\n"); }
Typ definovaný uživatelem • Klíčové slovo typedef • Umožňuje vytvářet vlastní datové typy – vytvoří nové jméno pro již existující datový typ. • Př. typedef unsigned int delka; delka a, b; a = 5;
Výčtový typ • Klíčové slovo enum • Použití v případě, že existuje předem definovaná konečná množina hodnot, kterých může údaj nabývat. • Při definici výčtového typu je nutné uvést všechny hodnoty.
Výčtový typ • Obecná syntaxe: typedef enum {HODNOTA1, HODNOTA2, … , HODNOTAN} JMENO; • Příklad: typedef enum {PONDELI, UTERY, STREDA, CTVRTEK, PATEK, SOBOTA, NEDELE} DNY;
Výčtový typ • Použití: typedef enum {PONDELI, UTERY, STREDA, CTVRTEK, PATEK, SOBOTA, NEDELE} DNY; DNY d1; d1 = UTERY; if (d1 == UTERY) printf("Dnes je utery!");
Celočíselné datové typy Ukázka 2 Výčtový typ
Struktury • Struktura • Skupina proměnných, které mohou být různého datového typu. Tyto proměnné jsou seskupeny pod jeden identifikátor. • Příklad použití: • Definice bodu v rovině. • Bod tvoří 2 souřadnice – x, y • Údaje o zaměstnanci • Každý zaměstnanec je popsán množinou atributů (jméno, adresa, rodné číslo, …)
Struktury • Definice struktury: struct <nazev> { <promenna1>; <promenna2>; …; <promennaN>; }; • Příklad: struct bod{ int x; int y; };
Struktury • Inicializace struktury: struct <nazevstruktury> <identifikator> = { <hodnota1>, <hodnota2>, …, <hodnotaN>}; • Příklad: struct bod A = {3, 2};
Struktury • Přístup k jednotlivým prvkům struktur: <nazevstruktury>.<promenna> = <hodnota>; • Příklad: struct bod A = { 3, 2}; A.x = 5; A.y = 6;
Definice struktury pomocí typedef • Druhá možnost definice struktury: typedef struct { int x; int y; } bod; • Umožní definovat proměnnou bez klíčového slova struct: bod A; • Nebo s inicializací: bod A = {0,0};
Celočíselné datové typy Ukázka 3 Struktury
A1PRG-s 06. Datové typy Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.cz