scorechk.pas v.4: file open in proc that prompts for filename
October 1996
{ ============================================== }
{ Calc average of student scores, warn if < 60. }
{ v.4: Handle lines of ID + 3 scores from file }
{ - prompt for file name to open }
{ - loop until e-o-f, one student per line }
program avScores;
var
SID: integer;
Av, sc1, sc2, sc3: real;
warnString: string;
inFileID: TEXT;
{ ---------------------------------------------- }
{ use prompt string to prompt user for file name }
{ open file for mode r/w/a, return file ID }
{ - does not check for bad file name }
procedure PromptOpenFile(prompt: string;
mode: char;
var rfID: TEXT);
var fName: string;
begin
write(prompt);
readln(fName);
assign(rfID, fName);
if mode = 'r' then
reset(rfID)
else if mode = 'w' then
rewrite(rfID)
else if mode = 'a' then
append(rfID);
end;
{ ----------------------------------------------- }
{ return avg of 3 scores + warning if < warnLevel }
procedure calcAndCheck3(s1, s2, s3: real;
var avg: real;
var wstr: string);
const warnLevel = 60;
var Sum: real;
begin
Sum := s1 + s2 + s3;
avg := Sum/3;
if avg < warnLevel then
wstr := ' Warning!'
else
wstr := '';
end;
{ ========================================================= }
begin
promptOpenFile('Name of scores file: ','r',inFileID);
while not eof(inFileID) do
begin
readln(inFileID, SID, sc1, sc2, sc3);
calcAndCheck3(sc1,sc2,sc3,av,warnString);
writeln(SID, sc1:4:0, sc2:4:0, sc3:4:0,
' Average =', Av:6:1, warnString);
end;
close(inFileID);
end.
- John Rieman