Procedury zarządzające stosem.

0

Witam
Mgr. prowadzacy cwiczenia zadal nam do domu napisac program w pascalu:
Implementacja funkcji i procedur zarządzających stosem:
a) push – odkładanie danych na stos. Jeśli stos jest niezainicjalizowany, polecenie to powinno ją
wykonać.
b) pop – zdejmowanie danych ze stosu. Konieczne jest sprawdzenie, czy kolejnym
zdejmowanym elementem nie jest nil, którego wystąpienie powinno być odpowiednio
obsłużone.
c) wyczysc – zwolnienie całej pamięci zajmowanej przez stos.
d) odwroc – odwrócenie kolejności elementów w stosie
e) wyswietl – wyświetlenie na ekranie całej zawartości stosu

Z punktem a, b, c nie mialem zadnych problemow ale w ogole nie wiem jak sie zabrac do punktu d i e. Bylbym bardzo wdzieczny za napisanie tych dwoch procedur/funkcji albo chociaz ogolnego zarysu z czego skorzystac. (aha najlepiej jakby program nie korzystal z tablic/rekordow tylko i wylacznie ze stosow.
Tu jest to co do tej pory stworzylem. moze znajdziecie jakies bledy w podanym kodzie to prosilbym rownoczesnie o ich wygraniecie i ew. poprawienie w ramach mozliwosci.

program project1;  
type
      wskaznik=^element;
      element = record
      dana:integer;
      wsk:wskaznik;
      end;
var
      p:wskaznik;
      nu,ne:integer;
      MemAvail:byte;
procedure push(var x:wskaznik; y:integer);
      var
        top:wskaznik;
      begin
        new(top);
        top^.dana:=y;
        top^.wsk:=x;
        x:=top;
      end;

procedure pop(var x:wskaznik; var y:integer);
     var
        bottom:wskaznik;
      begin
        y:=x^.dana;
        bottom:=x^.wsk;
        x:=bottom;
      end;

procedure wyczysc();
begin
        dispose(p);
        writeln('pamiec stosu zostala zwolniona');
  end;
          begin
        writeln('Ile elementow odlozyc na stos ?');
        readln(ne);
        while ne>0 do
          begin
            writeln('Podaj wartosc elementu:');
            readln(nu);
            push(p,nu);
            dec(ne);
          end;
        writeln('Na stos odlozono nastepujace elementy: ');
        while p<>nil do begin
          pop(p,nu);
          writeln(nu);
          end;
        wyczysc();
        readln;
      end.

z groy dziekuje.

0

Masz problem również z punktem "b": zastanów się co się stanie jeżeli dasz pop na już (lub jeszcze) pustym stosie.
Z punktem "c" też masz problem: jak ty sobie to wyobrażasz jeden dispose(); na dowolną ilość elementów? Przy czym dla jakieś globalnej zmiennej?
Jak sobie poradzisz z tymi dwoma reszta pójdzie jak z płatka.

0

c faktycznie jest problem, ale z teog co widze przy odpalaniu tego programu to b dziala poprawnie stos nie moze byc pusty. nie ma takiej mozliwosci.

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