When all the scores have been processed, a summary showing the number of students taking the exam, the highest score, the lowest score, and the average score (accurate to one decimal place) is to be displayed. The summary information is to be suppressed if no students take the exam.
EXAM ANALYSIS Enter score (or -1 to finish) iiiii Enter score (or -1 to finish) iiiii ... ... ... ... ... ... Enter score (or -1 to finish) -1 Number of students is iiiii Highest score is iiiii Lowest score is iiiii Average score is fff.f
NAME | TYPE | Notes |
---|---|---|
num_stu | INTEGER | no of students |
min_so_far | INTEGER | minimum so far |
max_so_far | INTEGER | maximum so far |
this_score | INTEGER | current student's score |
total_scores | INTEGER | total of all scores |
average_score | FLOAT | average score per student |
1. do init 1.1 get a score 1.2 init variables 2. do students 2.1 while more scores 2.2 increment number of students 2.3 add score to total 2.4 check if have a new max or min score 2.5 prompt for and get next score 3. do summary 3.1 display number of students 3.2 if some students took the exam 3.3 calculate average 3.4 display summary info
-- Fintan Culwin Sept '88 v1.0 -- program to illustrate simple definite iteration -- b1s6p1 see text pp75-76 with TEXT_IO; package int_io is new TEXT_IO.INTEGER_IO( INTEGER ); with TEXT_IO; package float_inout is new TEXT_IO.FLOAT_IO( FLOAT ); with TEXT_IO, int_io, float_inout; use TEXT_IO, int_io, float_inout; procedure b1s6p2 is num_stu : INTEGER; -- num students processed min_so_far : INTEGER; -- min score recorded max_so_far : INTEGER; -- max score recorded total_score : INTEGER; -- total of all scores this_score : INTEGER; -- current score average_score : FLOAT; -- final average begin -- of b1s6p1 -- do init PUT( "Enter score (or -1 to finish) "); GET( this_score); SKIP_LINE; num_stu := 0; -- zero num students done total_score := 0; -- total score is zero min_so_far := this_score; -- min score so far max_so_far := this_score; -- max score so far -- do students while (this_score >= 0) loop num_stu := num_stu + 1; total_score := total_score + this_score; if this_score > max_so_far then max_so_far := this_score; elsif this_score < min_so_far then min_so_far := this_score; end if; PUT("Enter score (or -1 to finish) "); GET( this_score); SKIP_LINE; end loop; -- do summary NEW_LINE(2); PUT("No of students is "); PUT( num_stu, width => 4); NEW_LINE; -- if some students took the exam, display summary info if (num_stu > 0) then average_score := float(total_score)/float(num_stu); PUT("Highest score is "); PUT( max_so_far, width => 8); NEW_LINE; PUT("Lowest score is "); PUT( min_so_far, width => 8); NEW_LINE; PUT("Average score is "); PUT( average_score, fore => 4, aft => 2, exp => 0); NEW_LINE; end if; end b1s6p2;