|
Posledná zmena: 1.11.2002
|
triedy s dynamickým poľom
|
tabuľka osôb
- trieda TTabOsoba, v ktorej budeme udržiavať
databázu ľudí zoradených podľa
veku - použijeme triedu TOsoba z predch. cvičení
trieda Osoba:
|
stavové premenné:
metódy:
- inicializácia
- predstavenie sa
- zistenie, či daná osoba je
alebo nie je mladíkom
- oslovenie
|
type
TOsoba = class
meno:string;
vek:byte;
adresa:string;
constructor Create(m,a:string; v:byte);
function PredstavSa:string;
function Mladik:boolean;
function Oslovenie:string;
end;
constructor TOsoba.Create(m,a:string; v:byte);
begin
meno:=m; adresa:=a; vek:=v;
end;
function TOsoba.PredstavSa:string;
begin
Result:='Volám sa '+meno+', bývam v '+adresa+
' a mám '+IntToStr(vek)+' rokov';
end;
function TOsoba.Mladik:boolean;
begin
Result:=vek<=20;
end;
function TOsoba.Oslovenie:string;
begin
Result:='Vážený pán '+meno;
end;
|
deklarácia triedy pre tabuľku
osôb:
|
|
type
TTabOsoba = class
t:array of TOsoba;
constructor Create;
procedure pridaj(m,a:string; v:byte);
procedure vypis_mladikov(kam:TStrings);
end;
constructor TTabOsoba.Create;
begin
t:=nil;
end;
|
pridať prvok do tabuľky:
|
pridávať na správne miesto
tak, aby bola tabuľka stále utriedená
podľa veku osôb
|
procedure TTabOsoba.pridaj(m,a:string; v:byte);
var
oo:TOsoba;
i:integer;
begin
oo:=TOsoba.Create(m,a,v);
SetLength(t,Length(t)+1);
i:=High(t)-1;
while (i>=0) and (t[i].vek>v) do begin
t[i+1]:=t[i];
dec(i);
end;
t[i+1]:=oo;
end;
|
výpis len mladíkov:
|
nakoľko je tabuľka utriedená,
stačí vypisovať postupne všetkých,
kým sú mladíci - na
prvom nie mladíkovi sa môže
skončiť
|
procedure TTabOsoba.vypis_mladikov(kam:TStrings);
var
i:integer;
begin
i:=0;
while (i<=High(t)) and t[i].mladik do begin
kam.Add(t[i].meno);
inc(i);
end;
end;
|
práca s triedou:
|
do inštancie triedy TTabOsoba načítajte
informácie zo vstupu o jednotlivých ľuďoch
a vypíšte všetkých mladíkov z tejto
tabuľky
|
var
tv:TTabOsoba;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
tv:=TTabOsoba.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
v:integer;
begin
v:=StrToIntDef(Edit3.Text,0);
if v<>0 then
tv.pridaj(Edit1.Text,Edit2.Text,v);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
tv.vypis_mladikov(Memo1.Lines);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
Memo1.Clear;
with tv do
for i:=0 to High(t) do
t[i].PredstavSa(Memo1.Lines);
end;
|
Polynomy
trieda TPolynom:
|
polynóm reprezentujte dynamickým poľom
koeficientov, pre neexistujúce mocniny je koef.
0 (koeficienty sú typu Integer)
|
type
TPolynom = class
koef:array of integer;
constructor Create;
procedure nacitaj(s:string);
procedure vypis(kam:TStrings);
procedure pricitaj(p:TPolynom);
end;
constructor TPolynom.Create;
begin
koef:=nil;
end;
|
načítanie z reťazca:
|
v s sú koeficienty polynomu
od najmenšej mocniny oddelené ' '
|
procedure TPolynom.nacitaj(s:string);
begin
s:=s+' '; koef:=nil;
while s<>'' do begin
SetLength(koef,Length(koef)+1);
koef[High(koef)]:=StrToInt(copy(s,1,pos(' ',s)-1));
delete(s,1,pos(' ',s));
end;
end;
|
výpis polynomu do jedného
riadka Memo
|
|
procedure TPolynom.vypis(kam:TStrings);
var
i:longint;
s:string;
begin
i:=high(koef); s:='';
while i>=0 do begin
if koef[i]<>0 then begin
if i<>high(koef) then s:=s + ' + ';
s:=s+IntToStr(koef[i]);
if i>0 then s:=s + 'x^' + IntToStr(i);
end;
dec(i);
end;
kam.add(s);
end;
|
súčet dvoch polynomov
|
|
procedure TPolynom.pricitaj(p:TPolynom);
var
i:integer;
begin
for i:=0 to High(p.koef) do begin
if i>High(koef) then begin
SetLength(koef,Length(koef)+1);
koef[i]:=0;
end;
inc(koef[i],p.koef[i]);
end;
end;
|
Ďalšie úlohy
- polynóm reprezentujte dyn. poľom rekordov
(koeficient a stupeň), ktoré bude obsahovať len
členy s nenulovým koeficientom usporiadané
podľa stupňa
- zadefinujte najprv triedu TClen (koeficient, stupeň
a metódy na inicializáciu a vypísanie)
a TPolynom potom bude obsahovat dynamické pole
TClenov
- zadefinujte triedu TVektor pomocou dynamického
poľa pre ľubovoľne -árne vektory. Ak budeme chcieť
napr. sčítať dva vektory rôznej árnosti,
tak sa buď vyhlási chyba, alebo sa ten kratší
doplní nulami...
|
© 2002 AB, KVI blaho@fmph.uniba.sk
|