PROBLEM : | THE COOKIE CONTEST WAS SO POPULAR LAST YEAR THAT IT HAS BEEN EXPANDED THIS YEAR. IT WILL RUN FOR SIX WEEKS WITH WEEKLY WINNERS PRINTED IN ADDITION TO THE GRAND PRIZE WINNER. THERE HAS BEEN A SIGHT CHANGE IN THE RULES THIS YEAR. DOLLAR VOLUME IS THE GOAL THIS YEAR AND EACH SALES SLIP WILL HAVE BOTH WEEK NUMBER AND THE PRICE PER BOX OF THE COOKIES SOLD. |
INPUT : | SALESPERSON'S NUMBER (saleno) NUMBER OF BOXES SOLD (boxes) PRICE PER BOX (price dollars and cents) WEEK NUMBER (week) |
OUTPUT : | SIX WEEKLY WINNER WITH DOLLAR VOLUME GRAND PRIZE WINNER WITH DOLLAR VOLUME |
TWO DIMENSIONAL ARRAY (totals) i.e a TABLE WITH ROWS AND COLUMNS |
TABLES : | 1 | 2 | 3 | 4 | 5 | 6 |
1 | ||||||
2 | X | total for salesperson 2 week 2 | ||||
. | ||||||
. | ||||||
25 |
CALCULATE TOTALS WHILE MORE WEEKS |
||
LOCATE WINNER PRINT WINNER |
||
LOCATE GRAND PRIZE WINNER PRINT GRAND PRIZE WINNER |
CALCULATE TOTALS | |||
WHILE MORE SALES SLIPS | |||
GET SALES UPDATE TOTALS |
GET SALES | ||
READ( SALENO, BOXES, PRICE, WEEK ) |
UPDATE TOTALS | ||
TOTALS[SALENO,WEEK] IS WHAT IT WAS + PRICE * BOXES |
WHILE NOT EOF DO |
LOCATE WINNER (CHECK FOR TIES) | |||
FIND MAXIMUN IN COLUMN | |||
PRINT WINNER | |||
WHILE MORE SALESPEOPLE | |||
IF TOTALS[SALENO,WEEK] EQUAL MAXIMUM, PRINT SALENO, MAXIMUM |
LOCATE GRAND PRIZE WINNER | |||
WHILE MORE SALESPEOPLE | |||
TOATL SALES FOR SIX WEEKS | |||
LOCATE WINNER |
WHILE MORE SALESPEOPLE FOR SALENO := 1 TO NOPEOPLE DO WHILE MORE WEEKS FOR WEEK := 1 TO NOWEEKS DO |
ONE DIMENSIONAL ARRAY TO HOLD A SALESPERSON'S SIX-WEEK TOTAL. MAKE IT TOTALS[SALENO,NOWEEKS+1] |
PROGRAM CONTEST2( INPUT, OUTPUT );
CONST NOWEEKS = 5;
GRANDCNT = 7;
NOPEOPLE = 25
TYPE
ARY2 = ARRAY[1..NOPEOPLE,1..GRANDCNT] OF REAL;
VAR
MAXSALE : REAL;
WEEK : INTEGER;
TOTALS : ARY2;
BEGIN
ZERO(TOTALS);
CALCULATE(TOTALS);
FOR WEEK := 1 TO NOWEEKS DO
BEGIN
LOCATE( MAXSALE, WEEK, TOTALS );
PRINT( MAXSALE, WEEK, TOTALS );
END;
GRAND( MAXSALE, TOTALS );
PRINT MAXSALES, NOWEEKS+1, TOTALS );
END.
PROCEDURE ZERO( VAR TOTALS : ARY2 );
VAR
ROW, COL : INTEGER;
BEGIN
FOR ROW := 1 TO NOPEOPLE DO
FOR COL := 1 TO NOWEEKS DO
TOTALS[ROW,COL] := 0.0;
END;
PROCEDURE CALCULATE( VAR TOTALS : ARY2 );
VAR
SALENO, BOXES, WEEK : INTEGER;
PRICE : REAL;
BEGIN
READ(SALENO);
WHILE NOT EOF DO
BEGIN
READ( BOXES, PRICE, WEEK );
TOTALS[SALENO,WEEK] := PRICE * BOXES + TOTALS[SALENO,WEEK];
READ(SALENO);
END;
END;
PROCEDURE LOCATE( VAR MAXSALE : REAL; WEEK : INTEGER; VAR TOTALS : ARY2 );
VAR SALENO : INTEGER;
BEGIN
MAXSALE := TOTALS[1,WEEK];
FOR SALENO := 2 TO NOPEOPLE DO
IF MAXSALE > TOTALS[SALENO,WEEK]
THEN MAXSALE := TOTALS[SALENO,WEEK];
END;
PROCEDURE PRINT( MAXSALE : REAL; WEEK : INTEGER; VAR TOTALS : ARY2 );
VAR SALENO : INTEGER;
BEGIN
FOR SALENO := 1 TO NOPEOPLE DO
IF TOTALS[SALENO,WEEK] = MAXSALE
THEN WRITELN( SALENO, MAXSALE );
END;
PROCEDURE GRAND( VAR MAXSALE : REAL; VAR TOTALS : ARY2 );
VAR
SALENO, WEEK, TOTCOL : INTEGER;
BEGIN
TOTCOL := NOWEEKS + 1;
FOR SALENO := 1 TO NO PEOPLE DO
BEGIN
TOTALS[SALENO,TOTCOL := 0;
FOR WEEK := 1 TO NOWEEKS DO
TOTALS[SALENO,TOTCOL] :=
TOTALS[SALENO,TOTCOL] + TOTALS[SALENO,WEEK];
END;
LOCATE( MAXSALE, TOTCOL, TOTALS );
END;
TWO DIMENSIONAL ARRAYS | |||
(TABLE WITH ROWS AND COLUMNS) DEFINE: TYPE ARY2 = ARRAY[1..NROWS,1..NOCOL] OF REAL VAR TABLES : ARY2 USE: |
|||
TABLES[ROW,COL] WHERE ROW <= NROWS AND COL <= NCOL |
INTEGER, REAL, BOOLEAN, CHAR |