blikk info infothek forum galerie sitemap

Last In First Out in Pascal

anfang zurueck weiter ende nach oben
(*
  Name    : Gruppe 3 (A.M. , A.P.)
  Datum   : 07.02.2007
  Klasse  : 3Ia
  Aufgabe : Stapel-Operationen (LIFO)
  Lizenz  : GNU/GPL
*)
PROGRAM LIFO;
USES
  Crt;
CONST
  maxanz = 4;
  f      = 8;
TYPE
  Tspeicher = STRING[f];
  Tstapel = ARRAY[1..maxanz] OF Tspeicher;


PROCEDURE Enqueue(VAR stapel: Tstapel; x: Tspeicher;
                  VAR anz: INTEGER;VAR voll: BOOLEAN);
BEGIN
  IF anz>=maxanz THEN
    voll:=TRUE
  ELSE BEGIN
    voll:=FALSE;
    anz:=anz+1;
    stapel[anz]:= x;
  END
END;


PROCEDURE Dequeue(stapel: Tstapel;VAR y: Tspeicher;
                  VAR anz : INTEGER;VAR leer : BOOLEAN);
BEGIN
  IF anz<=0 THEN
    leer:=TRUE
  ELSE BEGIN
    leer:=FALSE;
    y:=stapel[anz];
    anz:=anz-1
  END
END;


PROCEDURE Ausgeben(stapel : Tstapel; anz : INTEGER);
VAR
  i : INTEGER;
BEGIN
  IF anz>=1 THEN BEGIN
    (* Erste Zeile -> Indices *)
    Write('  Indices: ');
    FOR i:=1 TO maxanz DO
      Write(i:f,'|');
    Writeln;
    (* Zweite Zeile -> Werte *)
    Write('           ');
    FOR i:=1 TO maxanz DO
      IF i<=anz THEN
        Write((stapel[i]):f, '|')
      ELSE
        Write('|':9);
    Writeln;
    Writeln
  END
  ELSE
    Writeln('  Der Stapel ist leer!');
  Writeln
END;


(* Hauptprogramm *)
VAR
  stapel         : Tstapel;
  anz, ausw      : INTEGER;
  wert           : Tspeicher;
  voll,leer,ende : BOOLEAN;
BEGIN
  ClrScr;
  (* Initialisieren *)
  anz  :=0;
  voll :=FALSE;
  leer :=TRUE;
  ende :=FALSE;
  WHILE NOT(ende) DO BEGIN
    ClrScr;
    Writeln(' -------------- Menu ----------------');
    Writeln(' Element hinzufuegen ............ (1)');
    Writeln(' Element lesen .................. (2)');
    Writeln(' Stapel ausgeben ................ (3)');
    Writeln(' Beenden ........................ (4)');
    Write  ('                                   ');
    Readln(ausw);
    Writeln(' ------------------------------------');
    CASE ausw OF
      1 : BEGIN
            IF NOT(voll) THEN BEGIN
              IF anz+1>maxanz THEN
                Writeln('  Stapel ist voll!')
              ELSE BEGIN
                Write('  Bitte Element eingeben: ');
                Readln(wert);
                Enqueue(stapel,wert,anz,voll);
                Writeln('  Element wurde eingefuegt!');
                leer:=FALSE (* Wenn element eingefuegt, leer=FALSE *)
              END
            END
            ELSE
              Writeln('  Stapel ist voll!');
            Writeln
          END;
      2 : BEGIN
            Dequeue(stapel,wert,anz,leer);
            IF Not(leer) THEN BEGIN
              Writeln('  "',wert, '" wurde berarbeitet und entfernt.')
            END
            ELSE
              Writeln('  Stapel ist leer!');
            Writeln
          END;
      3 : Ausgeben(stapel,anz);
      4 : ende:=TRUE;
      ELSE Writeln('Falsche Eingabe')
    END;
    Readln
  END
END.


Autoren: A.M. ; A.P.
Datum  : 07.02.2007
nach oben
punkt   seitenbereich schließen

Links

TS-First In-First Out
TS-Last In-First Out
TS-Warteschlange