Polia

    1. zoznámime sa s novým jednoduchým typom - interval
    2. zoznámime sa s novým zloženým (štruktúrovaným) typom - pole
    3. naučíme sa, ako sa pracuje s poľom, ktoré je parametrom podprogramu

 


 

Typ interval

 

type

interval = 3..10;     

cele = integer;  

male = byte;

mpis = 'a'..'z';

cifry = '0'..'9';

 

 

 


 

Štruktúrovaný (zložený) typ POLE

 

type pole = array[typ_indexu] of typ_prvkov;

 

Napríklad,

type

pol = array [-7.. 7] of real;

ine = array [1..8 ] of integer;

tab = array [-7.. 7] of pol;

riadok = array [1.. 80] of char;

text = array [1..1000] of riadok;

 

 

 

 

 

 

jednoduchá práca s poľom celých čísel:

const
      max=7;

type
index=1..max;
pole=array[index] of integer;

var
         p: pole;
         i: index;
         s: integer;
         t: Text;

begin


Assign(t,'text.txt'); Reset(t);
for i:=1 to max do read(t,p[i]);
Close(t);
Assign(t,'vypis.txt'); Rewrite(t);
s:=0;
for i:=1 to max do inc(s,p[i]);
writeln(t,'Priemer: ',s/max:0:2);
for i:=1 to max do
if p[i]<s/max then writeln(t,p[i],' pod')
else if p[i]>s/max then writeln(t,p[i],' nad')

                  else writeln(t,p[i],' priemer');
Close(t);
 
end;

 

 

Pole predstavuje postupnosť prvkov rovnakého typu, pričom každý prvok má svoj index.

Pretože každý prvok poľa má svoj index, pole môže obsahovať rovnakú položku viackrát.

Pole môže byť uložené staticky alebo dynamicky. Dynamickú verziu uloženia poľa poskytujú vyššie verzie jazyka Pascal.

 

 

Napríklad,

type

pol = array [-7.. 7] of real;

tab = array [-7.. 7] of pol;

riadok = array [1.. 80] of char;

text2 = array [1..1000] of riadok;

text1 = array [1..1000,1..80] of char;

 

 

 


 

Polia ako parametre podprogramov

 

 

Napíšeme program, ktorý

procedúry s poľami:

 
Type
  Const nmax=100;
 
  pole=array[1..nmax] of integer;
 
  Procedure nahodne(n:integer; var p:pole);
   {Procedura vygeneruje nahodne hodnoty z intervalu <0, n) do pola p}
  var
    i:integer;
  begin
    for i:=1 to nmax do
      p[i]:=random(n);
  end;
 
  procedure vypis(var t:Text; p:pole);
  var
    i:integer;
  begin
    for i:=1 to nmax do write(t,p[i],' ');
    writeln(t);
  end;
 
  procedure presun(var a:pole; b:pole);
  begin
    a:=b
  end;
 
  procedure inc(var a:pole);
  var
    i:integer;
  begin
    for i:=1 to nmax do a[i]:=a[i]+1;    
  end;
 
var
  x,y:pole;
  t:Text;
begin
  Assign(t,'vypis.txt'); Rewrite(t);
  randomize;
  nahodne(20,x);
  vypis(t,x);
  presun(y,x);
  inc(y);
  vypis(t,y);
  Close(t);
end;

 

 

procedúry pre prácu s maticami:

Type
  Const nmax=30;
        Mmax=30
 
  pole=array[1..nmax] of integer;
       matica=array[1..mmax] of pole;
 
procedure nac_m(var m, n: integer; var mat:matica);
{procedura nacita pocet riadkov a stlpcov a prvky matice zo standardneho vstupu input}
var i, j: integer;
begin
   writeln('Zadaj pocet riadkov');
   readln(m);
   writeln('Zadaj pocet stlpcov');
   readln(n);
   writeln('Zadaj prvky po riadkoch');
   for i:= 1 to m do
   begin
      for j:= 1 to n do read(mat[i,j]);
      readln;
   end;
end;
 
procedure vyp_m(m, n: integer; mat:matica);
{procedura vypise pocet riadkov a stlpcov a prvky matice do standardneho vystupu output}
var i, j: integer;
begin
   writeln('Pocet riadkov ', m);
   writeln('Pocet stlpcov ', n);
   writeln('Prvky po riadkoch');
   for i:= 1 to m do
   begin
      for j:= 1 to n do write(mat[i,j]:5);
      writelnln;
   end;
end;
 
procedure zisti_m(m, n: integer; mat:matica; var maxim:integer; var in1, in2:integer);
{procedura zisti maximalny prvok matice a jeho indexy}
var i, j: integer;
begin
   maxim:= mat[1,1];
   in1:=1;
   in2:=1;
   for i:= 1 to m do
      for j:= 1 to n do 
      if maxim<mat[i,j] then
      begin 
         maxim:=mat[i,j];
         in1:=i; in2:=j;
      end;
end;

 

 

Príklad: Zásobník je postupnosť prvkov, v ktorej je možné pridávať a odoberať prvky len na jednom konci. Tento koniec sa nazýva vrchol zásobníka. Teda zásobník môžeme považovať za istú štruktúru údajov.

 

procedúry pre prácu so zásobníkom:

Const nmax=100;
 
Type
  zasobnik=array[1..nmax] of integer;
  rozsah: 0..nmax;
 
var z: zasobnik; vrchol: rozsah;
 
procedure vytvor_z(var zz: zasobnik; var vrch:rozsah);
{Vytvori prazdny zasobnik}
begin
   vrch:=0;
end;  
 
procedure vloz_z(var zz: zasobnik; var vrch:rozsah; e: integer);
{Vlozi prvok do zasobnika}
begin
   if vrch<nmax then 
          begin inc(vrch); zz[vrch]:=e; end
                else writeln('Zasobnik je plny');
end;  
 
procedure vyber_z(var zz: zasobnik; var vrch:rozsah; var e: integer);
{Vyberie prvok zo zasobnika}
begin
   if vrch>0 then 
          begin e:=zz[vrch]; dec(vrch) end
             else writeln('Zasobnik je prazdny');
end;