Keď by sa niekto našiel, čo by my vedel poradiť, pri dynamickej datovej štruktúre. Pochopil som, že pri statickej datovej štruktúre je už pri tvorbe programu presne určené aká bude veľká, kým pri dynamickej sa o veľkosti rozhoduje pri behu programu. No mám tu však dva príklady na dynamickú, ale ani jeden nerobí čo má. Programy sa dajú kompilovať, teda preložiť, ale robia si čo chcú. Nedávajú frontu, nerušia frontu, nedávajú zásobník, proste okrem skončenia a vypísania hlásení, nerobia nič. No ja neviem prečo to robia, nechápem kde je chyba ani ako ju napraviť, bol by som rád ak by mi niekto helfol s oboma programami. Tu je PRVÝ PROGRAM:
Program Zasobnik1;
type Nick = ^Naboj;
Naboj = record
ostry : char;
dalsi : Nick;
end;
var zasobnik, strela : Nick;
i : integer;
koniec : string;
akcia : char;
begin
{vytvorenie zásobniku}
zasobnik:=nil;
repeat
writeln('Stlacte klávesu a potom enter. Strelba: s, Plnenie: p.');
readln(akcia);
case akcia of
's':
begin
if zasobnik = nil then
writeln('Nick, más prázdny zásobnik.')
else
begin
writeln('Strielame.');
strela:=zasobnik;
zasobnik:=zasobnik^.dalsi;
dispose(strela);
end;
end;
'p':
begin
writeln('Plníme.');
new(strela);
strela^.dalsi:=zasobnik;
strela^.ostry:='l';
zasobnik:=strela;
end;
else writeln('Vyckavame.');
end;
writeln();
write('Stav zásobniku: ');
strela:=zasobnik;
while strela <> nil do
begin
write(strela^.ostry);
strela:=strela^.dalsi;
end;
writeln();
writeln('Ak chcete skoncit, napitte konec a stlacte enter');
writeln('Pre pokracovanie stlacte iba enter');
readln;
read(koniec);
until koniec = 'koniec';
{rusenie zásobniku}
strela:=zasobnik;
while strela <> nil do
begin
zasobnik:=zasobnik^.dalsi;
dispose(strela);
strela:=zasobnik;
end;
writeln('Zostalo nieco v zásobniku?');
write('Stav zásobniku: ');
strela:=zasobnik;
while strela <> nil do
begin
write(strela^.ostry);
strela:=strela^.dalsi;
end;
dispose(zasobnik);
writeln('Pre skoncenie programu stlacte enter');
readln;
end.
a tu je DRUHÝ PROGRAM
Program Obchod1;
type Nick = ^Clovek;
Clovek = record
meno: integer;
dalsi: Nick;
end;
var zaciatok, koniec: Nick;
PlatiaciClovek: Nick;
ukoncit:String;
akcia : char;
poradie: integer;
begin
new(zaciatok);
koniec:=zaciatok;
poradie:=1;
repeat
writeln('Stlacte klávesu a stlacte enter. Novy vstup: n, Vystup: v.');
readln(akcia);
case akcia of
'n':
begin
koniec^.meno:=poradie;
poradie:=poradie+1;
new(koniec^.dalsi);
koniec:=koniec^.dalsi;
end;
'v':
begin
if zaciatok = koniec then
writeln('fronta je prazdná.')
else
begin
PlatiaciClovek:=zaciatok;
zaciatok:=zaciatok^.dalsi;
dispose(PlatiaciClovek);
end;
end
else writeln('Fronta stoji.');
end;
write('Fronta: ');
if zaciatok <> koniec then
begin
PlatiaciClovek:=zaciatok;
repeat
writeln(PlatiaciClovek^.meno, ' ');
PlatiaciClovek:=PlatiaciClovek^.dalsi;
until PlatiaciClovek = koniec;
end;
writeln('Ak chcete skoncit, napiste koniec a stlacte enter, ak chcete iba pokracovat stlacte iba enter');
readln();
read(ukoncit);
until ukoncit = 'koniec';
{rusenie fronty}
if zaciatok <> koniec then
begin
PlatiaciClovek:=zaciatok;
repeat
PlatiaciClovek:=zaciatok;
zaciatok:=zaciatok^.dalsi;
dispose(PlatiaciClovek);
PlatiaciClovek:=zaciatok;
until PlatiaciClovek = koniec;
end;
writeln('Zostal niekdo v fronte?');
write('Fronta: ');
if zaciatok <> koniec then
begin
PlatiaciClovek:=zaciatok;
repeat
write(PlatiaciClovek^.meno, ' ');
PlatiaciClovek:=PlatiaciClovek^.dalsi;
until PlatiaciClovek = koniec;
end;
readln;
dispose(zaciatok);
writeln('Pre skoncenie programu stlacte enter');
readln();
end.
Obidva programy sú na príklad dynamickej datovej štruktúry