Programer des fichiers en pascal

Résolu/Fermé
mira - 6 juin 2008 à 20:46
 mira - 9 juin 2008 à 15:06
Bonjour, je me présente, je suis en première année universitaire (MIAS). on nous a demander de réaliser un projet sur les enregistrement et les fichiers. et j'avoue en avoir du mal. et comme dernier recoure j'ose vous demander de prendre quelque minute de votre temps et d y jetais un coup d'œil. et me faire part de mes erreurs si c'est possible. je vous remercie d'avance. je vous laisse aussi mon mon e-mail: pierre.precieuse@hotmail.fr

program projet;
uses crt;
type
date=record
jour:1..31;
mois:1..12;
annee:1958..1990;
end;
lieu=record
dep:1..48;
end;
malade=record
num:integer;
nom:string[20];
prenom:string[20];
date_naissance:date;
lieu_naissance:lieu;
tel:string[20];
adresse:string;
rdv:date;
diagnostique:string[20];
end;
var
f:file of malade;
c:malade;
choix,rep:char;

procedure saisie;
var rep:char;
begin
rep:='o';
while rep='o' do
begin
clrscr;
write('numero: ');readln(c.num);
write('nom: ');readln(c.nom);
write('prenom: ');readln(c.prenom);
writeln('date de naissance:');
write('le jour: '); readln(c.date_naissance.jour);
write('le mois: '); readln(c.date_naissance.mois);
write('annee: ');readln(c.date_naissance.annee);
write('tel: ');readln(c.tel);
write('adresse: ');readln(c.adresse);
writeln('rendez-vous: ');
write('le jour:');readln(c.rdv.jour);
write('le mois:');readln(c.rdv.mois);
write('annee:');readln(c.rdv.annee);
write('diagnostique');readln(c.diagnostique);
write(f,c);writeln;
writeln('voulez-vous continuer la saisie o/n');
readln(rep);
end;
end;
procedure ajout;
begin

seek(f,filesize(f));
saisie;

end;
function recette:integer;
var
patient:char;
prix:integer;
begin
writeln('Est-ce que le patient est Pr‚sent ou Absent a/p ?');readln(rep);
if patient='p'then begin
writeln ('entrer le prix de la consultation:');readln(prix);
recette:=recette +prix;
writeln('La recette est de : ',recette);
end
else begin
writeln('le malade a annuler son rendez-vous');
writeln('La recette est de : ',recette);
end;

end;
function recherche:boolean;
begin
reset(f);clrscr;
writeln('donner le numero du malade:'); readln(c.num);
writeln('donner le nom du malade:');readln(c.nom);
writeln('donner la date du rendez-vous:');
writeln('le jour: ');readln(c.rdv.jour);
writeln('le mois: ');readln(c.rdv.mois);
writeln('annee: ');readln(c.rdv.annee);
while not eof(f) do
begin
read(f,c);
if(num=c.num)and(nom=c.nom)and(rdv=c.rdv.jour.mois.annee) then recherche :=true
else recherche := false;
end;
end;
//===============================Programme Principal========================
begin
assign (f,'C:\etudiant.dat'); rewrite(f);
clrscr;
rep:='o';
while rep='n' do
begin
clrscr;
textbackground(black);clrscr;
writeln('veuillez faire un choix dans le menu suivant :');
writeln('_______________________________________________');
writeln('1:saisie des donnees des malades');
writeln('2:recherche d''un malade par son numero ou son nom ou son rdv');
writeln('3:ajouter une saisie');
writeln('4:calculer la recette');
writeln('5:quitter le programme');
readln(choix);
case choix of
'1':saisie;
'2':begin clrscr;
recherche;
if recherche then
begin textcolor(5);write(' le diagnostique de ',nom,' est: ',c.diagnostique);textcolor(7);
end
else write('Ce patient n''existe pas.');
end;
'3':ajout;
'4':recette;
'5':exit
else writeln('votre choix est incorrect');
end;
writeln;
textcolor(4);gotoxy(18,18);writeln('voulez-vous continuer a faire un choix oui/non?'); readln(rep);
end;
close(f);
end.
A voir également:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
6 juin 2008 à 21:47
Plusieurs remarques :

function recette :
Tu utilise à la première ligne, "read(rep)", mais tu utilise "if patient", vire le "patient" et utilise "rep" (ou l'inverse)

function recherche :
Tu essaye de faire "if(num=c.num)..." utilise un "var d:malade" et fais "if(d.num=c.num)..."
De plus tu fais "rdv=c.rdv.jour.mois.annee" ce qui est bien sûr incompréhensible pour l'ordi, fais plutôt "(d.rdv.jour=c.rdv.jour)and(d.rdv.mois=c.rdv.mois)and(d.rdv.annee=c.rdv.annee)"

programme principal :
Tu écris "write(' le diagnostique de ',nom,' est: ',c.diagnostique); mais "nom" n'existe pas, remplace le par c.nom
De plus ta boucle "rep:='o'; while rep='n' do" n'est jamais vérifiée, elle est fausse dès l'initialisation...

Après ces quelques rectifications, le programme marche, mais quant à savoir s'il fait ce qu'on veut de lui.

PS:
Je sais que la méthode d'apprentissage est différente d'une fac à l'autre, mais il vaudrait peut-être mieux que tu utilises des procedure avec des variables à transporter (exemple function recherche(var f:file of malade;var c:malade):boolean) plutôt que d'utiliser des variables globales, car c'est la principale source de tes erreurs.
De plus pour corriger toi même tes erreurs il te faudrait un programme comme dev-pascal qui possède un débugeur assez performant, ça aide grandement à identifier où sont les erreurs de language et les programmes sont sensiblement les mêmes...
0
boujours
Effectivement, j’ai fais ce que tu ma dis et ça a fonctionné. Malgré quelque imperfection que je vais tenter de régler, il s’exécute globalement plutôt bien. Je tenais à te remercier de m’avoir aider, et d’avoir étais aussi explicite dans tes repenses. (Je dois avouer que je ne m’attendais pas a une repense aussi claire).
Merci encore.
0