blikk info infothek forum galerie sitemap

Warteschlange in Pascal

anfang zurueck weiter ende nach oben
(*
  Name    : Gruppe 3 (A.M. , A.P.)
  Datum   : 06.02.2007
  Klasse  : 3Ia
  Aufgabe : Warteschlangen-Operationen
*)
PROGRAM Warteschlange;
USES
  Crt;
CONST
  maxanz = 4;
  f      = 8;
TYPE
  Tspeicher = STRING[f];
  Tschlange = ARRAY[0..(maxanz-1)] OF Tspeicher;


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


PROCEDURE Dequeue(schlange: TSchlange; VAR y: Tspeicher;
                  VAR kopf,anz : INTEGER;VAR leer : BOOLEAN);
BEGIN
  IF anz<=0 THEN
    leer:=TRUE
  ELSE BEGIN
    leer:=FALSE;
    y:=schlange[kopf];
    kopf := (kopf+1) MOD maxanz;
    anz:=anz-1
  END
END;


PROCEDURE Ausgeben(schlange : Tschlange; kopf,anz : INTEGER);
VAR
  i : INTEGER;
BEGIN
  IF anz>=1 THEN BEGIN
    (* Erste Zeile -> Indices *)
    Write('  Indices: ');
    FOR i:=0 TO maxanz-1 DO
      Write(i:f,'|');
    Writeln;
    (* Zweite Zeile -> Werte *)
    Write('           ');
    FOR i:=0 TO maxanz-1 DO
      IF ((i>=kopf) AND (i<kopf+anz)) OR
         ((i>=0) AND (i<(kopf+anz) MOD maxanz) AND NOT((kopf>=0) AND (kopf<(kopf+anz) MOD maxanz))) THEN
        Write((schlange[i]):f, '|')
      ELSE
        Write('|':9);
    Writeln;
    (* Dritte Zeile -> Pfeile *)
    Write('           ');
    FOR i:=0 TO maxanz-1 DO
      IF (i=kopf) OR (i=((kopf+anz) MOD maxanz)) THEN
        Write(Chr(24):f,' ')
      ELSE
        Write(' ':f+1);
    Writeln;
    (* Vierte Zeile -> Bezeichner *)
    Write('           ');
    FOR i:=0 TO maxanz-1 DO
      IF i=kopf THEN
        Write('kopf':f,' ')
      ELSE
        IF i=((kopf+anz) MOD maxanz) THEN
          Write('kopf+anz':f,' ')
        ELSE
          Write(' ':f+1);
    Writeln;
    Writeln
  END
  ELSE
    Writeln('  Die Warteschlange ist leer!');
  Writeln
END;


(* Hauptprogramm *)
VAR
  wartesch       : TSchlange;
  kopf,anz, ausw : INTEGER;
  wert           : Tspeicher;
  voll,leer,ende : BOOLEAN;
BEGIN
  ClrScr;
  (* Initialisieren *)
  anz  :=0;
  kopf :=0;
  voll :=FALSE;
  leer :=TRUE;
  ende :=FALSE;
  WHILE NOT(ende) DO BEGIN
    ClrScr;
    Writeln(' -------------- Menu ----------------');
    Writeln(' Element hinzufuegen (enqueue) .. (1)');
    Writeln(' Element lesen (dequeue) ........ (2)');
    Writeln(' Warteschlange 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('  Warteschlange ist voll!')
              ELSE BEGIN
                Write('  Bitte Element eingeben: ');
                Readln(wert);
                Enqueue(wartesch,wert,kopf,anz,voll);
                Writeln('  Element wurde eingefuegt!');
                leer:=FALSE (* Wenn element eingefuegt, leer=FALSE *)
              END
            END
            ELSE
              Writeln('  Warteschlange ist voll!');
            Writeln
          END;
      2 : BEGIN
            Dequeue(wartesch,wert,kopf,anz,leer);
            IF Not(leer) THEN BEGIN
              Writeln('  "',wert, '" wurde berarbeitet und entfernt.')
            END
            ELSE
              Writeln('  Warteschlange ist leer!');
            Writeln
          END;
      3 : Ausgeben(wartesch,kopf,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