Home >> C++ návod >> Pole

Pole

Doposud jsme se v tomto tutoriálu setkávali pouze s jednoduchými proměnnými, které nám sloužili k tomu, aby uchovávali jednu určitou hodnotu popřípadě řetězec. V této lekci si ukážeme, že je možné vytvořit proměnnou, která je schopná uchovávat více hodnot najednou (např.: 30). V takovém případě se však již nebude jednat o jednoduchou proměnnou, ale o proměnnou strukturovanou, konkrétně typu pole.

Co je to pole?

Jak už bylo řečeno, pole je tzv. strukturovanou proměnnou, která se používá pro zpracování více hodnot stejného typu. V praxi to znamená, že pokud chceme uchovat například 10 hodnot typu int, nemusíme deklarovat 10 různých proměnných, ale vytvoříme jednu proměnnou typu pole s rozměrem 10.

Tím v operační paměti vznikne pomyslný "chlívek", který je rozdělen na 10 částí. Každá z částí má svůj index, což je vlastně identifikační číslo. Tyto čísla jsou udávány od 0 po n. V případě pole s rozměrem 10 budou jedntolivé části očíslovány od 0 pod 9.

Deklarace pole

Při deklaraci jednoduché proměnné vždy uvádíme datový typ a identifikátor. Pole deklarujeme stejným způsobem, ovšem nově je třeba určit ještě rozměr pole. Ten se udává bezprostředně za identifikátor do hranatých závorek. Deklarace tedy vypadá následovně:

datový_typ identifikátor[rozměr_pole];

Například:

int adam[5];

Tímto zápisem deklarujeme pole adam, do kterého lze uložit 5 hodnot typu int. Nasledující obrázek demonstruje, co vznikne v operační paměti:

pole

Každý "chlíveček" reprezentuje místo pro uložení hodnoty typu int. V poli o rozměru 5 budeme mít pochopitelně takových "chlívečků" rovněž 5. Každý je označen indexem, který slouží jako jejich identifikátor. V tomto případě budou jednotlivé "chlívečky" pole označeny celými čísly od 0 po 4.

Operace s hodnotami pole

Nyní když už víme, jak pole deklarovat, můžeme přistoupit k uložení hodnot do pole. Opět se vráťme k jednoduchým proměnným. V takových případech jsme promměnou naplnili hodnotou buď přímo při deklaraci nebo později pomocí přiřazovacího příkazu. Například:

int x = 5;
int y;
y = 10;

U polí máme stejné možnosti. Podívejme se nejprve na případ, kdy pole naplníme hodnotami již při deklaraci:

int adam[5] = {10, 20, 30, 40, 50};

Tímto zápisem dosáhneme toho, že nově vzniklé pole je již vyplněno hodnotami. V operační paměti nyní nastane tato situace:

pole Pozor! Počet hodnot ve složených závorkách nesmí být větší než rozměr pole.

Tento způsob deklarace pole nám umožňuje nechat hranaté závorky prázdné. Rozměrem pole pak bude počet hodnot ve složených závorkách. Například:

int adam[] = {10, 20, 30, 40, 50, 60, 70, 80};

Rozměrem tohoto pole je 8, jelikož ve složených závorkách je uvedeno 8 hodnot.

Druhou možností jak naplnit pole hodnotami je použití přiřazovacího příkazu. U jednoduchých proměnných takový příkaz napíšeme ve tvaru:

x = 10;

U pole však tento zápis použít nemůžeme. Nyní je potřeba si uvědomit následující skutečnost:

pole

Jak můžete vidět na obrázku, každý "chlíveček" je reprezentován identifikátorem polea svým indexem. Pokud tedy budeme chtít například do "chlívečku"adam[3] přiřadit hodnotu 77, příkaz bude následující:

adam[3] = 77;

Dále je potřeba mít na vědomí fakt, že pole o rozměru 5 má 5 prvků, kde první je označen inedexem 0 a pátý indexem 4.

Ke každé hodnotě pole tedy přistupujeme zvlášť, jakoby se jednalo o samostatné proměnné. Práci si však můžeme výrazně ulehčit pomocí cyklů. Příklad:

#include <iostream>
using namespace std;

int adam[5] = {145, 678, 56, 543, 7};
int x,poradi;

int main(void){
poradi = 1;

for (x=0;x<5;x++){
  cout << poradi << ". cislo je: " << adam[x] << endl;
  poradi++;
  }

return 0;
}

Výstup programu:

1.cislo je: 145
2.cislo je: 678
3.cislo je: 56
4.cislo je: 543
5.cislo je: 7

V programu jsme nejprve deklarovali pole adam o rozměru 5 a vyplnili jej číselnými hodnotami. Následně jsme tyto hodnoty pomocí cyklu postupně vypsali na obrazovku.

Vícerozměrné pole

Pole adam, se kterým jsme pracovali v předchozích ukázkách, bylo tzv. jednorozměrným polem. Nyní postoupíme dál a ukážeme si pole, které má rozměrů více. Bohatě si vystačíme s dvourozměrným polem, kterému se také říká "pole polí". Vytvořme tedy následující pole:

int pepe[3][5];

Touto deklarací v operační paměti vznikne:

pole

Oproti jednorozměrnému poli nyní vznikne n * m "chlívečků", kde n je první rozměr a m je druhý rozměr. Rozdíl je také v indexech. Nyní má každý "chlíveček"2 indexy. Například:

pole

Pokud Vám hlava více rozměrů nepobírá, nemusíte zoufat. Toto dvourozměrné pole lze jednoduše nahradit jednorozměrným polem:

int pepe[15];

Tím bych chtěl poukázat na to, že vícerozměrné pole jsou něčím bez čeho se snadno obejdeme. Pro ty které vícerozměrné pole však zajímají si ukážeme následující příklad:

#include <iostream>
using namespace std;

int pepe[3][5];
int cislo,x,y,poradi;

int main(void)
{
poradi = 1;

for (x = 0; x < 3; x++)
 for (y = 0; y < 5; y++){
  cout << "Zadej " << poradi << ". cislo: ";
  cin >> cislo;
  pepe[x][y] = cislo;
  poradi++;
  }
return 0;
}

V této ukázce tentokrát budeme hodnoty do pole vkládat. Opět si práci ulehčíme pomocí cyklů. V tomto případě však budeme potřebovat dva - jeden pro každý rozměr pole. Rozměry pole jsou 3 a 5, z toho vyplývá, že rozsah indexů bude od pepe[0][0] po pepe[2][4], viz předchozí obrázek.

To zda nám program funguje, snadno ověříme tím, že se pokusíme vypsat nějakou hodnotu. Například:

cout << pepe[0][2];

Tento příkaz pochopitelně bude ve zdrojovém kódu až za oba cykly. Indexy [0][2] značí, že se jedná o třetí hodnotu. Vypsat by se tedy měla stejná hodnota, kterou jsme zadali jako třetí.

Pole jako parametr funkce

Nakonec si v této lekci ukážeme, jak použít pole jako parametr funkce. Nebudeme dlouho chodit kolem horké kaše a rovnou se podíváme na následující příklad:

#include <iostream>
using namespace std;

void vypis_pole(int pole[], int rozmer) {
  for (int x = 0; x < rozmer; x++){
  cout << pole[x] << ", ";}
  cout << endl;
}

int main ()
{
int adam[8] = {10, 20, 30, 40, 50, 60, 70, 80};
int pepe[4] = {1, 2, 3, 4};

vypis_pole(adam,8);
vypis_pole(pepe,4);

}

V příkladě jsme si vytvořili funkci vypis_pole, která vypíše hodnoty pole. Co nás však hlavně bude zajímat jsou parametry této funkce. Prvním parametrem je int pole[]. Tento parametr bude akceptovat všechny pole typu int, bezohledu na jejich rozměr. K tomu aby jsem však mohli použít v těle funkce cyklus potřebujeme konečnou hodnotu, proto má funkce ještě jeden parametr rozmer, který nám tuto hodnotu poskytne.

V hlavní funkci programu jsme deklarovali pole adam a pepe, které jsme zároveň naplnili hodnotami. Následně jsme nechali tyto hodnoty vypsat pomocí funkce vypis_pole. Při volání funkce jejíž paramatrem je pole uvádíme pouze identifikátor tohoto pole.

Výstup programu:

10, 20, 30, 40, 50, 60, 70, 80
1, 2, 3, 4
C++ Návod
Úvod do C++
Volba programu
Struktura programu
Proměnné
Konstanty
Operátory
Vstup a výstup
Řídící struktury
Funkce - 1.část
Funkce - 2.část
Pole
Práce s textovými řetězci
Ukazatele - 1.část
Ukazatele - 2.část
Dynamické proměnné
Datové struktury
©2008 - 2011 Klikzone.cz
Ráj aut - inzerce nových i ojetých aut