Preštudujte si: Polia a zoznamy

Portál: amos.ukf.sk
Kurz: Programovanie 1
Kniha: Preštudujte si: Polia a zoznamy
Vytlačil(a): Hosťovský používateľ
Dátum: streda, 4 decembra 2024, 08:39

Opis

O tom, ako v programe využívať polia.

1. Úlohy riešené pomocou poľa

Vyriešime niekoľko úloh, v ktorých použijeme jednorozmerné pole.

1.1. Úloha #1

Napíšte program, ktorý pre zadané číslo zistí počty výskytov jednotlivých cifier. Číslo načítajte z Editu, výsledok vypíšte do ListBoxu.

Riešenie

Pre každú cifru si potrebujeme pamätať počet výskytov. Ako počítadlá využijeme prvky poľa. Cifier je 10, použijeme teda pole s rozsahom 0..9 (v prvku p[0] uložíme počet núl, v prvku p[1] počet jednotiek atď.). Vstupné číslo prejdeme v cykle po cifrách, aktualizujeme príslušné počítadlá.

procedure TForm1.Button1Click(Sender: TObject);
var i, cifra: integer;
    p: array [0..9] of integer;
    retazec: string;

begin
 for i:= 0 to 9 do p[i]:= 0; // vynulujeme pocty vyskytov
 retazec:= Edit1.Text;       // zadane cislo ulozime do premennej typu string
 
 for i:=1 to length(retazec) do begin
   cifra:= StrToInt(retazec[i]);    // zistime, aka cifra je na aktualnej pozicii
   p[cifra]:= p[cifra] + 1;         // zvysime pocet jej vyskytov v poli
 end;

 // vypiseme vysledok
 Listbox1.Clear;
 for i:=0 to 9 do
   Listbox1.Items.Add(inttostr(i)+ ' - ' + inttostr(p[i]));
end;
 

1.2. Úloha #2

Napíšte program, ktorý pre zadaný text zistí počet výskytov jednotlivých malých písmen abecedy (a-z). Vstupný text načítajte z Editu, výsledok vypíšte do ListBoxu.

Riešenie

Úloha je len obmenou predchádzajúcej. Znaky a-z sú súčasťou ordinálneho typu char, môžeme ich preto použiť ako indexy poľa.

var p: array ['a'..'z'] of integer;     // pocitadla znakov
    retazec: string;
    i, znak: char;
    j: integer;


begin
 for i:= 'a' to 'z' do znaky[i]:= 0;    // vynulujeme pocty vyskytov
 retazec:= Edit1.text;
 
 for j:= 1 to length(retazec) do begin
   znak:= retazec[j];                   // zistim aky znak je na aktualnej pozicii
   p[znak]:= p[znak] + 1;               // zvysim pocet jeho vyskytov v poli
 end;


 // vypis
 Listbox1.Clear;
 for i:= 'a' to 'z' do
   if p[i]>0 then Listbox1.Items.Add(i + ' - ' + inttostr(p[i]));
end;