Skip to main content

T21 – Jednoduché a zložené údajové typy

Vlastnosti
okruhTČOZ
stavvypracované
Oficiálne znenie okruhu (PDF sylabus)

JEDNODUCHÉ A ZLOŽENÉ ÚDAJOVÉ TYPY - reťazce, klasické pole, vytvorenie poľa z hľadiska pamäte, úložiská údajov, kolekcie, kontajnery, DualStack

Jednoduché údajové typy a reťazce​

Jednoduchý (primitívny) typ reprezentuje jednu hodnotu a určuje jej veľkosť, rozsah a povolené operácie. Patria sem celé čísla, desatinné čísla, znak a logická hodnota boolean. Treba rozlišovať rozsah typu, pretečenie a presnosť desatinných čísel; peniaze sa preto často ukladajú ako celé najmenšie jednotky alebo desatinný typ s definovanou presnosťou.

Reťazec je postupnosť znakov. V moderných jazykoch môže byť uložený ako objekt s dĺžkou a kódovaním Unicode. Operácie sú dĺžka, indexovanie, spájanie, vyhľadanie podreťazca, porovnanie, nahradenie a rozdelenie. Reťazec je často nemenný, takže opakované spájanie v cykle môže vytvárať mnoho dočasných objektov; vhodný je builder alebo kolekcia. Pri vstupe treba rozlišovať prázdny reťazec, biele znaky a kódovanie.

Klasické pole​

Klasické pole je súvislý blok prvkov rovnakého typu, ku ktorým pristupujeme indexom. Pri nulovom indexovaní má pole dĺžky n platné indexy 0 až n-1; prístup mimo hraníc je chyba. Výhodou je O(1) prístup podľa indexu a dobrá lokalita v pamäti, nevýhodou pevná veľkosť a nákladné vloženie uprostred.

Vytvorenie poľa z hľadiska pamäte​

Pri vytvorení sa rezervuje súvislý priestor pre n prvkov a vypočíta sa adresa prvku približne adresa(A[i]) = základ + i·veľkosť_prvku. Statické pole môže byť súčasťou zásobníka alebo dátovej oblasti, dynamicky vytvorené pole býva na halde a premenná drží referenciu; presné umiestnenie závisí od jazyka a runtime. Inicializácia nastaví prvky na predvolené hodnoty alebo na zadané hodnoty. Pri veľkom poli treba sledovať pamäť a životnosť objektu.

Úložiská údajov, kolekcie a kontajnery​

Údaje môžu byť uložené v operačnej pamäti, v textových/binárnych súboroch, v relačnej alebo dokumentovej databáze, na blokovom úložisku alebo v objektovom úložisku. Rozhoduje sa podľa trvácnosti, objemu, rýchlosti, súbežného prístupu, zálohovania a konzistencie.

Kolekcie flexibilnejšie spravujú viac prvkov:

  • zoznam (List) zachováva poradie a umožňuje duplicity,
  • množina (Set) udržiava jedinečné prvky a rýchlo testuje členstvo,
  • mapa/slovník (Dictionary, Map) spája kľúč s hodnotou,
  • front (Queue) pracuje FIFO, zásobník (Stack) LIFO.

Kontajner môže znamenať dátovú štruktúru, ale v prevádzke aplikácií aj izolované prostredie s programom a závislosťami (napr. kontajnerová platforma). Význam treba vyvodiť z kontextu; v tejto téme ide o oba bežné významy.

Dual Stack​

Dual Stack prevádzkuje IPv4 aj IPv6 súčasne na rovnakom zariadení a rozhraní. DNS môže vrátiť A aj AAAA; hostiteľ sa pokúsi použiť IPv6 a pri zlyhaní môže použiť IPv4 podľa algoritmu operačného systému. Sieť preto potrebuje adresy, routing, firewall a monitorovanie pre oba protokoly. Dual Stack uľahčuje postupný prechod, ale dočasne zdvojuje konfiguráciu a bezpečnostné pravidlá.

Jednoduché typy v C#​

TypVeľkosťRozsah / presnosťPríklad
byte1 B0 až 255byte oktet = 192;
short2 B−32 768 až 32 767
int4 B≈ ±2,1 miliardyint port = 443;
long8 B≈ ±9,2·10¹⁸long bajty = 5_000_000_000;
float4 B~7 platných číslicfloat t = 21.5f;
double8 B~15–16 platných číslicdouble pi = 3.14159;
decimal16 B28–29 číslic, presnýdecimal cena = 19.99m; (peniaze)
char2 Bjeden znak Unicodechar c = 'A';
bool1 Btrue / falsebool up = true;

string nie je jednoduchý typ – je to referenčný typ (objekt), ale správa sa „hodnotovo“ (je nemenný).

Reťazce v C#​

string ip = "192.168.10.37";
ip.Length; // 13
ip[0]; // '1'
ip.Contains("10"); // true
ip.IndexOf('.'); // 3
ip.Substring(0, 7); // "192.168"
ip.Replace(".", "-"); // "192-168-10-37"
string[] oktety = ip.Split('.'); // {"192","168","10","37"}
ip.ToUpper(); ip.Trim(); // veľké písmená, odstránenie medzier
string spojene = string.Join(":", oktety);

// veľa spájaní v cykle – StringBuilder namiesto +
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 1000; i++) sb.Append(i).Append(',');
string vysledok = sb.ToString();

Pole v pamäti​

int[] a = new int[4]; // 4 × 4 B = 16 B súvislej pamäte, prvky = 0
int[] b = { 5, 8, 2, 9 }; // inicializácia hodnotami
int[,] m = new int[2, 3]; // obdĺžnikové 2D pole
int[][] z = new int[3][]; // zubaté pole (pole polí)
zásobník (stack) halda (heap)
┌───────────┐ ┌────┬────┬────┬────┐
│ b ─────────────────────▶│ 5 │ 8 │ 2 │ 9 │
└───────────┘ └────┴────┴────┴────┘
adresa b[i] = začiatok + i · 4 B

Premenná b v zásobníku drží len odkaz; samotné prvky sú na halde. Preto int[] c = b; neskopíruje pole – c a b ukazujú na to isté.

Kolekcie v C#​

var zoznam = new List<string> { "R1", "R2" };
zoznam.Add("SW1"); zoznam.Remove("R2"); int pocet = zoznam.Count;

var mac = new Dictionary<string, int>(); // MAC → port
mac["00:1A:2B:3C:4D:5E"] = 3;
if (mac.TryGetValue("00:1A:2B:3C:4D:5E", out int port)) { /* port = 3 */ }

var front = new Queue<string>(); // FIFO – prvý dnu, prvý von
front.Enqueue("paket1"); front.Dequeue();

var zasobnik = new Stack<int>(); // LIFO – posledný dnu, prvý von
zasobnik.Push(1); zasobnik.Pop();

var unikatne = new HashSet<int> { 10, 20, 10 }; // {10, 20}
PoleList
veľkosťpevnámení sa podľa potreby
počet prvkovLengthCount
pridanienedá saAdd, Insert

Dual Stack na routeri Cisco​

ipv6 unicast-routing
interface g0/0
ip address 192.168.10.1 255.255.255.0
ipv6 address 2001:db8:acad:10::1/64
ipv6 address fe80::1 link-local
no shutdown
!
ip route 0.0.0.0 0.0.0.0 10.0.0.2
ipv6 route ::/0 2001:db8:acad:ff::2

Kontrola: show ip interface brief aj show ipv6 interface brief, ping a ping ipv6.

Krátka ústna odpoveď​

Jednoduché typy uchovávajú jednu hodnotu, reťazec je postupnosť znakov a klasické pole je súvislý blok rovnakých prvkov s indexom od nuly. Pri vytvorení poľa sa rezervuje súvislá pamäť a treba kontrolovať hranice. Kolekcie zahŕňajú zoznam, množinu, mapu, front a zásobník; úložisko môže byť pamäť, súbor alebo databáza. Dual Stack znamená súčasnú prevádzku IPv4 a IPv6.

Súvisiace poznámky (CCNA2)​

M01 – Basic Device Configuration · M15 – IP Static Routing — rozcestník CCNA2 – SRWE

Kontrolné otázky​

Aké jednoduché údajové typy poznáš v C#?

Celočíselné byte, short, int, long; desatinné float, double, decimal; char; bool. Líšia sa veľkosťou a rozsahom.

Prečo sa na peniaze používa decimal a nie double?

double je binárne desatinné číslo a niektoré hodnoty (0,1) neuloží presne. decimal je desiatkový a presný na 28 číslic.

Aké operácie s reťazcom poznáš?

Length, indexovanie, Contains, IndexOf, Substring, Replace, Split, Join, ToUpper, Trim, porovnanie, spájanie (+, StringBuilder).

Ako vzniká pole v pamäti?

Pri new sa na halde vyhradí súvislý blok pre n prvkov rovnakej veľkosti, prvky dostanú predvolenú hodnotu; premenná drží odkaz. Adresa prvku = začiatok + index · veľkosť prvku.

Aký je rozdiel medzi poľom a kolekciou List?

Pole má pevnú veľkosť, List rastie podľa potreby a má metódy Add, Remove, Insert.

Vysvetli FIFO a LIFO.

FIFO – front (Queue): prvý vložený ide prvý von. LIFO – zásobník (Stack): posledný vložený ide prvý von.

Kedy použiješ Dictionary?

Keď potrebuješ rýchlo nájsť hodnotu podľa kľúča (MAC → port, meno → IP).

Čo je Dual Stack?

Súčasná prevádzka IPv4 a IPv6 na tom istom zariadení a rozhraní – postupný prechod na IPv6.