program Doping;
const
NumAtleti = 22;
LungSigla = 12;
type
TipoSigla = packed array [1..LungSigla] of char;
TipoData = record
giorno : 1..31;
mese : 1..12;
anno : 0..99
end;
TipoListaFarmaci = ^TipoRecordFarmaco;
TipoRecordFarmaco = record
sigla : TipoSigla;
data : TipoData;
next : TipoListaFarmaci
end;
TipoAtleta = record
matricola : integer;
prescrizioni : TipoListaFarmaci
end;
TipoArchivio = array [1..NumAtleti] of TipoAtleta;
TipoDoping = record
sigla : TipoSigla;
data : TipoData;
vietato : 0..1
end;
TipoFileDoping = file of TipoDoping;
TipoNomeFile = string;
procedure FarmaciAmmessi (var lista_farmaci : TipoListaFarmaci;
nome_file : TipoNomeFile);
var
f : TipoFileDoping;
doping : TipoDoping;
paux : TipoListaFarmaci;
begin
lista_farmaci := NIL;
assign(f, nome_file);
reset(f);
while not eof(f) do
begin
read(f, doping);
if doping.vietato = 1 then
begin
new(paux);
paux^.sigla := doping.sigla;
paux^.data := doping.data;
lista_farmaci := paux
end
end;
close(f)
end;
function DataNonAnteriore (data1, data2: TipoData): boolean;
begin
DataNonAnteriore :=
(data1.anno > data2.anno) or
((data1.anno = data2.anno) and
((data1.mese > data2.mese) or ((data1.mese = data2.mese) and
(data1.giorno > data2.giorno))))
end;
procedure EliminaPrescrizioniVietate (var archivio : TipoArchivio;
nome_file : TipoNomeFile);
var
f : TipoFileDoping;
doping : TipoDoping;
i : 1..NumAtleti;
procedure EliminaPrescrizione (var lista_farmaci : TipoListaFarmaci;
dop : TipoDoping);
var
paux : TipoListaFarmaci;
begin
if lista_farmaci <> NIL then
begin
EliminaPrescrizione(lista_farmaci^.next, dop);
if (lista_farmaci^.sigla = dop.sigla) and
DataNonAnteriore(lista_farmaci^.data, dop.data) then
begin
paux := lista_farmaci;
lista_farmaci := lista_farmaci^.next;
dispose(paux)
end
end
end;
begin
assign(f, nome_file);
reset(f);
while not eof(f) do
begin
read(f, doping);
if doping.vietato = 0 then
for i := 1 to NumAtleti do
EliminaPrescrizione(archivio[i].prescrizioni, doping)
end;
close(f)
end;
begin
end.