Linux E X P R E S

Facebook

Programovanie v jazyku C++: Pole

cplusplus.png

V tomto článku sa naučíte pracovať s poliami. Použiteľnosť polí je obrovská. Takže poďme na to.


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:

  1. typ hodnôt, ktoré uložíme do prvkov
  2. meno poľa
  3. 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.

Diskuze (6) Nahoru