{ File: filereal.pas }

program FileGen;
{ Legge un file text di reali, ne calcola e stampa la somma e la media,
  stampando tali valori in output e nel file di reali FILEREAL.OUT.
  Poi legge i reali codificati in FILEREAL.OUT e li stampa in output e sul file
  text REAL2.DAT. }

var
  textfile : text;           { file testo per l'input/output }
  realfile : file of real;   { file di reali per l'output/input }
  quanti   : integer;        { per contare i numeri letti dal file di input }
  media,  somma,
  x        : real;           { per leggere i reali in input }


  procedure StampaLinea (numast: integer);
  { Stampa una linea di '*' lunga numast. }
  var
    i : integer;
  begin
    for i := 1 to numast do
      write('*')
  end;


begin  { FileGen }
  writeln('assegnazione in lettura file ''REAL.TXT''');
  assign(textfile, 'REAL.TXT');
  reset(textfile);

  writeln('assegnazione in scrittura file ''FILEREAL.OUT''');
  assign(realfile, 'FILEREAL.OUT');
  rewrite(realfile);

  writeln('inizio ciclo lettura del file');
  somma := 0;
  quanti := 0;
  while not eof(textfile) do
  begin
    readln(textfile, x);
    writeln(' ho letto ', x);
    somma := somma + x;
    quanti := quanti + 1
  end;

  media := somma / quanti;

  writeln('media = ', media:8:2);            { stampa in output }
  write(realfile, media);                    { stampa su file di output }
  writeln('somma = ', somma:8:2);
  write(realfile, somma);

  writeln('<RET> per continuare');
  readln;

  writeln('adesso stampo l''output su video e su file text di output:');

  reset(realfile);              { riapertura in lettura del file FILEREAL.OUT }

  close(textfile);
  assign(textfile, 'REAL2.TXT');
  rewrite(textfile);

  { ora e' il textfile ad essere in scrittura }
  while not eof(realfile) do
  begin
    read(realfile, x);
    writeln(x : 8 : 2);
    writeln(textfile, x : 8 : 2)
  end;
  close(textfile);
  close(realfile);

  writeln('<RET> per finire');
  readln
end. { FileGen }