{ Assignment 6 }
{ Written by Bryan Bridges }

program assign06;

{ Declare Constants }
const
   Title1 = '                     Gheresus'' University';
   Title2 = '                     ********************';
   Title3 = '                      Final Grade Report';
   Title4 = '                      ==================';
   Title5 = 'Name       ID         Score1       Score2     Score3     Average';
   Title6 = '================================================================';
   Title7 = '****************************************************************';
   Title8 = 'Statistics :';
   Title9 = '============';
   Title10 = 'Class Overall Average Grade = ';
   Title11 = 'Highest Class Average Grade = ';
   Title12 = 'Lowest  Class Average Grade = ';

{ Declare Variables }
var
   name : string [11];
   id : integer;
   score1, score2, score3, s_average, c_sum, c_average, c_high, c_low : real;
   Input, Output : text;
   s_score : array [1..10] of real;
   I : integer;

procedure Student_Average;
{ Calculate Student's Average Score }
   begin
        s_average := (score1 + score2 + score3)/(3);
   end;

procedure Student_Output;
{ Write Student Output }
  begin
       writeln (Output, name, id, score1:13:1, ' ', score2:12:1, ' ', score3:10:1, ' ', s_average:11:2);
  end;

procedure Class_Scores;
{ Calculate Class' Score }
  begin
        { Calculate Class' Average Score }
        s_score[I] := s_average;
        c_sum := c_sum + s_score[I];
        c_average := c_sum/10;

        { Calculate Class' High Score }
        if s_score[I] > c_high
           then c_high := s_score[I];

        { Calculate Class' Low Score }
        if s_score[I] < c_low
           then c_low := s_score[I];
  end;

{ Start Main Program }
begin

{ Assign Input & Output Files }
   assign (Input, 'D:\FILES\BAB''S\PASCAL\ASSIGN06.INP');
   reset (Input);
   assign (Output, 'D:\FILES\BAB''S\PASCAL\ASSIGN06.OUT');
   rewrite (Output);

{ Write Output Header Part 1 }
   writeln (Output, Title1);
   writeln (Output, Title2);
   writeln (Output);
   writeln (Output, Title3);
   writeln (Output, Title4);
   writeln (Output);
   writeln (Output, Title5);
   writeln (Output, Title6);

{ Assign Class' High & Low Values }
   c_high := 0.00;
   c_low := 100.00;

{ Read Input & Calculate Scores }
   for I := 1 to 10 do
   begin
       readln (Input, name, id, score1, score2, score3); { Read Input File }
       Student_Average; { Calculate The Student's Average Score }
       Student_Output; { Write Student Output }
       Class_Scores; { Calculate Class' Score }
   end;

{ Write Output Header Part 2 }
   writeln (Output, Title7);
   writeln (Output);
   writeln (Output);
   writeln (Output, Title8);
   writeln (Output, Title9);
   writeln (Output);
   writeln (Output, Title10, c_average:3:2);
   writeln (Output, Title11, c_high:3:2);
   writeln (Output, Title12, c_low:3:2);

{ End Main Program }
end.
