Polia
Pole v jazyku C++ je dátová forma, ktorá obsahuje hodnoty rovnakého typu. Napríklad 10 premenných typu float či 20 premenných typu double.
Pole má jednotlivé prvky, ktoré sú do pamäte počítača ukladané za sebou. V každom prvku môžeme uložiť jednu hodnotu. Hovoríme, že sú uložené jednorozmerné. I pri dvojrozmerných či trojrozmerných poliach je uloženie v pamätí jednorozmerné. Rozdiel je v prístupe. O tom až v ďalších dielách. Poďme teraz pochopiť jednorozmerné pole.
Čo by mala deklarácia polí obsahovať? Tri zásady:
- typ hodnôt, ktoré uložíme do prvkov
- meno poľa
- počet prvkov, do ktorých uložíme jednotlivé hodnoty
Deklarácia poľa je takáto:
int planets[8];
kde int je typ hodnôt, planets je meno daného pola a [8] počet prvkov poľa.
Ak raz nastavíme veľkosť poľa (počet prvkov), tá sa behom vykonávania programu nemení. Tento problém sa dá obísť ale o tom neskôr.
Pole ja zároveň odvodeným typom. Odvodené typy sú založené na ďalších typov. V praxi to znamená, že nemôžete odvodený typ definovať bez príslušností k nejakému typu. To znamená, že pole nemôžme definovať bez typu hodnôt, ktoré budú uložené v príslušných prvkov poľa.
Pitváme polia
K prvkom poľa môžeme pristupovať samostatne. Môžme vypísať či meniť hodnotu v prvkoch. Čo je ale dôležité si zapamätať, je že číslujeme od 0! Je to veľmi dôležitý poznatok, pretože ďalej zistíte jeden nepríjemný neduh polí a to presiahnutie v mimo vašej vyhradenej pamäte.
A potom sa dejú zvláštne udalostí a pády programu. To je veľká nevýhoda oproti napríklad Jave, ktorá má automatickú kontrolu presiahnutia pamäte. V C++ má to na starostí programátor. To bude asi jedná z veci, ktorá z C++ robí menej obľúbený programovací jazyk medzi programátormi. To ale neznamená, že je menej dôležitý.
Poznámka šéfredaktora: Pokud je potřeba automaticky kontrolovat meze, lze místo obyčejného, zde popsaného pole použít obdobný datový typ patřící mezi tzv. kontejnery, které jsou součástí standardní knihovny C++. K tomu ale seriál dospěje později.
Poďme sa pozrieť na dve programy, kde si vyskúšame deklarácie polí i prácu s nimi.
1. program: Pracnejší spôsob priradenia hodnôt do prvkov
#include <iostream> //hlavičkový súbor using namespace std; //priestor mien int main() //hlavná funkcia main { int pole[5]; //deklarácia poľa pole[0] = 1; //priradenie hodnoty k prvému prvku, ktorý je označený ako nultý prvok v polí pole[1] = 44; pole[2] = 77; pole[3] = 112; pole[4] = 235; cout << "Prvy prvok: "<<pole[0]<<"\n"; //výpis na obrazovku cout << "Druhy prvok: "<<pole[1]<<"\n"; cout << "Treti prvok: "<<pole[2]<<"\n"; cout << "Stvrty prvok: "<<pole[3]<<"\n"; cout << "Piaty prvok: "<<pole[4]<<"\n"; return 0; //koniec programu }
Výsledok:
Prvy prvok: 1 Druhy prvok: 44 Treti prvok: 77 Stvrty prvok: 112 Piaty prvok: 235
2. program: Elegantnejší spôsob priradenia hodnôt do prvkov
#include <iostream> using namespace std; int main() { int pole[5] = {1, 44, 77, 112, 235}; //deklarácia a zároveň priradenie cout << "Prvy prvok: "<<pole[0]<<"\n"; cout << "Druhy prvok: "<<pole[1]<<"\n"; cout << "Treti prvok: "<<pole[2]<<"\n"; cout << "Stvrty prvok: "<<pole[3]<<"\n"; cout << "Piaty prvok: "<<pole[4]<<"\n"; return 0; }
Výsledok:
Prvy prvok: 1 Druhy prvok: 44 Treti prvok: 77 Stvrty prvok: 112 Piaty prvok: 235
Rekapitulácia
Zopakujme, čo je prípustné a čo nie pri poliach.
int pocet[5] = 5; //prípustné priradenie hodnoty k prvku poľa int cisla[5]; //prípustná deklarácia poľa o veľkostí 5 prvkov, v ktorých budú hodnoty typu int; int cisla[3] = {1, 5, 2, 4}; //neprípustná deklarácia a zároveň priradenie, máme viac hodnôt ako je veľkosť poľa int cisla[3] = {5, 2}; //Prípustná deklarácia a zároveň priradenie, 3 prvok je prázdny a automaticky pri výpise ukáže 0.
Ukážeme si na to program.
3. program: Ak je pole väčšie ako je počet priradených hodnôt
#include <iostream> using namespace std; int main() { int pole[5] = {1, 44, 77, 112}; cout << "Prvy prvok: "<<pole[0]<<"\n"; cout << "Druhy prvok: "<<pole[1]<<"\n"; cout << "Treti prvok: "<<pole[2]<<"\n"; cout << "Stvrty prvok: "<<pole[3]<<"\n"; cout << "Piaty prvok: "<<pole[4]<<"\n"; return 0; }
Výsledok:
Prvy prvok: 1 Druhy prvok: 44 Treti prvok: 77 Stvrty prvok: 112 Piaty prvok: 0
4. program: Skúsme prekročiť počet hodnôt
#include <iostream> using namespace std; int main() { int pole[5] = {1, 44, 77, 112, 235, 666}; cout << "Prvy prvok: "<<pole[0]<<"\n"; cout << "Druhy prvok: "<<pole[1]<<"\n"; cout << "Treti prvok: "<<pole[2]<<"\n"; cout << "Stvrty prvok: "<<pole[3]<<"\n"; cout << "Piaty prvok: "<<pole[4]<<"\n"; cout << "Siesty prvok: "<<pole[5]<<"\n"; return 0; }
Výsledok: Asi tušíte, čo bude výsledkom.
ahoj.cpp:5:40: error: too many initializers for ‘int [5]’ int pole[5] = {1, 44, 77, 112, 235, 666};
Alebo vám to skompiluje, ale po spustení bude viditeľná hláška o presiahnutí pamäte. Fakt to zavisí od toho, ako mate nastavené všelijaké varovania okrem základných vlastností kompilátora.