7. príklady


Posledná zmena: 14.10.2002

Banner Text 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