PROGRAM Elevator; {Name: Gregory A. Perkins CS 65 Due: 11 October 1996} {This program demonstrates the ability of software to make the logical decisions needed to control an elevator. The program simulates the elevators actions and the necessary commands to the hoist and doors by display those actions on the screen. "DELAYS" are placed throughout the program to simulate the natural pauses of operation of an actual elevator.} {************ THE PROGRAM DOES NOTHING TO PREVENT THE USER ****************} {************ FROM ENTERING NEGATIVE FLOOR NUMBERS. IT IS ****************} {************ ASSUMED BY THE PROGRAMMER THAT THE CONTROL ****************} {************ PANEL WILL NOT HAVE THESE NUMBERS ON IT!!!!! ****************} USES cs65; {The cs65 unit contains the DELAY procedure.} {Declarations section} VAR FloorNum, Cycle, NewFloor : INTEGER; VAR NumFloors, Step, Incr : INTEGER; VAR Up, Down, Stop, Open, Close : BOOLEAN; CONST Trips = 10; BEGIN {program} {Initialize variables} FloorNum := 1; Up := FALSE; Down := FALSE; Close := FALSE; Stop := TRUE; Open := TRUE; {simulates hoist stopped and doors open initially} {Inform user of current elevator position.} WRITELN('The elevator is currently at Floor 1.'); WRITELN('The doors to the elevator are currently open.'); {main loop} FOR Cycle := 1 TO Trips DO BEGIN {main loop} {Prompt the user for a floor.} WRITE('The next request comes from floor: '); READLN(NewFloor); {Go to that floor after deciding which way to go.} NumFloors := NewFloor - FloorNum; IF NumFloors <> 0 THEN BEGIN{Actions if user picks different floor from one currently on} Close := TRUE; Open := FALSE; WRITELN; WRITELN('Sending "close" signal to doors.'); DELAY(10000); WRITELN('The doors are now closed.'); WRITELN; IF NumFloors > 0 THEN BEGIN Up := TRUE; Down := FALSE; Stop := FALSE; WRITELN('Sending "up" signal to hoist.'); DELAY(5000);{adds realism -- elevators don't "shoot up"} Incr := 1; END ELSE BEGIN Down := TRUE; Up := FALSE; Stop := FALSE; WRITELN('Sending "down" signal to hoist.'); DELAY(5000);{adds realism -- elevators don't "shoot up"} Incr := -1; END; {Make NumFloors positive.} NumFloors := ABS(NumFloors); {elevator motion loop} FOR Step := 1 TO NumFloors DO BEGIN {motion loop} FloorNum := FloorNum + Incr; DELAY(5000); WRITELN('At floor ', FloorNum:1, '...'); END; {motion loop} {Elevator has arrived at new floor.} Up := FALSE; Down := FALSE; Stop := TRUE; WRITELN('The elevator has arrived at floor ', FloorNum:1, '.'); WRITELN; WRITELN('Sending "stop" signal to hoist.'); DELAY(10000);{adds realism -- elevators don't "stop on a dime."} Open := TRUE; Close := FALSE; WRITELN('Sending "open" signal to doors.'); DELAY(10000); WRITELN('The doors are now open.'); WRITELN;{blank line adds to the readability of the execution} END ELSE BEGIN {Actions if user picks the CURRENT floor} WRITELN; WRITELN('You are already on floor ', FloorNum:1, '.'); DELAY(5000); WRITELN; END; {warning of last trip} IF Cycle = Trips - 1 THEN WRITELN('You have one trip left.'); END; {main loop} END. {program}