PROGRAM p6(Input,Output,Infile,Outfile); { Mel Simmons Program 6 } CONST MAXSCORE = 200; PAGESIZE = 60; NAMESIZE = 20; Type NameType = Array[1..NAMESIZE] Of Char; VAR Test1, Test2, Final:Integer; Percent:Real; Outfile, Infile:Text; LineCt:Integer; FirstTime:Boolean; TotPercent, MinPercent, MaxPercent:Real; StuCt:Integer; Name:NameType; PROCEDURE Initialize(VAR LineCt, StuCt:Integer; VAR FirstTime : Boolean; VAR TotPercent, MinPercent, MaxPercent:Real); BEGIN {Initialize} LineCt := PAGESIZE + 1; FirstTime := True; StuCt := 0; TotPercent := 0.0; MinPercent := 99999.0; MaxPercent := -9E20; END; {Initialize} Procedure ReadName(Var Name:NameType); Var I:Integer; Ch:Char; Begin {ReadName} I := 1; While Not Eoln(Infile) Do Begin Read(Infile, Ch); If I <= NAMESIZE Then Begin Name[I] := Ch; I := I + 1; End; End; Readln(Infile); For I := I To NAMESIZE Do Name[I] := ' '; End; {ReadName} Procedure PrintName(Name:NameType); Var I:Integer; Begin {PrintName} For I := 1 to NAMESIZE Do Write(Outfile, Name[I]); End; {PrintName} PROCEDURE ProcessStu( Test1, Test2, Final:Integer; VAR StuCt:Integer; VAR Percent, TotPercent, MinPercent, Maxpercent:Real); BEGIN {ProcessStu} Percent := (Test1 + Test2 + Final) * 100 / MAXSCORE; StuCt := StuCt + 1; TotPercent := TotPercent + Percent; IF Percent > MaxPercent THEN MaxPercent := Percent; IF Percent < MinPercent THEN MinPercent := Percent; END; {ProcessStu} PROCEDURE PrintSummary(VAR F:Text; StuCt:Integer; TotPercent, MinPercent, MaxPercent:Real); VAR AvgPercent:Real; BEGIN {PrintSummary} IF StuCt > 0 THEN AvgPercent := TotPercent / StuCt ELSE AvgPercent := 0; Writeln(F); Writeln(F,'Number of Students: ', StuCt:1); Writeln(F,'Average Percent: ', AvgPercent:1:1); Writeln(F,'Minimum Percent: ', MinPercent:1:1); Writeln(F,'Maximum Percent: ', MaxPercent:1:1); END; {PrintSummary} BEGIN {P6} Assign(Infile, 'c:\scores.txt'); Reset(Infile); Assign(Outfile, 'c:\report.txt'); Rewrite(Outfile); Initialize(LineCt, StuCt, FirstTime, TotPercent, MinPercent, MaxPercent); While Not EOF(Infile) Do Begin IF LineCt >= PAGESIZE Then Begin IF FirstTime Then FirstTime := False Else Write(Outfile, chr(12)); Writeln(Outfile, ' ':NAMESIZE, 'Test Test'); Writeln(Outfile, ' Name':1, '1':NAMESIZE-2,' 2 Final Percent'); Writeln(Outfile); LineCt := 3; End; Read(Infile, Test1, Test2, Final); ReadName(Name); ProcessStu(Test1, Test2, Final, StuCt, Percent, TotPercent, MinPercent, MaxPercent); PrintName(Name); Write(Outfile, Test1:3, Test2:10, Final:10, Percent:10:1); IF Percent >= 60 THEN Writeln(Outfile, 'Pass':10) ELSE Writeln(Outfile, 'Fail':10); LineCt := LineCt + 1; End; PrintSummary(Output, StuCt, TotPercent, MinPercent, MaxPercent); PrintSummary(OutFile, StuCt, TotPercent, MinPercent, MaxPercent); Close(Outfile); Readln; END. {P6}