| Posledná zmena: 14.10.2002

záznamy

## Typ Záznam

komplexné číslo
pre typ komplexné číslo vytvorte tieto funkcie:

- vytvorenie komplexného čísla - parametrami sú dve čísla, výstup je komplexné číslo
- absolútna honota
- súčet, rozdiel, súčin, podiel

    type
      komplex = record r,i:real end;

    function k(r,i:real):komplex;
    begin
      Result.r:=r; Result.i:=i;
    end;

    function absK(a:komplex):real;
    begin
      Result:=sqrt(sqr(a.r)+sqr(a.i));
    end;

    function sucet(a,b:komplex):komplex;
    begin
      Result.r:=a.r+b.r;
      Result.i:=a.i+b.i;
    end;

    function rozdiel(a,b:komplex):komplex;
    begin
      Result:=k(a.r-b.r,a.i-b.i);
    end;

    function sucin(a,b:komplex):komplex;
    begin
      Result.r:=a.r*b.r-a.i*b.i;
      Result.i:=a.r*b.i+a.i*b.r;
    end;

komplexné číslo ako string
pre typ komplexné číslo vytvorte funkciu KomplexToStr |
    function KomplexToStr(a:komplex):string;
    begin
      Result:='';
      if a.r<>0 then
        Result:=FloatToSTr(a.r);
      if a.i<>0 then begin
        if a.i=-1 then Result:=Result+'-i'
        else if a.i<0 then
          Result:=Result+FloatToSTr(a.i)+'i'
        else begin
          if Result<>'' then Result:=Result+'+';
          if a.i=1 then Result:=Result+'i'
          else Result:=Result+FloatToSTr(a.i)+'i';
        end;
      end;
      if Result='' then Result:='0';
    end;

### frekvenčná tabuľka krsných mien

- v textovom súbore (má maximálne 1000 riadkov) je v každom riadku jedno priezvisko a meno študenta; zistite, koľkokrát sa vyskytli jednotlivé krstné mená; (riadky čítajte ako string)
- úlohu riešte v neusporiadanej tabuľke mien

deklarácie
definujte pole záznamov, ktoré obsahujú meno a počet výskytov |
    const
      max=1000;

    type
      zaznam = record
        meno:string;
        kolko:integer;
      end;

    var
      pole:array [1..max] of zaznam;
      n:integer;     // počet mien v tabuľke
hľadaj
definujte funkciu hľadania v neutriedenom poli |
    function hladaj(m:string):integer;
    begin
      Result:=n;
      while (Result>0) and (pole[Result].meno<>m) do
        dec(Result);
    end;
zaraď
procedúra zaradí ďalšie meno do tabuľky |
    procedure zarad(m:string);
    var
      i:integer;
    begin
      i:=hladaj(m);
      if i=0 then begin
        inc(n);
        pole[n].meno:=m;
        pole[n].kolko:=1;
      end
      else
        inc(pole[i].kolko);
    end;
prečítanie a výpis tabuľky
procedúry, ktoré čítajú textový súbor 'student.txt', zaradia všetky mená do tabuľky a na záver ju vypíšu |
    procedure citaj(subor:string);
    var
      t:TextFile;
      s:string;
    begin
      n:=0;
      AssignFile(t,subor); Reset(t);
      while not seekeof(t) do begin
        readln(t,s);
        zarad(copy(s,pos(' ',s)+1,maxint));
      end;
      CloseFile(t);
    end;

    procedure vypis;
    var
      i:integer;
    begin
      for i:=1 to n do
        Memo1.Lines.Add(pole[i].meno+' '+
                        IntToStr(pole[i].kolko));
    end;

### Ďalšie úlohy

- vylepšená verzia: utriedená tabuľka, pri zaraďovaní binárne vyhľadávanie

© 2002 AB, KVI
blaho@fmph.uniba.sk