[Pascal] Tworzenie drzew rekurencyjnie - Problem

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!

Całe wczytywanie jest bezsensu, zastanów się co chcesz tym osiągnąć i zrób to jeszcze raz.