Błąd w programie :(

0

Witam
Mam taki problem. Mam program który ma tłumaczyć wyrażenie w postaci ONP do postaci wyrażenia algebraicznego. I otóż program mam napisany wszystko cacy tylko jest jeden mały problem. Otóż zamiast przekształconego wyrażenia [23+3*] pojawia mi się tylko (*) i za diabła nie wiem czym to jest spowodowane :( Byłby ktoś tak miły i pomogł mi znaleŹĆ blad w progamie i go usunac?? Bede bardzo wdzieczny. Prosze bardzo. Kod programu zamieszczam niżej


PROGRAM ONPP;
USES Crt;
const MAX=100;
TYPE
   maxstring=string[max];
   pwezel=^wezel;
   wezel=record
      nast:pwezel;
      znak:maxstring;
   END;

function push(wierzcholek:pwezel;co_dod:maxstring):pwezel;
var nowy:pwezel;
begin
   getmem(nowy,sizeof(wezel)); {new(nowy);}
   nowy^.nast:=wierzcholek;
   nowy^.znak:=co_dod;
   push:=nowy
end;

function pop(wierzcholek:pwezel;co_zdj:maxstring):pwezel;
var
   temp:pwezel;
begin
   temp:=wierzcholek^.nast;
   co_zdj:=wierzcholek^.znak;
   freemem(wierzcholek,sizeof(wezel)); {dispose(wierzcholek);}
   pop:=temp
end;

procedure przerwij;
begin
   writeln('Wprowadzono zle dane...');
   halt(1)
end;

procedure info;
begin
   writeln(^m^j^j'Program zamienia wyrazenia z Odwrotnej Notacji Polskiej na zwykla.');
   writeln('W pliku zrodlowym napisano wyrazenie w onp dla pojedynczych znakow.');
   writeln('Dozwolone operatory: +, - , *, /');
   writeln('Zapis w zwyklej notacji z nawiasami:')
end;

var
   i,ile_arg,ile_oprt:integer;
   onp,tmp1,tmp2,out,out1:maxstring;
   wierzcholek:pwezel;
   plik:file;
begin
   ile_arg:=0;
   ile_oprt:=0;
   assign(plik,'p.txt');
   reset(plik,1);
   onp[0]:=^@;
   out[0]:=^@;
   out1[0]:=^@;
   tmp1[0]:=^@;
   tmp2[0]:=^@;
   i:=1;
   while(not eof(plik))do
      begin
         byte(onp[0]):=i;
         blockread(plik,onp[i],1);
         if((onp[i]='(')or(onp[i]=')'))then przerwij;
         inc(i)
      end;
   close(plik);
   wierzcholek:=nil;   {brakowało tego}
   for i:=1 to byte(onp[0])do         {byte(onp[0])=length(onp) - dla t. pascala i dla shortstringów w delphi}
      begin
         if((onp[i]='+')or(onp[i]='-')or(onp[i]='*')or(onp[i]='/'))
            then
               begin
                  if(ile_arg<2)
                     then przerwij
                     else
                        begin
                           wierzcholek:=pop(wierzcholek,tmp1);
                           wierzcholek:=pop(wierzcholek,tmp2);
                           wierzcholek:=push(wierzcholek,'('+tmp2+onp[i]+tmp1+')');
                           inc(ile_oprt)
                        end
            end
		else
               begin
                  out1:=onp[i];
                  wierzcholek:=push(wierzcholek,out1);
                  inc(ile_arg)
               end
      end;
   if(ile_arg<>(ile_oprt+1))then przerwij;
   info;
   writeln(wierzcholek^.znak);
end.

0

Hm... z tego co widze, to ty wyświetlasz tylko ostatni znak jaki wprowadziłeś... To nic nie robi (nie ma procedurki od liczenia... )

1 użytkowników online, w tym zalogowanych: 0, gości: 1