PROGRAM CONFERENCE; (********************************************************* * * * CHAIRING A CONFERENCE * * * * VERSION * * 1.0 8 Nov 78 * * ELECTRONIC DESIGN # 23 * * 1.1 October 1979 * * Entered by R.E. Penley * * PASCAL/Z by ITHACA INTERSYSTEMS * * Modifications were made to the * * following procedures: * * INPUT, CHECK, CONVERT, & CORRECT * * 1.2 9 Oct 79 * * Added Instructions * * 1.3 13 Oct 79 * * Modified CHECK to invalidate illegal * * entries by Negating the current entry * * * *********************************************************) CONST TTYWIDTH = 80; PAPERLINES = 24; TYPE DAYTYPE = (MONDAY, TUESDAY, WEDNESDAY); WORD = ARRAY [1..10] OF CHAR; VAR TOPIC : ARRAY [MONDAY..WEDNESDAY, 1..4] OF INTEGER; SUBJ : ARRAY [MONDAY..WEDNESDAY, 1..4] OF WORD; DAY : DAYTYPE; CH : CHAR; J : INTEGER; ERROR, DONE : BOOLEAN; (*********************************************************) PROCEDURE INIT; BEGIN FOR DAY:=MONDAY TO WEDNESDAY DO FOR J:=1 TO 4 DO TOPIC [DAY, J] := 0 END; PROCEDURE INPUT; VAR A1,B1,C1,D1 : INTEGER; PROCEDURE PUT( DAY0 : DAYTYPE); (* Read Values into A1,B1,C1 & D1. Data must be in the range 1..6 *) BEGIN READLN(A1, B1, C1, D1); WRITELN; IF (A1<1) OR (A1>6) OR (B1<1) OR (B1>6) OR (C1<1) OR (C1>6) OR (D1<1) OR (D1>6) THEN DONE := FALSE ELSE BEGIN DONE := TRUE; TOPIC [DAY0, 1] := A1; TOPIC [DAY0, 2] := B1; TOPIC [DAY0, 3] := C1; TOPIC [DAY0, 4] := D1 END(* IF *) END(* PUT *); BEGIN (*** Input ***) WRITELN; REPEAT WRITE('Enter Topics for Monday >'); PUT(MONDAY) UNTIL DONE; REPEAT WRITE('Enter Topics for Tuesday >'); PUT(TUESDAY) UNTIL DONE; REPEAT WRITE('Enter Topics for Wednesday >'); PUT(WEDNESDAY) UNTIL DONE END(* INPUT *); PROCEDURE CLEAR; BEGIN WRITE( CHR(26) ) END; PROCEDURE SPACE(WIDTH : INTEGER); BEGIN WRITE(' ':WIDTH) END; PROCEDURE INSTRUCT; BEGIN CLEAR; WRITELN;WRITELN; SPACE(15);WRITELN('Conference Scheduling Program'); WRITELN;WRITELN; WRITELN(' This program will prepare a schedule for a three'); WRITELN('day conference. You may list four topics for each'); WRITELN('day of the conference. There will be a total of six'); WRITELN('topics. Each topic should be scheduled twice.'); WRITELN(' Any entry scheduled more than twice will be rejected.'); WRITELN('A program will be printed out leaving blanks where'); WRITELN('entries were rejected. You may then input your corrections.'); WRITELN(' Once you''ve made all corrections, the final schedule'); WRITELN('will be printed out and your conference is ready.'); WRITELN; WRITELN(' When prompted enter four numbers for the day''s topics'); SPACE(12);WRITELN( '1..Software'); SPACE(12);WRITELN( '2..Hardware'); SPACE(12);WRITELN( '3..Systems'); SPACE(12);WRITELN( '4..Production'); SPACE(12);WRITELN( '5..Sales'); SPACE(12);WRITELN( '6..Repairs'); WRITELN;WRITELN END; PROCEDURE CONVERT; (* CONVERTS TOPIC # TO ASCII SUBJECT INVALID ENTRIES ARE BLANKED OUT *) VAR DAYSTOPICS : INTEGER; BEGIN FOR DAY:=MONDAY TO WEDNESDAY DO FOR J:=1 TO 4 DO BEGIN DAYSTOPICS := TOPIC [DAY,J] ; CASE DAYSTOPICS OF 1: SUBJ [ DAY,J ] :='SOFTWARE '; 2: SUBJ [ DAY,J ] :='HARDWARE '; 3: SUBJ [ DAY,J ] :='SYSTEMS '; 4: SUBJ [ DAY,J ] :='PRODUCTION'; 5: SUBJ [ DAY,J ] :='SALES '; 6: SUBJ [ DAY,J ] :='REPAIRS '; ELSE: (* All other cases are invalid *) SUBJ [ DAY,J ] :=' ' END(* CASE *) END(* FOR DAY,J *) END(* CONVERT *); PROCEDURE CORRECT; VAR LINE : WORD; PROCEDURE CORRECTONE( DAY1 : DAYTYPE); (* Read Values into B & C. Data must be in the range 1..6 *) VAR B, C : INTEGER; BEGIN WRITE(' Session # >'); READLN(B); WRITE(' Topic >'); READLN(C); TOPIC [DAY1, B] := C END; BEGIN WRITELN; WRITELN('Blanks indicate illegal entries.'); WRITELN('Enter Carriage return when done.'); DONE := FALSE; REPEAT LINE := ' '; WRITELN; WRITE('Enter: Day >'); READLN(LINE); IF LINE[1] = ' ' (* CARRIAGE RETURN WILL RETURN A NULL *) THEN DONE := TRUE ELSE CASE LINE[1] OF 'M': CORRECTONE(MONDAY); 'T': CORRECTONE(TUESDAY); 'W': CORRECTONE(WEDNESDAY); ELSE: (* CHECK THAT THE TURKEY DIDN'T ENTER SOMETHING ELSE *) DONE := TRUE END(* CASE CH *) UNTIL DONE; WRITELN END(* CORRECT *); PROCEDURE CHECK; CONST VALID = 2; (* MAX NUMBER OF VALID TOPICS ALLOWED *) VAR NUM : ARRAY [1..6] OF INTEGER; INDEX : INTEGER; BEGIN ERROR:=FALSE; FOR J:=1 TO 6 DO (* INITIALIZE TOPIC COUNTER *) NUM [J] :=0; FOR DAY:=MONDAY TO WEDNESDAY DO FOR J:=1 TO 4 DO BEGIN INDEX := ABS( TOPIC[DAY,J] ); NUM [ INDEX ] := NUM [ INDEX ] +1; IF NUM [ INDEX ] > VALID THEN BEGIN ERROR:=TRUE; (* INVALIDATE ILLEGAL ENTRIES BY NEGATION *) TOPIC [DAY, J] := -TOPIC [DAY, J]; END(*IF*) END(*FOR DAY,J*); IF ERROR THEN CONVERT END(* CHECK *); PROCEDURE LIST; BEGIN WRITELN;WRITELN; SPACE(8);WRITELN('Monday':15, 'Tuesday':14, 'Wednesday' ); WRITELN;WRITELN; FOR J:=1 TO 4 DO BEGIN WRITE(J:2, ' '); FOR DAY:=MONDAY TO WEDNESDAY DO WRITE(SUBJ [DAY, J] :15); WRITELN END(* FOR J *); (* SCROLL UP THE PROGRAM PRINTOUT *) IF NOT ERROR THEN FOR J:=(PAPERLINES-10) DOWNTO 0 DO WRITELN END(* LIST *); (*********************************************************) BEGIN (*** Main program ***) INIT; INSTRUCT; INPUT; CONVERT; CHECK; IF ERROR THEN REPEAT LIST; CORRECT; CONVERT; CHECK UNTIL NOT ERROR; WRITELN(' Schedule is good'); FOR J:=1 TO 2500 DO; (* SHORT DELAY *) LIST END(*** CONFERENCE ***). .