PROBLEM : | PRINT OUT A LIST OF THE STUDENTS AND THEIR LETTER GARDES. THE LIST SHOULD BE IN ALPHABETIC ORDER. THE GRADING SCHEME IS AS FOLLOWS: |
NUMBER GRADE 90 + 80 - 89 67 - 79 55 - 66 below 55 |
LETTER GRADE A B C D F |
INPUT : | LAST NAME (last) FIRST NAME (first) SIX TEST GRADES (grade) |
OUTPUT : | LAST NAME FIRST NAME |
RECORD : LAST : PACKED ARRAY[1..20] OF CHAR FIRST : PACKED ARRAY[1..20] OF CHAR LETGRADE : CHAR ARRAY OF SUCH RECORDS |
WHILE MORE STUDENTS | ||
GET NAME GET AVERAGE GET LETTER GRADE |
||
SORT |
GET AVERAGE & GET LETTER GRAD CAN BE USED EXACTLY AS THEY WERE WRITTEN FOR IN CHAPTER SIX !!! |
GET NAME (a ',' seperates the first name and last name) | ||
GET LAST GET FIRST |
GET LAST | ||
GET NEXT LETTER IF NOT A ',' ADD TO LAST NAME |
||
GET FIRST | ||
GET NEXT LETTER IF NOT A ' ' ADD TO FIRST NAME |
SORT COULD WE POSSIBLY USE THE ONE IN MODULE 12? |
|||||||||||||||
PROBLEM : | THE RECORD DESCRIPTION IS DIFFERENT. SINCE WE ARE DEALING WITH PACKED ARRAY, WHAT HAPPENS IF WE JUST CHANGE THE TYPE IN THE PROCEDURE AND FUNCTION HEADINGS? YES, IT WILL WORK |
LAST (string20) |
FIRST (string20) |
L E T G R A D E |
|||||||||||||
1 2 500 |
|
DALE ORSHALICK |
NELL DAVID |
A A |
PROGRAM GRADES(INPUT, OUTPUT);
CONST
LIMIT = 500;
COMMA = ',';
BLANK = ' ';
TYPE
STRING20 = PACKED ARRAY [1..20] OF CHAR;
PERSON = RECORD
LAST : STRING20
FIRST : STRING20
LETGRADE : CHAR;
END;
CLASS = ARRAY [1..LIMIT] OF PERSON;
VAR
ROLL : CLASS;
I, NUMSTUDENTS : INTEGER;
AVERAGE : REAL;
GRADE : CHAR
NAME : STRING20;
BEGIN
I := 0;
WHILE NOT EOF DO
BEGIN
I := I + 1;
GETNAME( NAME, COMMA );
ROLL[I].LAST := NAME;
GETNAME( NAME, BLANK );
ROLL[I].FIRST := NAME;
GETAVERAGE(AVERAGE);
GETLETGRADE( AVERAGE, GRADE );
ROLL[I].LETGRADE := GRADE;
READLN;
END;
NUMSTUDENTS := I;
SORT( ROLL, NUMSTUDENTS );
PRINT( ROLL, NUMSTUDENTS );
END.
PROCEDURE GETNAME( VAR NAME : STRING20; SEPARATOR : CHAR );
CONST
BLANKS = ' ';
VAR
CH : CHAR;
I : INTEGER;
BEGIN
I := I;
NAME := BLANKS;
READ(CH);
WHILE CH = BLANK DO
READ(CH);
WHILE CH <> SEPARATOR DO
BEGIN
NAME[I] := CH;
I := I + 1;
READ(CH);
END;
END;
PROCEDURE GETAVERAGE( VAR AVERAGE : REAL );
CONST
NUMGRADES = 6;
VAR
I, TOTAL, GRADE : INTEGER;
BEGIN
TOTAL := 0;
FOR I := 1 TO NUMGRADES DO
BEGIN
READ(GRADE);
TOTAL := TOTAL + GRADE;
END;
AVERAGE := TOTAL / NUMGRADES;
END;
PROCEDURE GETLETGRADE( NUMGRADE : REAL; VAR LETGRADE : CHAR );
BEGIN
IF NUMGRADE >= 90 THEN LETGRADE := 'A'
ELSE IF NUMGRADE >= 80 THEN LETGRADE := 'B'
ELSE IF NUMGRADE >= 67 THEN LETGRADE := 'C'
ELSE IF NUMGRADE >= 55 THEN LETGRADE := 'D'
ELSE LETGRADE := 'F';
END;
DATA STRUCTURE | ||
PACKED ARRAY : EACH CHARACTER CAN BE ACCESSED BY ITS POSITIO : NAME[I] PACKED ARRAY VARIABLE CAN BE ACCESSED AS A WHOLD ROLL[I].LAST := NAME |
||
PROCEDURES & FUNCTIONS | ||
WRITTEN FOR ONE PURPOSE CAN BE USED IN ANOTHER WITH LITTLE OR NO MODIFICATION |