|
|
|
|
|
|
|
|
|
|
|
(* 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 |
|
|
|
|
|
|
|
|
Letzte Änderung: 09.02.2007
© Pädagogisches Institut für die deutsche Sprachgruppe
- Bozen. 2000 -
|
|
|
|
|
|
|
|
|