program RisultatiFineAnno;
uses crt;
type tclasse=record // record riguardante ogni classe.
classe:byte;
Iscritti, promossi, bocciati:word;
PercPromossi,PercBocciati:real;
end;
var f: file of tclasse; // Nome logico del file
v:tclasse; // record che userò per leggettura e scrittura su file
percorso:string;
i:integer;
procedure GeneraCasuale(var c:tclasse; n:integer);
begin
with c do // accedo ai campi di c
begin
classe:=n;
iscritti:=random(200);
promossi:=1+random(iscritti);
bocciati:=iscritti-promossi;
PercPromossi:=100*(promossi/iscritti);
PercBocciati:=100*(bocciati/iscritti);
end;
end;
begin
clrscr;
GetDir(0, percorso); // ricerca della cartella in cui si trova il file.
assign(f, percorso+'\classi.dat'); // apertura del file
rewrite(f); { attenzione! Non faccio alcun controllo su
un eventuale file "classi.dat" preesistente! }
{ inserzione dati }
randomize;
for i:=1 to 5 do
begin
GeneraCasuale(v, i); // per brevita genero casualmente i dati da inserire
write(f, v); // scrittura su file del record
end;
{ non faccio il confronto con i dati dell' anno precedente siccome non conosco
la struttura esatta del file testuele}
close(f); // chiusura del file, necessaria per salvare i dati
{ Eseguo una rilettura del file}
reset(f); { riapertura del file. Attenzione!
Per brevità do per scontato che il file "classi.dat" esista.}
for i:=0 to 4 do { i file tipicizzati si possono considerare vettori
di record. Essi partono sempre da 0 e hanno una lunghezza
indefinita, perciò per leggere i record delle 5 classi,
partirò con un' indice a zero per arrivare fino a 4}
begin
seek(f, i); // pisizionamento sull' i_esimo record del file
read(f, v); {lettura del record.
comunque, l' istruzione read su file fa avanzare l' indice
di lettura di un record sul file}
with v do // accedo ai campi di v
begin
writeln('Classe ',classe,' iscritti: ',iscritti:4);
writeln('Promossi: ',promossi:4,' bocciati: ',bocciati:4);
writeln('Percentuali: promossi ',PercPromossi:6:2,'% bocciati ',PercBocciati:6:2,'%');
writeln('----------------------------');
end;
end;
writeln('####################');
{ infine "conto" quanti record sono presenti nel file.
Istruzione utile per aggiungere eventuali record alla fine del file}
writeln('Nel file sono presenti:',FileSize(f),' record.');
readln;
close(f);
end.