Fichier

badda007 -  
 cbsmaster -
j'ai un probléme dans le programme principal
audez moi svp

program course;
uses wincrt;
type
athlete=record
nom:string;
course:integer;
records:real;
end;

fathlete=file of athlete;
tab = array[1..100]of athlete;
var
a:athlete;
fa:fathlete;
i,n:integer;
t:tab;
choix:string;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure creer (var fafathlete);
begin
{$i-}
assign (fa,'c:\bac2008\olymp.dat');
reset (fa);
if (ioresult<>0)
then
rewrite (fa);
{$i+}
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure ajout (var fa:fathlete;a:athlete);
begin
reset (fa);
with a do
begin
write ('donner le nom '); readln (nom);
write ('donner la course '); readln (course);
write ('donner le record '); readln (records);
end;
seek (fa,filesize(fa));
write (fa,a);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure tab2file (var fa:fathlete;t:tab;n:integer);
var
i:integer;
begin
reset (fa);
for i:=1 to n do
begin
write (fa,t[i]);
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure tri_course (var t:tab;n:integer);
var
aux:athlete;
echange:boolean;
begin
repeat
echange:= false;
for i := 1 to n-1 do
begin
if (t[i].course>t[i+1].course)
then
begin
aux:=t[i];
t[i]:= t[i+1];
t[i+1] := aux;
echange:= true;
end;
end;
until (echange=false);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure tri_records (var t:tab;debut,fin:integer);
var
aux:athlete;
echange:boolean;
begin
repeat
for i := debut to fin-1 do
begin
if (t[i].records>t[i+1].records)
then
begin
aux:=t[i];
t[i]:= t[i+1];
t[i+1] := aux;
echange:= true;
end;
end;
until (echange=false);
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure tri(var t:tab;n:integer);
var
debut,fin:integer;
begin
tri_course (t,n);
debut:=1;
fin:=0;

for i:= 1 to n do
begin
fin:= fin+1;
if(t[i].course<>t[i+1].course)
then
begin
writeln (i-fin+1,fin);
tri_records(t,i-fin+1,i);
fin:=0;
end;
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure fichier2tab(var fa:fathlete;var t:tab);
var
i:integer;
begin
reset (fa);
i:=0;
while(not EOF(fa))do
begin
i:=i+1;
read (fa,t[i]);
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure list_ordre(var fa:fathlete ;var t:tab;var n:integer);
begin
reset (fa);
n:=filesize (fa);
fichier2tab(fa,t);
tri(t,n);
for i:=1 to n do
begin
with t[i]do
begin
writeln (nom,'',course,'',records);
end;
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure meilleur_athlete (var fa:fathlete;vart:tab; var n:integer);
begin
reset (fa);
n:=filesize (fa);
fichier2tab (fa,t);
tri(t,n);
i:=1;
while (i<=n)do
begin
writeln ('coureur: ',t[i].nom,'course',t[i].course,'record',t[i].records);
repeat
i:=i+1;
until (t[i].course<>t[i-1].course);
end;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure affichage (var fa:fathlete;a:athlete);
begin
reset(fa);
while (not EOF(fa))do
begin
read (fa,a);
with a do
begin
writeln (nom);
writeln (course);
writeln (records);
end;
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
begin
creer (fa);
repeat
writeln ('S: Ajout un athlete àla fin du fichier');
writeln ('T: Classer les athléte par ordre croissent');
writeln ('A: Determiner par course le meilleur athlete');
writeln ('Q: quité le program');
repeat
writeln ('Saisir votre choix ');readln (choix);
until(upcase (choix) in ['S','T,'A,'Q']);
case choix of
's','S' :ajout (fa,a);
'a','A' :meilleur_athlete(fa,t,n);
't','T' :Liste_ordre (fa,t,n);
end;
until (upcase (choix)='Q');
close (fa);
end.
A voir également:

2 réponses

amigo
 
Bonjour,

- La première erreur vient du fait que tu déclare choix en string, alors que la fonction ucase demande un char en argument.
- Idem pour case.
- Il manque des guillemets dans cette ligne : until(upcase (choix) in ['S','T,'A,'Q']);
- La fonction Liste_ordre (fa,t,n); n'est pas définie

La correction:
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} 
begin 
creer (fa); 
repeat 
writeln ('S: Ajout un athlete àla fin du fichier'); 
writeln ('T: Classer les athléte par ordre croissent'); 
writeln ('A: Determiner par course le meilleur athlete'); 
writeln ('Q: quité le program'); 
repeat 
write ('Saisir votre choix ');readln (choix);
until(upcase (choix[1]) in ['S','T','A','Q']); 
case choix[1] of 
's','S' :ajout (fa,a); 
'a','A' :meilleur_athlete(fa,t,n); 
't','T' :List_ordre (fa,t,n); 
end; 
until (upcase (choix[1])='Q'); 
close (fa); 
end.


Je n'ai pas executé.

A+.
0
cbsmaster
 
bonjour a tous !! j'aimerai savoir comment ouvrir un fichier .tst pour corriger des erreurs ? merci !!
0