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.



RETURN to CSCI 1200 Home Page

- John Rieman