přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Pole

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.

Nahoru

Příspěvky

Programovanie v jazyku C++: Pole
Livan 23. 09. 2016, 12:41:42
Odpovědět  Odkaz 
Teda nechcem rýpať ale tento článok obsahuje veľa slovenčinárskych chýb. Nesprávne tvary slov, pomiešané dĺžne a pod. Predpokladám, že vznikli iba z nepozornosti. Prosím, než uverejníte nejaký článok, prečítajte si to po sebe, aby sa podobnému predišlo, pôsobí to strašne.
Eduard Boldižár Re: Programovanie v jazyku C++: Pole
Eduard Boldižár 23. 09. 2016, 12:55:45
Odpovědět  Odkaz 
Vďaka za spätnú väzbu, snažím sa písať čo najlepšie ale nie všetko sa dá postriehnuť. Imúnny voči gramatickým chybám nie som, avšak budem sa snažiť aj to zlepšiť.
Programovanie v jazyku C++: Pole
PatrikR 23. 09. 2016, 13:27:15
Odpovědět  Odkaz 
Ze kterého roku jsou skripta nebo kniha z které to bylo opsané?
Petr Valach Re: Programovanie v jazyku C++: Pole
Petr Valach 23. 09. 2016, 14:44:13
Odpovědět  Odkaz 
2030. Redaktoři LinuxEXPRES a ExoSpace - a Eda je oboje v jednom - totiž vidí do budoucna :)
Re: Re: Programovanie v jazyku C++: Pole
null 23. 09. 2016, 15:17:02
Odpovědět  Odkaz 
To je stanovisko linuxexpress.cz k informacím o kvalitě článku? Kouzelné.
Re: Re: Programovanie v jazyku C++: Pole
null 23. 09. 2016, 15:29:45
Odpovědět  Odkaz 
Já už vím co to je, stačí kouknout na Váš profil:
https://www.linuxexpres.cz/modules/profile/userinfo.php?uid=3877

To je ta "podpora", jak sám píšete ve vlastní profilaci: "Redakce ExoSpace.cz podporuje redakce LinuxEXPRES.cz a OpenOffice.cz a jejich aktivity."

To je tedy ono, už rozumím ....
... tak podporujte dál, myslím že se to časem podá ...

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz