Mam problem z programem do tworzenia drzew rekurencyjnie. Ten program ma zapisać ciąg nawiasów i innych znaków ( inne znaki to zmienne, zapisywane w recordzie jako z i odczytywane jako () ) w drzewie, a potem je wypisać.
Wczytuje np.:
(())()((())) i ma wypisać to samo
Dla a()b(()) ma wypisać ()()()(())
Dla (a)((b)) ma wypisać (())((()))
Ale robi to źle, i np.
dla ()()() wypisuje ((()))
dla (())() wypisuje ((()))
dla abc wypisuje dobrze ()()()
dla ab(()) też dobrze: ()()(())
ale dla a()b wypisuje ()(()) zamiast ()()()
i tak łączy wszystkie w jedno.
Ta część kodu która ma błąd w procedurze wczytaj.
program pom_zad4;
type lilista=^elemlilisty;
elemlilisty=record
z:char;
w:lilista;
nast:lilista;
end;
var l1:lilista;
procedure wczytaj(var l:lilista);
var c:char;
begin
if Eoln then l:=nil
else begin
while not Eoln do begin
read(c);
case c of
'(' : begin
new(l);
l^.z:=' ';
l^.w:=nil;
l^.nast:=nil;
wczytaj(l^.w);
wczytaj(l^.nast);
end;
')' : ;
else begin
new(l);
l^.z:=c;
l^.w:=nil;
l^.nast:=nil;
wczytaj(l^.nast);
end;
end;
end;
end;
end;
procedure wypisz(const l:lilista);
begin
if (l<>nil) then begin
write('(');
wypisz(l^.w);
write(')');
wypisz(l^.nast);
end;
end;
begin
while not Eof do begin
wczytaj(l1);
readln;
wypisz(l1);
writeln;
end;
end.
– Dodane 16.01.2011 (N) 16:31 –
Ktokolwiek? Pomocy prosze!