More actions
Vytvorená stránka „Ako používať polia v C pre definíciu množín a reťazcov (množín znakov)? {{Pojmová mapa}} == Polia == Pole v jazyku C je usporiadanou sekvenciou údajov toho istého dátového typu, kde jednotlivé hodnoty sú prístupné pomocou indexu, v rámci jednej premennej. Polia nám umožňujú pracovať s kódom efektívne, pretože ich vieme automaticky napĺňať a prehľadávať pomocou cyklov. Zobratie prvku na určitej pozícií je rýchle,…“ |
Bez shrnutí editace |
||
Riadok 80: | Riadok 80: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight>{{Téma|Oblast=Kategória:Programovací jazyk C|Poradie=40}} | ||
[[Kategória:Programovací jazyk C]] | [[Kategória:Programovací jazyk C]] |
Aktuálna revízia z 19:12, 2. november 2024
Ako používať polia v C pre definíciu množín a reťazcov (množín znakov)?
Polia
Pole v jazyku C je usporiadanou sekvenciou údajov toho istého dátového typu, kde jednotlivé hodnoty sú prístupné pomocou indexu, v rámci jednej premennej. Polia nám umožňujú pracovať s kódom efektívne, pretože ich vieme automaticky napĺňať a prehľadávať pomocou cyklov. Zobratie prvku na určitej pozícií je rýchle, pretože údaje sú uložené v pamäti sekvenčne za sebou - ak poznáme dátový typ (respektíve jeho dĺžku), program vie veľmi rýchlo vyhľadať v pamäti miesto (index) kde je daná hodnota poľa uložená.
Definícia
Definícia poľa v C je priamočiara:
int cisla[10]; // vytvorí pole pre 10 prvkov dátového typu "int" (celé čísla)
Naľavo je identifikátor dátového typu. Nasleduje identifikátor (názov) premennej, za ktorým sa ihneď nachádza hranatá zátvorka. Vnútri hranatých zátvoriek je počet prvkov množiny - určuje, aké veľké miesto bude pre toto pole vyhradené v pamäti. Táto dĺžka poľa je pevne definovaná pri deklarácií premennej a počas behu programu ju nie je možné zmeniť. Indexy polí začínajú od nuly, to znamená že posledný prvok poľa s dĺžkou 10 bude deviaty prvok (s indexom rovným 9). Hodnotu na určitom indexe v poli môžeme zmeniť nasledovným zápisom:
int cisla[5]; // definujeme prázdne pole s miestom pre 5 prvkov
cisla[0] = 1; // číslu na prvej pozícií (index 0) priradíme hodnotu 1
cisla[4] = 5; // číslu na poslednej pozícií (index 4) priradíme hodnotu 5
cislo[5] = 6; // chyba: toto presahuje maximálnu dĺžku poľa!
Ak by sme sa predsa len pokúsili priradiť prvok na šiestej pozícií (mimo poľa), kompilátor nás upozorní že to nemôžme robiť a náš program sa nespustí:

Samozrejme, odstránenie riadku a[6] = 6;
problém vyrieši a všetci budú spokojní.
Definícia s počiatočnými hodnotami
Pole je možné definovať aj tak, že ho ihneď naplníme počiatočnými hodnotami. Používame pri tom klasický množinový zápis. Napríklad, nasledovná deklarácia naplní pole ihneď po jeho vytvorení párnymi číslami od 0 po 10:
int a[5] = {2, 4, 6, 8, 10};
Môžeme si taktiež uľahčiť život: keďže poznáme všetky prvky poľa, kompilátor vie automaticky zistiť dĺžku poľa, ktorú do hranatých zátvoriek už písať nemusíme. Nasledujúci zápis je zhodný so zápisom vyššie:
int a[] = {2, 4, 6, 8, 10};
Pozor, toto platí iba ak definujeme poľu ihneď počiatočnú hodnotu! Vo všetkých ostatných prípadoch musíme špecifikovať dĺžku poľa v hranatých zátvorkách. Ale vo všeobecnosti platí, že by sme pri definícií počiatočných hodnôt poľa nemali špecifikovať aj dĺžku - je ľahké sa pomýliť a špecifikovať inú dĺžku ako počet hodnôt, ktorými pole napĺňame, čo nám spôsobí v budúcnosti iba problémy pri údržbe alebo prípadnej úprave existujúceho kódu.
Duplicity
Napriek skutočnosti, že polia sa podobajú na matematické množiny, môžu obsahovať aj duplicitné hodnoty (napr.: viackrát to isté číslo). Nasledovná definícia je preto úplne korektná, a pole bude obsahovať naozaj iba nuly:
int a[] = {0, 0, 0, 0, 0};
Výpis
Polia môžeme vypísať postupne po prvkoch podľa ich indexu, napr.:
#include <stdio.h>
int main() {
int a[] = {2, 4, 6, 8, 10, 4, 4}; // deklarácia poľa
printf("%d\n", a[0]); // 2
printf("%d\n", a[1]); // 4
printf("%d\n", a[2]); // 6
printf("%d\n", a[3]); // 8
printf("%d\n", a[4]); // 10
printf("%d\n", a[5]); // 4
printf("%d\n", a[6]); // 4
return 0;
}
Pole sa dá vypísať oveľa jednoduchšie pomocou cyklov., o ktorých si povieme neskôr.
Reťazce
Reťazce v C sú implementované trochu... špecificky. Namiesto toho aby mali vlastný údajový typ sa držíme faktu že C je jazyk pomerne nízkej úrovne, a teda aj implementácia niečoho triviálneho ako je reťazec sa trochu komplikuje. Reťazce v C využívajú už existujúci typ char
(znak), ktoré sa uložia do poľa a potom sa nimi prechádza (pretože reťazce nie sú v podstate nič iné ako iba pole znakov).
Definícia jednoduchého reťazca by mohla vyzerať nasledovne:
#include <stdio.h>
int main() {
char ahoj[4];
ahoj[0] = 'a';
ahoj[1] = 'h';
ahoj[2] = 'o';
ahoj[3] = 'j';
printf("%s\n", ahoj); // použijeme %s pre výpis znakov naraz, ako klasický reťazec. Uvidíme: "ahoj"
return 0;
}
Samozrejme, táto definícia je trochu prehnaná - nikto takto nedefinuje reťazce! Ľudia, ktorí vytvorili C v tomto smere programátorom život našťastie aspoň pre tentokrát uľahčili a naša definícia sa teda stáva jednoduchšou (ale princíp "poľa znakov" zostáva úplne rovnaký):
#include <stdio.h>
int main() {
char ahoj[] = "ahoj";
printf("%s\n", ahoj);
return 0;
}