Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
informatika:maturita:20a [15. 03. 2020, 20.07] xdostal [Datové typy strukurovaných jazyků] |
informatika:maturita:20a [27. 05. 2020, 15.35] (aktuální) xdostal [Složené typy:] |
||
---|---|---|---|
Řádek 5: | Řádek 5: | ||
===== Jednoduché datové typy:===== | ===== Jednoduché datové typy:===== | ||
- | Jednoduché (také elementární) datové typy jsou většinou definované přímo jazykem, jsou do něj zabudované, můžeme je dělit na ordinální a reálné. | + | Jednoduché (také elementární) datové typy jsou většinou definované přímo jazykem, jsou do něj zabudované, můžeme je dělit na ordinální a neordinální. |
==== Ordinální typy ==== | ==== Ordinální typy ==== | ||
Řádek 20: | Řádek 20: | ||
* //long// = ještě více než int | * //long// = ještě více než int | ||
- | **Char** - neboli znak = jednotka informace, která zpravidla odpovídá jednomu znaku v psané formě přirozeného jazyka. Tedy jednomu písmenku, číslici, symbolu, interpunkci,... např. 'a', 'A', 'g', ' ', '5', '%'. | + | **Char** - neboli znak = jednotka informace, která zpravidla odpovídá jednomu znaku v psané formě přirozeného jazyka. Tedy jednomu písmenku, číslici, symbolu, interpunkci,... např. 'a', 'A', 'g', ' ', '5', '%'. Má velikost 1 byte. |
**Výčtový typ** - jedná se o datový typ definovaný uživatelem - může nabývat hodnot ze specifikované konečné množiny. Např. měsíce v roce (leden, únor...), dny v týdnu (pondělí, úterý...) | **Výčtový typ** - jedná se o datový typ definovaný uživatelem - může nabývat hodnot ze specifikované konečné množiny. Např. měsíce v roce (leden, únor...), dny v týdnu (pondělí, úterý...) | ||
Řádek 26: | Řádek 26: | ||
v C ho definujeme takto: | v C ho definujeme takto: | ||
- | typedef enum { | + | typedef enum { |
- | PRAHA, BRNO, OSTRAVA | + | PRAHA, BRNO, OSTRAVA |
- | } MESTA; | + | } MESTA; |
+ | |||
+ | MESTA m = BRNO; | ||
+ | m == 1 //pravda | ||
Řádek 35: | Řádek 38: | ||
U neordinálních datových typů není jednoznačně určen předchůdce a následovník každé hodnoty. | U neordinálních datových typů není jednoznačně určen předchůdce a následovník každé hodnoty. | ||
- | **Double, float, real** - reálné číslo nebo také číslo s plovoucí desetinnou čárkou, např. '1.58' nebo '0.0045'. V počítači je většinou reprezentováno jako //celé číslo * 2<sup>exponent</sup>// kde exponent je také celé čislo. Mnohá desetinná čísla nelze v tomto formátu přesně reprezentovat. Např. číslo 0,1 má periodický dvojkový zápis (0,0001100)<sub>2</sub>. Důsledkem je, že reálná čísla můžou v počítači vypadat a chovat se trochu jinak. | + | **Double, float** - reálné číslo nebo také číslo s plovoucí desetinnou čárkou, např. '1.58' nebo '0.0045'. V počítači je většinou reprezentováno jako //celé číslo * 2<sup>exponent</sup>// kde exponent je také celé čislo. Mnohá desetinná čísla nelze v tomto formátu přesně reprezentovat. Např. číslo 0,1 má periodický dvojkový zápis (0,0001100)<sub>2</sub>. Důsledkem je, že reálná čísla můžou v počítači vypadat a chovat se trochu jinak. |
V jazyce C existují tyto konkrétní typy: | V jazyce C existují tyto konkrétní typy: | ||
Řádek 56: | Řádek 59: | ||
**Seznam - list** - obdoba pole. Na rozdíl od pole nelze seznam přímo adresovat pomocí indexu. Seznam je tedy možné procházet pouze postupně, od začátku do konce, sekvenčně. Existují i obousměrné spojové seznamy, které je možné procházet od začátku i od konce, avšak omezení přístupu je výrazné. Výhodou seznamů proti polím je, že je možné snadno přidávat nebo odebírat i prvky nacházející se uprostřed seznamu. | **Seznam - list** - obdoba pole. Na rozdíl od pole nelze seznam přímo adresovat pomocí indexu. Seznam je tedy možné procházet pouze postupně, od začátku do konce, sekvenčně. Existují i obousměrné spojové seznamy, které je možné procházet od začátku i od konce, avšak omezení přístupu je výrazné. Výhodou seznamů proti polím je, že je možné snadno přidávat nebo odebírat i prvky nacházející se uprostřed seznamu. | ||
+ | |||
+ | **Množina - set** - obsahuje unikátní, neopakující se hodnoty bez stanoveného pořadí. Výhodou je možnost kontroly, zda li prvek náleží množině nebo ne. | ||
**Struktura - struct** - datový typ složený z jiných datových typů/složený z různých typů proměnných. Jedná se tedy o heterogenní datový typ. Nejlépe je pochopitelný přímo z ukázky deklarace v jazyce C: | **Struktura - struct** - datový typ složený z jiných datových typů/složený z různých typů proměnných. Jedná se tedy o heterogenní datový typ. Nejlépe je pochopitelný přímo z ukázky deklarace v jazyce C: | ||
- | struct account { | + | struct account { |
- | int account_number; | + | int account_number; |
- | char *first_name; | + | char *first_name; |
- | char *last_name; | + | char *last_name; |
- | float balance; | + | float balance; |
- | }; | + | }; |
- | Když teď vytvoříme nový struct: 'struct account accountExample;' vytvoříme v podstatě "balíček" výše deklarovaných proměnných, account_number tohoto konkrétního structu poté získáme např. 'accountExample.account_number ...' | + | Když teď vytvoříme nový struct: 'account accountExample;' vytvoříme v podstatě "balíček" výše deklarovaných proměnných, account_number tohoto konkrétního structu poté získáme např. 'accountExample.account_number ...' |