home *** CD-ROM | disk | FTP | other *** search
- {
- From: Deavon@sound.demon.co.uk (Deavon Edwards)
-
- I am having some problem with this program. I would like to modified it to
- do the following....
- i). To simulate the operation of a queue (Last In First Out).
- ii) To use a linked list instead of arrays(simulating a stack and queue).
- If anyone out there can help it would be greatly appreciated.
-
- This program will simulate the operation of a stack and a queue with a
- 10 items maximum. It will give the user the opportunity to insert and
- delete items from the data structures, display the data on screen,
- it on a printer, and save and load the data from a disk
- }
-
- PROGRAM StackSimulation(input, output);
-
- USES CRT,DOS,PRINTER;
-
- VAR
- Stack : ARRAY [1..10] OF STRING[20];
- StackFull : BOOLEAN;
- StackEmpty : BOOLEAN;
- Pointer : INTEGER;
- Choice : CHAR;
-
- {*******************************************************************}
-
- PROCEDURE PressAKey;
- BEGIN
-
- WRITELN;
- WRITELN;
- WRITELN (' ************************************');
- WRITELN (' *** PRESS RETURN TO CONTINUE ***');
- WRITELN (' ************************************');
- READLN;
- CLRSCR;
- END;
- {*******************************************************************}
- PROCEDURE Jump_a_Line(Jump: INTEGER);
- VAR
- Skip : INTEGER;
-
- BEGIN
- FOR Skip := 1 TO Jump DO
- WRITELN;
- END;
- {*******************************************************************}
-
- Procedure Introduction; {Display an introduction message to user}
- BEGIN
- CLRSCR;
- gotoxy (1,10);
- Textcolor(Cyan);
- writeln(' ********************************************************');
- writeln(' ********************************************************');
- writeln(' * *');
- writeln(' * WELCOME TO STACK & QUEUE SIMULATION PROGRAM *');
- writeln(' * *');
- writeln(' ********************************************************');
- writeln(' ********************************************************');
- Jump_a_line(3);
- DELAY (1000);
- end;
-
- {*******************************************************************}
-
- PROCEDURE Initialise (VAR StackFull, StackEmpty : BOOLEAN);
-
- BEGIN
- CLRSCR;
- gotoxy (1,10);
- Jump_a_line(2);
- WRITELN (' ******************************************************');
- WRITELN (' THE STACK IS INITIALISING...........PLEASE WAIT.......');
- WRITELN (' ******************************************************');
- Jump_a_line(3);
- SOUND (240);
- DELAY (1000);
- CLRSCR;
- NOSOUND;
- Pointer := 0;
- StackFull := FALSE;
- StackEmpty := TRUE;
- END;
-
- {*******************************************************************}
-
- PROCEDURE Add (VAR StackFull, StackEmpty : BOOLEAN);
- BEGIN
- IF StackFull THEN
- BEGIN
- gotoxy (1,10);
- Jump_a_line(2);
- WRITELN ('************************************************************');
- WRITELN ('** SORRY, THE STACK IS FULL, NO MORE DATA CAN BE ENTERED ***');
- WRITELN ('************************************************************');
- Jump_a_line(3);
- PressAKey;
- END
- ELSE
- BEGIN
- INC (Pointer);
- Jump_a_line(3);
- WRITE ('PLEASE ENTER THE ITEM TO BE ADDED TO THE STACK :=> ');
- READLN (Stack [Pointer]);
- CLRSCR;
- IF StackEmpty THEN StackEmpty := FALSE;
- IF Pointer = 10 THEN StackFull := TRUE;
- END;
- END;
-
- {*******************************************************************}
-
- PROCEDURE Take (VAR StackFull, StackEmpty : BOOLEAN);
- BEGIN
- IF StackEmpty THEN
- BEGIN
- gotoxy (1,10);
- Jump_a_line(3);
- WRITELN (' *******************************************************');
- WRITELN (' *** THE STACK IS EMPTY, NO MORE DATA CAN BE REMOVED ***');
- WRITELN (' *******************************************************');
- Jump_a_line(3);
- PressAKey;
- END
- ELSE
- BEGIN
- gotoxy (1,10);
- Jump_a_line(3);
- WRITE ('THE FOLLOWING ITEM HAVE BEEN REMOVE FROM THE STACK :=> ');
- WRITELN (Stack [Pointer]);
- DEC (Pointer);
- IF Pointer = 0 THEN StackEmpty := TRUE;
- IF StackFull THEN StackFull := FALSE;
- Jump_a_line(3);
- PressAKey;
- END;
- END;
-
- {*******************************************************************}
-
- PROCEDURE Display_to_Screen (StackEmpty : BOOLEAN);
- VAR
- Counter : INTEGER;
- BEGIN
- CLRSCR;
- GOTOXY (1,10);
- IF StackEmpty THEN
- WRITELN (' THE STACK IS CURRENTLY EMPTY ');
- Jump_a_Line (3);
- FOR Counter := 1 TO Pointer DO
- WRITELN (Counter:2 ,' ', Stack [Counter]);
- Jump_a_Line(2);
- PressAKey;
- END;
-
- {*******************************************************************}
- PROCEDURE Print_to_Printer (StackEmpty : BOOLEAN);
- VAR
- Counter : INTEGER;
- BEGIN
- CLRSCR;
- GOTOXY (1,10);
- {$I-}
- WRITELN (lst,#0);
- IF IORESULT <> 0 THEN
- WRITELN (' >>>>>> PRINTING ERROR.......PRINTER OFF LINE <<<<<< ')
- ELSE
- BEGIN
- IF StackEmpty THEN
- WRITELN ('THE STACK IS CURRENTLY EMPTY, THERE IS NO DATA TO BE PRINTED.')
- ELSE
- WRITELN (' THE CONTENTS OF THE STACK IS PRINTING........');
- FOR Counter := Pointer DOWNTO 1 DO
- WRITELN (Lst,Counter:2 ,' ', Stack [Counter]);
- END;
- {$I+}
- PressAKey;
- END;
-
-
- {****************************************************}
-
- PROCEDURE Save_to_File;
-
- VAR
- Write_to_File : TEXT;
- Output_to_File : STRING[20];
- Read_File : BOOLEAN;
- Counter : INTEGER;
-
- BEGIN
- CLRSCR;
- Jump_a_Line(3);
- WRITE('PLEASE ENTER THE NAME YOU WISH TO CALLED THE FILE :=> ');
- READLN(Output_to_File);
- ASSIGN(Write_to_File,Output_to_File);
- REWRITE(Write_to_File);
- FOR Counter := 1 TO Pointer DO
- BEGIN
- Writeln(Write_to_File,Stack[Counter]);
- Writeln('SAVING... ',Counter:2,' ... ',Stack[Counter]);
- END;
- CLOSE(Write_to_File);
- PressAKey;
- End;
-
- {**************************************************}
-
- PROCEDURE Open_A_File (StackEmpty : BOOLEAN);
-
- VAR
- Read_File : TEXT;
- Input_to_File : STRING[20];
-
- BEGIN
- CLRSCR;
- Jump_a_Line(3);
- WRITE ('PLEASE ENTER THE NAME OF THE FILE YOU WHICH TO OPENED :=> ');
- READLN(Input_to_File);
- ASSIGN(Read_File,Input_to_File);
- {$I-}
- RESET(Read_File);
- IF IOResult = 0 THEN
- BEGIN
- Jump_a_Line(2);
- Pointer := 0;
- WHILE NOT EOF(Read_File) DO
- BEGIN
- INC (Pointer);
- READLN(Read_File,Stack [Pointer]);
- WRITELN(Pointer:2,' : ',Stack[Pointer]);
- END;
- CLOSE(Read_File);
- StackEmpty := FALSE;
- END
- ELSE
- CLRSCR;
- Jump_a_Line(2);
- WRITELN (' ***********************************');
- WRITELN (' *** FILE NAME DOES NOT EXIT ***');
- WRITELN (' ***********************************');
- {$I+}
- PressAKey;
- END;
-
- {****************************************************}
-
- PROCEDURE Menu;
-
- BEGIN
- gotoxy (1,10);
- Textcolor(White);
- WRITELN (' **************************************************');
- WRITELN (' **************************************************');
- WRITELN (' **** A : Add to Stack *****');
- WRITELN (' **** T : Take from Stack *****');
- WRITELN (' **** D : Display Stack List to Screen *****');
- WRITELN (' **** P : Print Stack List *****');
- WRITELN (' **** I : Initialise Stack List *****');
- WRITELN (' **** S : Save Stack to disk *****');
- WRITELN (' **** L : Load Stack from disk *****');
- WRITELN (' **** Q : Quit program *****');
- WRITELN (' **************************************************');
- WRITELN (' **************************************************');
- WRITELN;
- WRITELN;
- WRITELN (' PLEASE ENTER AN OPTION >> ');
- Choice := READKEY;
-
- END;
-
- PROCEDURE QuitProgram;
-
- BEGIN
- gotoxy (1,10);
- WRITELN (' ***********************************');
- WRITELN (' """""""""""""""""""""""""""""""""""');
- WRITELN (' [[[[[ GOODBYE!!!!!! ]]]]] ');
- WRITELN (' """""""""""""""""""""""""""""""""""');
- WRITELN (' ***********************************');
- WRITELN;
- WRITELN;
- END;
-
- {*******************************************************************}
- {*******************************************************************}
-
- BEGIN
- Introduction;
- Initialise (StackFull, StackEmpty);
- REPEAT
- Menu;
- CLRSCR;
- CASE Choice OF
- 'A', 'a' : Add (StackFull, StackEmpty);
- 'T', 't' : Take (StackFull, StackEmpty);
- 'D', 'd' : Display_to_Screen (StackEmpty);
- 'P', 'p' : Print_to_Printer (StackEmpty);
- 'I', 'i' : Initialise (StackFull, StackEmpty);
- 'S', 's' : Save_to_File;
- 'L', 'l' : Open_a_File(StackEmpty);
- 'Q', 'q' : QuitProgram
- ELSE
- BEGIN
- gotoxy (1,10);
- WRITELN (' **************************');
- WRITELN (' ** Invalid key pressed **');
- WRITELN (' **************************');
- WRITELN;
- PressAKey;
- END;
- END;
- UNTIL (Choice = 'Q') OR (Choice = 'q');
- END.