PROBLEM : | THE COOKIE COMPANY IS HAVING A SALES CONTEST. CAN YOU WRITE A PROGRAM TO DETERMINE THE WINNER? |
SALESPERSON'S NUMBER (between 1 and 25) NUMBER OF BOXES OF COOKIES SOLD THESE SALES SLIPS ARE IN RANDOM ORDER WITH ONE SLIP PER SALE. |
INPUT : | SALESPERSON'S NUMBER (saleno) |
OUTPUT : | NUMBER OF WINNING SALESPERSON NUMBER OF BOXES SOLD BY WINNER |
A ONE DIMENSIONAL ARRAY (totals) WHICH WILL CONTAIN THE RUNNING SUMS OF THE VARIOUS SALES PEOPLE |
CALCULATE TOTALS LOCATE WINNER PRINT WINNER |
CALCULATE TOTALS | |||
WHILE MORE SALES SLIPS | |||
GET SALES UPDATE TOTALS |
|||
LOCATE WINNER | |||
FIND WHICH TOTAL IS THE LARGEST | |||
PRINT WINNER |
FIND WHICH TOTAL IS THE LARGEST | |||||
SET MAXBOXES TO FIRST TOTAL SET WINNER TO 1 WHILE MORE TOTALS |
|||||
IF MAXBOXES < CURRENT TOTAL | |||||
THEN MAXBOXES IS CURRENT TOTAL | |||||
SET WINNER TO CURRENT SALESPERSON | |||||
GET SALES | |||||
READ(SALENO, BOXES) | |||||
UPDATE TOTALS | |||||
TOTALS[SALENO] IS TOTAL[SALENO] + BOXES |
PROGRAM CONTEST(INPUT, OUTPUT);
CONST
N = 25;
TYPE
ARY = ARRAY[1..N] OF INTEGER;
VAR
MAXBOXES, WINNER : INTEGER;
TOTALS : ARY;
(PROCEDURES)
BEGIN
ZERO(TOTALS);
CALCULATE(TOTALS);
LOCATE(WINNER, MAXBOXES, TOTALS);
WRITELN(WINNER, MAXBOXES);
END.
PROCEDURE ZERO( VAR TOTALS : ARY );
VAR I : INTEGER;
BEGIN
I := 1;
WHILE I <= N DO
BEGIN
TOTALS[I] := 0;
I := I + 1
END;
END;
PROCEDURE CALCULATE( VAR TOTALS : ARY );
VAR
SALENO, BOXES : INTEGER;
BEGIN
READ( SLAENO );
WHILE NOT EOF DO
BEGIN
READ( BOXES );
TOTALS[SALENO] := TOTALS[SALENO] + BOXES;
READ( SALENO );
END;
END;
PROCEDURE LOCATE( VAR WINNER, MAXBOXES : INTEGER, VAR TOTALS : ARY );
VAR
I : INTEGER
BEGIN
MAXBOXES := TOTALS[1];
WINNER := 1;
I := 2;
WHILE I <= N DO
BEGIN
IF MAXBOXES < TOTALS[I] THEN
BEGIN
WINNER := I;
MAXBOXES := TOTALS[I];
END;
I := I + 1;
END;
END;
SUMMARIZE
DATA STRUCTURES
ONE DIMENSION ARRAY
DEFINE:
TYPE ARY = ARRAY[1..25]
VAR TOTALS :ARY
USE:
TOTALS[I] where I must be between 1 and 25
RUNNING SUMS
FOR I := 1 TO 25 DO statment