4. Algoritmy s poľom (v programovacom jazyku Pascal) (2.verzia)

• Prečo a v akých situáciách používame polia? Uveďte motivačné príklady, ktoré vedú k použitiu polí.
• Vysvetlite princíp práce s prvkami poľa (index, prechádzanie prvkov poľa pomocou cyklu).
• Ilustrujte použitie poľa na konkrétnom algoritme.

Pri riešení úloh, v ktorých sa pracuje s malým množstvom údajov, si vystačíme s jednoduchými premennými, ktorým dávame názvy podľa ich použitia (meno = identifikátor) – MIN, MAX, A, B, POMOC, atď. Jednoduché premenné môžu byť rôznych typov:

  • celočíselné – INTEGER
  • reálne – REAL
  • logické – BOOLEAN
  • znakové – CHAR
  • znakové reťazce – STRING

Každá jednoduchá premenná môže v danom čase obsahovať len jeden údaj svojho typu, ktorý zmeníme priraďovacím príkazom.

Úlohy, v ktorých potrebujeme pracovať s väčšou skupinou premenných si vyžadujú špeciálnu premennú, tzv. štruktúrovaný typ pole.

Polia môžu byť :

  • jednorozmerné – tie si môžeme predstaviť ako tabuľku s políčkami s poradovým číslom tzv. indexom, pričom každé políčko si pamätá jeden údaj daného typu:

prvky poľa majú rovnaké názvy, líšia sa svojím indexom = poradím v poli, napr. A[1], A[2], ……..A[100]…..

  • dvojrozmerné – tie si môžeme predstaviť ako tabuľku s riadkami a stĺpcami, znovu si každé políčko pamätá jeden údaj daného typu:

Prvky poľa sa označujú napr. B[1,1], B[1,2],……B[1,100], B[2,1], B[2,2],……B[2,100],………B[100,1], B[100,2],……B[100,100]

  • viacrozmerné

 

Indexom prvku poľa môže byť konštanta, premenná alebo aj aritmetický výraz.

Dávame pozor, aby index poľa nepresiahol deklarovaný rozsah poľa.

Príklad č. 1:  Vypíšte prvých 40 členov Fibonacciho postupnosti.

Riešenie: Pokiaľ by sme potrebovali len čisto vypísať prvých 40 členov F. postupnosti, tak by sme si poradili aj s jednoduchými premennými – A). Úloha by sa však skomplikovala, keby sme po výpise 40 členov potrebovali kedykoľvek zistiť napr. 35.člen. Znovu by sme museli počítať od začiatku. Ak použijeme pole a hodnoty jednotlivých členov si ukladáme podľa poradia – B), kedykoľvek po určení 40 členov môžeme pracovať aj s členmi s nižším poradovým číslom.

A)                    var

F1:=1; F2:=1;

for I:= 3 to 40 do

begin

F3:=F1+F2;

F1:=F2;

F2:=F3;

end;

Image1.Canvas.TextOut(20,20 ‘F(40)=‘ +IntToStr(F(40)));

B)                     var

F: array [1..40] of Integer;

F[1]:=1;F[2]:=1;

for I:=3 to 40 do

begin

F[I]:=F[I-2]+F[I-1];

end;

Image1.Canvas.TextOut(20,20 ‘F(40)=‘ +IntToStr(F(40)));

Príklad č. 2: Vytvorte program, ktorý vytvorí 200 – prvkové pole počtov obyvateľov nejakej obce. Pole sa zaplní náhodnými hodnotami (počty obyvateľov domov) a vypíše sa celkový počet obyvateľov.

Riešenie: deklarujeme pole Dom s 200 prvkami a naplníme pole náhodnými hodnotami:

var

Dom: array [1..200] of Integer;

I, SUCET: Integer;

begin

for I:= 1 to 200 do

Dom[I] := Random(9);

potom urobíme súčet prvkov poľa:

SUCET:= 0;

for I:= 1 to 200 do

SUCET:= SUCET + Dom[I];

Image1.Canvas.TextOut(20,20 ‘Počet obyvateľov obce=‘ +IntToStr(SUCET));

end;

Zadanie: Napíšte program, ktorý bude zaznačovať u žiakov v triede, koľkokrát sa medzi nimi vyskytli ktoré záujmy. Program najprv vypíše legendu:

1 = známky, 2 = modelár, 3 = hudba, 4 = tanec, 5 = šport, 6 = kniha, 7 = domáce zviera

a očakáva zadávanie čísel od 1 po 7. Pritom si eviduje počet výskytov týchto čísel. Na záver program vypíše, ktorý koníček bol najčastejší a ktorý najzriedkavejší.

Algoritmus:

  • na začiatku si zistíme počet žiakov, uložíme do premennej POCET – bude to znamenať počet zadaných hodnôt od 1 – 7
  • na zaznamenávanie počtu výskytov použijeme pole VYSKYT so 7 prvkami, index prvku poľa bude znamenať konkrétny koníček, hodnota prvkov bude predstavovať počet žiakov s daným koníčkom
  • načítanie poľa dávame do cyklu od 1 po POCET
  • ak zadáme 1, potom prvok VYSKYT[1] zväčšíme o 1
  • ak zadáme 2, potom prvok VYSKYT[2] zväčšíme o 1
  • ……
  • ak zadáme 7, potom prvok VYSKYT[7] zväčšíme o 1
  • ak zadáme iné číslo ako 1 až 7, tak by sa načítanie malo zopakovať (ošetrenie programu)
  • po ukončení cyklu zistíme maximum MAX (+index prvku) a minimum MIN (+index prvku) hodnôt poľa VYSKYT
  • vypíšeme index prvku s maximálnou hodnotou (najčastejší koníček) a index prvku s minimálnou hodnotou (najzriedkavejší koníček)
Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s