Pascal – #7 Pole

Dnes si vysvětlíme problematiku polí, v programovacím jazyce Pascal. Pole se používají v každém jazyce a je to další z nezbytných součástí programování. Řekněme si tedy co to je. Jedná se o setříděnou množinu prvků stejného datového typu. Teď tedy co si pod touto definicí představit. Do pole můžeme přehledně ukládat data o stejném datovém typu. A proč přehledně? Protože každá informace uložená v poli má svůj index. Index chápej jako určitou ordinální hodnotu většinou celé číslo pod, kterým k datům přistupujeme

Index Hodnoty
1 28
2 59
3 7
4 88
5 22

 

Takhle si lze představit dvojrozměrné pole. Jako tabulku, kde první sloupec jsou indexy a v druhém jsou uložená libovolná data.

Techniku polí využijeme například v příkladu, kdy bychom chtěli uložit 10 čísel. Až do dnešní lekce bychom museli deklarovat deset proměnných a čísla ukládat jednotlivě. Teď však můžeme uložit 10 čísel do jednoho pole s velikosti 10. Z toho vyplývá, že i Indexů bude 10. Úplně laicky řečeno, pole v sobě  ukrývá 10 proměnných.

Obecná syntaxe: deklarace pole

Var pole_cisel : array [1..10] of byte;

Vysvětlení kodu. Tady se jedná o deklaraci, jak naznačuje příkaz Var, za ním následuje název, to zatím není nic nového za dvojtečkou, však uvádíme, že se jedná o pole (klíčové slovo array) hned za tímto musíme uvést velikost, chcete-li počet indexu, který je uveden intervalem. Většinou se udává od 1 do námi požadované velikosti, jako poslední dáme programu vědět, jaká data bude do pole ukládat, v tomto případě of byte.

Obecná syntaxe: uložení

Pole_cisel[1]:=28;
Pole_cisel[2]:=59;

Je třeba si uvědomit, že jakmile chceme pracovat s polem, musíme vždy uvést index. Asi lépe si to představíme, pokud budeme uvažovat pole jako deset proměnných v jedné a ve chvíli kdy chceme cokoliv ukládat nebo číst musíme si „vytáhnout“ tu jednu proměnnou, se kterou chceme pracovat, pomoci indexu. Zde vidíme ukázku uložení čísla do pole. Indexy se píšou v hranatých závorkách. Jakmile uvedeme index, stává se z pole svým způsobem samostatná proměnná, se kterou pracujeme tak, jak jsme již zvyklí.

Obecná syntaxe: vypsání prvku

Writeln(pole_cisel[1]);

Pojďme si ukázat praktický příklad zápisu do pole pomocí cyklu. Příklad bude znít: Zapište do pole 10 čísel, program se následně zeptá, poté uživatel zadá index od 1-10 a vypíše se příslušné číslo, které je pod tímto indexem uložené v poli.

program pole1;
uses crt;
var pole_cisel : array [1..10] of byte;
var i : byte;
var pozice: byte;
begin
      clrscr;
      writeln('zadej 10 čísel');
      for i:=1 to 10 do
      begin
            readln(pole_cisel[i]);
      end;
      writeln('zadej index který chces z pole vypsat');
      readln(pozice);
      writeln(pole_cisel[pozice]);
      repeat until keypressed;
end.

Vysvětlení kódu

zde je třeba si uvědomit, že index pole muže být reprezentován proměnnou stejně tak dobře jako konstantou (číslem), tak jak jsme si to ukazovali ze začátku lekce. V našem případě uvádíme na místě indexu proměnnou i, která v tomto příkladu zastává také funkci počítadla cyklu. Z logiky věci tedy plyne následující. Víme, že počítadlo se při každém průchodu navýší o hodnotu 1. Z toho vyplývá, že při prvním průchodu cyklu bude námi popisovaný řádek vypadat takto:

Program narazí na příkaz readln a ví, že bude načítat data od uživatele, jako parametr požaduje, kam je bude načítat, zde jsme mu nabídli pole s indexem i, který při prvním průchodu má hodnotu 1. Takže na první pozici se zapíšou vstupní data a program pokračuje dál. Skočí na začátek cyklu, navýší počítadlo čili proměnnou i o hodnotu jedna a pokračuje dál vykonávat příkazy, zase narazí na readln a bude požadovat místo kam data uloží, zde se mu nabídne zase pole ale s indexem i ale je důležité si uvědomit, že v této chvíli je již index reprezentován číslem 2. Pokud pořád přemýšlíme o poli jako o 10 proměnných najednou tak si uvědomíme, že nyní již požadujeme v pořadí druhou proměnnou a do ní ukládáme.

Tento příklad je možná trošičku složitější na pochopení nicméně v podstatě se jedná o využití dvou věcí. Za prvé, možnost index reprezentovat proměnnou. Za druhé, využití počítadla do role indexu (zda si nejste jistí funkci počítadla, přečtěte si lekci 5 tam je to probíráno). Pokud si uvědomíme tyto dvě věci samostatně, neměl by být problém představit si to v příkladu.

Po této lekci byste měli být schopni odpovědět na tyto otázky:

  1. Jak vypadá pole, či jak je možné si pole představit
  2. Deklarace polí
  3. Jak přistupujeme (pracujeme) s jednotlivými záznamy v poli
  4. Co je to index, k čemu slouží a čím může být reprezentován

Shrnutí:

Při práci s poli je důležité uvědomit si, s jakým indexem momentálně program pracuje. I přestože v této lekci jsme pracovali s poměrně malým polem velikosti 10, je důležité mít na paměti, že můžeme použít i mnohem větších polí. Nejčastější chyby pak bývají právě s deklarací příliš malého rozsahu polí a program poté může pracovat nestandardně, proto se všeobecně doporučuje deklarovat pole s jistou rezervou.

Víc už si v této lekci neukážeme, příště se podíváme na cykly ukončené podmínkami. Pokud Vám v této lekci nebylo něco jasného, ptejte se v komentářích.

Pascal – #5 Cykly se známým počtem opakování

Dnes se naučíme psát cykly v jazyku pascal. Na úvod si řekněme, co to ty cykly jsou. Cyklus nám umožní opakovat určitou část kódu libovolně dlouho. Dnes si řekneme o tzv. cyklech, u kterých známe počet opakování.

Cykly: Obecná synataxe

FOR i:=zacatek TO konec DO
 BEGIN
 Příkaz, který se bude opakovat;
 Příkaz, který se bude opakovat;; 
END;

Teď si to pojďme rozebrat. For je klíčové slovo, které říká, že se jedná o cyklus. Proměnná ‚i‘ tady má roli počítadla. A na začátku cyklu, je nastavena na hodnotu, která se bude při jednotlivých průchodech cyklu navyšovat až do té doby, než nabyde hodnotu uloženou v proměnné konec. Z tohoto kódu je tedy možné okamžitě vyčíst, kolikrát se bude opakovat, protože v prvním řádku v podstatě vidíme interval. Většinou se udává od 1.

Příklad

Aby nám to bylo jasnější, pojďme si to ukázat na jednoduchém příkladu, který nám ukáže, jak funguje počítadlo a co se vlastně v průběhu toho cyklu stane.

program cykly;
uses crt;
var i:integer;
 
begin
 clrscr;
  for i:=1 to 10 do
   begin
      writeln(i);
   end
 repeat until keypressed;
end.

Rozebrání kódu

Jak je již hned zřejmé ze zadání můžeme vidět, že daný cyklus se bude opakovat 10krát jelikož jsme zadali interval od 1 do 10. V příkazové části dá-li se to tak nazvat poté provádíme příkaz Writeln(i), tedy vypisujeme počítadlo. Tento program v podstatě nic nedělá, pouze vypisuje. Hodnota počítadla se zvedá automaticky při každém průchodu cyklu. V praxi to tedy vypadá takto.

Program narazí na slovo For a tím zjistí, že se jedná o cyklus do proměnné i (počítadla) si uloží spodní hodnotu intervalu, a postupuje na další řádek, kde vykoná příslušné příkazy v našem případě, vypíše proměnnou i. Jakmile dojde na konec, vrátí se zase zpět a proměnná i se navýší o hodnotu jedna, porovná ji s koncovou hodnotou intervalu a pokud se nerovná koncové hodnotě, jde znova na příkazovou část cyklu. Toto se opakuje tak dlouho, dokud se hodnota počítadla nerovná koncové hodnotě v té chvíli program opouští cyklus a věnuje se ostatnímu kódu, v našem případě repeat until keypressed; tedy čeká na vstup z klávesnice.

V dalším příkladu si uživatel sám zadá počet opakování. Jedna se tedy pouze o modifikaci předchozího příkladu.

Příklad 2

program cykly2;
uses crt;
var i : integer;
var pocatek : integer;
var konec : integer;
begin
  clrscr;
  write('Zadej cislo pocatek: ');
  readln(pocatek);
  write('Zadej cislo konec: ');
  readln(konec);
    for i:=pocatek to konec do 
    begin
      writeln(i);
    end;
repeat until keypressed;    
end.

V tomto příkladu vidíte, že počet opakování není zadán konstantami ale proměnnými počátek a konec, do kterých uživatel sám zadá čísla a rozhodne si tak počet opakování.

Další možnosti zápisů

Pojďme si ještě ukázat další možnosti zápisu. Například poslední příklad by šel zapsat takto:

for i:=1 to 10 do writeln(i);

Vidíme tedy, že zde chybí struktura begin – end;  sami si zvolte, co pro vás bude lepší. Ale doporučuji používat více řádkovou strukturu z jednoho prostého důvodu ve chvíli, kdy přijdou složitější cykly a bude potřeba napsat více příkazu, bude to mnohem přehlednější. Tento jedno řádkový zápis tedy slouží pro jednoduché příklady.

Kontrolní otázky

Po této lekci by jste měli být schopni zcela s přehledem odpovědět na tyto otázky.

  1. Co je to cyklus a k čemu slouží.
  2. Co je to počítadlo a k čemu slouží.
  3. Jak vypadá obecná syntaxe.

Kontrolní příklad

Napište příklad, který se uživatele zeptá na číslo (počet opakování) a na zprávu. Danou zprávu vypíše píše tolikrát kolik zadal uživatel opakování př. uživatel zadá číslo 4 zpráva se vypíše 4krát..

Závěr

To je z dnešní lekce vše příště se podíváme na podmínky. Pokud Vám není něco jasné ptejte se přímo zde v komentářích.