#5 sparky29
A co takhle zabírat dynamické proměnné na haldě? (A pak po sobě uklízet?)
Co nastavování výchozích hodnot (včetně ukazatele na další prvek?)
A neškodily by komentáře co kde děláš....
A v neposlední řadě zkus příště nazývat proměnné pravými jmény, nalezeno/nenalezeno.
Nemám teď čas tě vést za ruku krok za krokem, tak prozkoumej jak by to třeba mohlo být a zjisti, kde máš nedostatky:
type
UkPrvek = ^Prvek;
Prvek = record
Data: real;
Dalsi: UkPrvek
end;
procedure pridejNaKonec(var S: UkPrvek; hodnota: real);
var
pom,predchozi: UkPrvek;
nenalezeno: boolean;
begin
pom:= S;
predchozi:=nil;
nenalezeno:=true;
if pom<>nil
then
begin
{Seznam není prázdný, můžeme hledat}
while (pom<>nil) and nenalezeno do
begin
if pom^.Data=hodnota then nenalezeno:=false;
predchozi:=pom;
pom:=pom^.Dalsi;
end;
if nenalezeno then
begin
{Nic jsme nenašli, musíme vytvořit nový prvek
a zařadit ho na konec - neboli za předchozí}
new(pom);
pom^.Data:=hodnota;
pom^.Dalsi:=nil;
predchozi^.Dalsi:=pom;
end;
end
else
begin
{Seznam byl prázdný, musíme založit nový}
new(pom);
pom^.Data:=hodnota;
pom^.Dalsi:=nil;
S:=pom;
end;
end;
procedure kontrola(var S:UkPrvek);
var pom: UkPrvek;
begin
pom:=S;
while (pom <> nil) do begin
write(pom^.Data:2:2,'; ');
pom:=pom^.Dalsi;
end;
end;
var S:UkPrvek;
begin
S:=nil;
pridejNaKonec(S,3.1);
pridejNaKonec(S,3.4);
pridejNaKonec(S,7.2);
pridejNaKonec(S,3.1);
pridejNaKonec(S,7.2);
pridejNaKonec(S,3.5);
kontrola(S);
end.