Programme juste mais n'affichre rien!!!
Résolu
Rahmouni007
Messages postés
155
Date d'inscription
Statut
Membre
Dernière intervention
-
Rahmouni007 Messages postés 155 Date d'inscription Statut Membre Dernière intervention -
Rahmouni007 Messages postés 155 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voici l'énoncé de l'exercice :
One se propose d'écrire un programme pascal qui permet de :
Ø Remplir un vecteur d'enregistrement T par n enregistrement nommé enreg1 avec (n>2). Chaque enregistrement comporte 4 champs.
Nom et prénom : chaîne de caractère [50].
NT : réel.
NC : réel.
NS : réel.
Ø à partir de vecteur T Créer un fichier type qui comporte n enregistrement nommé enreg2 dont le nom est « C:\notes.dat ». chaque enregistrement comporte 3 champs.
Nom et prénom : chaîne de caractère [50].
Moyenne : réel.
Décision : chaîne de caractère [10].
N.B
Moyenne = (NT+NC+2*NS)/4
La décision est « admis » si la moyenne>=10, « refuser » sinon.
Ø Afficher le contenu de fichier « C:\notes.dat ».
voici l'a corrigé de l'exercice :
vos commentaires VU QUE CA M'AFFICHE RIEN
voici l'énoncé de l'exercice :
One se propose d'écrire un programme pascal qui permet de :
Ø Remplir un vecteur d'enregistrement T par n enregistrement nommé enreg1 avec (n>2). Chaque enregistrement comporte 4 champs.
Nom et prénom : chaîne de caractère [50].
NT : réel.
NC : réel.
NS : réel.
Ø à partir de vecteur T Créer un fichier type qui comporte n enregistrement nommé enreg2 dont le nom est « C:\notes.dat ». chaque enregistrement comporte 3 champs.
Nom et prénom : chaîne de caractère [50].
Moyenne : réel.
Décision : chaîne de caractère [10].
N.B
Moyenne = (NT+NC+2*NS)/4
La décision est « admis » si la moyenne>=10, « refuser » sinon.
Ø Afficher le contenu de fichier « C:\notes.dat ».
voici l'a corrigé de l'exercice :
PROGRAM DC1; USES WINCRT; TYPE enreg1=record nom_prenom:string[50]; NT,NC,NS:real; end; enreg2=record nom_prenom2:string[50]; moy:real; decision:string[10] end; notes=file of enreg2; tab=array [3..100] of enreg1; var t:tab; e1:enreg1; e2:enreg2; f:notes; n:integer; procedure remplir(var t:tab;n:integer); var i:integer; begin repeat writeln('Entrer le nombre d''enregistrements'); readln(n); until(n>2); for i:=1 to n do begin with t[i] do begin write('donner le nom et le prénom: '); readln(Nom_prenom); write('donner NT: '); readln(NT); write('donner NC: '); readln(NC); write('donner NS: '); readln(NS); end; end; end; procedure creation (var f:notes;t:tab;n:integer;VAR e2:enreg2); var i:integer; begin for i:=1 to n do begin e2.nom_prenom2:=t[i].nom_prenom; e2.moy:=(t[i].nt+t[i].nc+2*t[i].ns)/4; if e2.moy>=10 then e2.decision:='admis' else e2.decision:='refuser'; write(f,e2); end; end; procedure afficher(var f:notes;e2:enreg2); begin reset(f); while(not eof(f)) do begin read(f,e2); with e2 do begin write(nom_prenom2,' ',moy:5:2,' ',decision); end; end; close(f); end; begin assign(f,'c:\notes.dat'); rewrite(f); remplir(t,n); creation(f,t,n,e2); afficher(f,e2); end.
vos commentaires VU QUE CA M'AFFICHE RIEN
A voir également:
- Programme juste mais n'affichre rien!!!
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
7 réponses
Bonjour
Il y a longtemps que je n'ai pas fait de Pascal, mais il me semble qu'un flush(f) à la fin de creation ne ferait pas de mal.
Les "write" écrivent dans un buffer et pas vraiment dans le fichier. Donc si tu ne le refermes pas avant d'essayer de le lire, il faut au moins vider ce buffer dans le fichier réel, c'est le rôle de flush.
Il y a longtemps que je n'ai pas fait de Pascal, mais il me semble qu'un flush(f) à la fin de creation ne ferait pas de mal.
Les "write" écrivent dans un buffer et pas vraiment dans le fichier. Donc si tu ne le refermes pas avant d'essayer de le lire, il faut au moins vider ce buffer dans le fichier réel, c'est le rôle de flush.
merci mon ami mais flash ne fais pas parti de programme
est ce qu'il y a une solution dans ce programme même pour qu'il fonctionne
merci
est ce qu'il y a une solution dans ce programme même pour qu'il fonctionne
merci
flash ne fais pas parti de programme
Ça n'est pas gênant, je ne t'ai pas dit d'utiliser flash, mais flush.
Si tu n'es pas attentif, tes programmes ne sont pas près de marcher.
J'ai dit "si tu ne le refermes pas".
Ça sous-entend que si tu le refermes, ça va bien écrire dans le fichier.
Donc tu le refermes quand tu as fini d'écrire, ce qui est d'ailleurs bien plus logique. Mais n'oublie pas de le rouvrir pour le relire ensuite.
Ça n'est pas gênant, je ne t'ai pas dit d'utiliser flash, mais flush.
Si tu n'es pas attentif, tes programmes ne sont pas près de marcher.
J'ai dit "si tu ne le refermes pas".
Ça sous-entend que si tu le refermes, ça va bien écrire dans le fichier.
Donc tu le refermes quand tu as fini d'écrire, ce qui est d'ailleurs bien plus logique. Mais n'oublie pas de le rouvrir pour le relire ensuite.
Tu pourrais essayer par toi même de mettre un writeln à l'écran à côté de chaque write dans ton fichier pour voir si au moins ton programme essaye d'écrire dans le fichier. Tu verrais qu'il n'essaye même pas.
D'où vient la valeur de n qui définit le nombre de boucles ? Elle a été saisie dans la procedure remplir. Mais elle n'est pas passée en var dans cette procedure : autrement dit, quand tu la modifies à l'intérieur de la procedure, elle n'est pas modifiée à l'extérieur. Donc n vaut toujours 0.
D'où vient la valeur de n qui définit le nombre de boucles ? Elle a été saisie dans la procedure remplir. Mais elle n'est pas passée en var dans cette procedure : autrement dit, quand tu la modifies à l'intérieur de la procedure, elle n'est pas modifiée à l'extérieur. Donc n vaut toujours 0.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'attends toujours vos aides mes amis
Si je ne vais pas assez vite à ton goût, il faut le dire
ça m'étonne ce programme vraiment
Pas moi.
Tu devrais changer le sujet "programme juste..." Sois un peu modeste : il n'est pas juste, s'il ne marche pas c'est ta faute.
Pour en revenir à ton problème, qu'est ce que tu appelles le test 4 ? Et quand tu dis que le programme s'arrête, que se passe-t-il ? il s'arrête simplement ou il y a un message d'erreur ?
Si je ne vais pas assez vite à ton goût, il faut le dire
ça m'étonne ce programme vraiment
Pas moi.
Tu devrais changer le sujet "programme juste..." Sois un peu modeste : il n'est pas juste, s'il ne marche pas c'est ta faute.
Pour en revenir à ton problème, qu'est ce que tu appelles le test 4 ? Et quand tu dis que le programme s'arrête, que se passe-t-il ? il s'arrête simplement ou il y a un message d'erreur ?
Tu es désespérant....
Comment veux-tu que je devine où se trouvent tes messages de test ?
Tu crois que j'ai une boule de cristal ? Aide-moi à t'aider.
Redonne le programme avec tes messages de test
Comment veux-tu que je devine où se trouvent tes messages de test ?
Tu crois que j'ai une boule de cristal ? Aide-moi à t'aider.
Redonne le programme avec tes messages de test
ah oui pardon mon père j'ai pas fais attention vraiment...
tenez ce nouveau programme:
tenez ce nouveau programme:
PROGRAM DC1; USES WINCRT; TYPE enreg1=record nom_prenom:string[50]; NT,NC,NS:real; end; enreg2=record nom_prenom2:string[50]; moy:real; decision:string[10] end; notes=file of enreg2; tab=array [1..100] of enreg1; var t:tab; e1:enreg1; e2:enreg2; f:notes; n:integer; procedure remplir(var t:tab;n:integer); var i:integer; begin for i:=1 to n do begin with t[i] do begin write('donner le nom et le prénom: '); readln(Nom_prenom); write('donner NT: '); readln(NT); write('donner NC: '); readln(NC); write('donner NS: '); readln(NS); end; end; end; procedure creation (var f:notes;var t:tab;n:integer;VAR e2:enreg2); var i:integer; begin for i:=1 to n do begin e2.nom_prenom2:=t[i].nom_prenom; e2.moy:=(t[i].nt+t[i].nc+2*t[i].ns)/4; if e2.moy>=10 then e2.decision:='admis' else e2.decision:='refuser'; read(e2.nom_prenom2); read(e2.moy); read(e2.decision); write(f,e2); end; end; procedure afficher(var f:notes;e2:enreg2); begin reset(f); while(not eof(f)) do begin read(f,e2); with e2 do begin write(nom_prenom2,' ',moy:5:2,' ',decision); end; end; close(f); end; begin repeat writeln('Entrer le nombre d''enregistrements'); readln(n); until(n>2); writeln('test1'); assign(f,'c:\notes.dat'); writeln('test2'); rewrite(f); writeln('test3'); remplir(t,n); writeln('test4'); creation(f,t,n,e2); writeln('test5'); afficher(f,e2); writeln('test6'); end.
Dans mon message #3 je t'ai dit de refermer le fichier puis de le rouvrir. Pourquoi est-ce que ça n'apparaît pas dans ce code ?
Pour continuer à détecter l'erreur, ajoute des writeln ('test') à l'intérieur de ta fonction creation. Ça te donnera une idée plus précise de l'endroit où ça ne va pas
Pour continuer à détecter l'erreur, ajoute des writeln ('test') à l'intérieur de ta fonction creation. Ça te donnera une idée plus précise de l'endroit où ça ne va pas
c bon mon père
le problème est résolu
voilà le programme fonctionnel:
merci pour votre aide
le problème est résolu
voilà le programme fonctionnel:
PROGRAM DC1; USES WINCRT; TYPE enreg1=record nom_prenom:string[50]; NT,NC,NS:real; end; enreg2=record nom_prenom2:string[50]; moy:real; decision:string[10] end; notes=file of enreg2; tab=array [1..100] of enreg1; var t:tab; e1:enreg1; e2:enreg2; f:notes; n:integer; procedure remplir(var t:tab;n:integer); var i:integer; begin for i:=1 to n do begin with t[i] do begin write('donner le nom et le prénom: '); readln(Nom_prenom); write('donner NT: '); readln(NT); write('donner NC: '); readln(NC); write('donner NS: '); readln(NS); end; end; end; procedure creation (var f:notes;var t:tab;n:integer;VAR e2:enreg2); var i:integer; begin for i:=1 to n do begin e2.nom_prenom2:=t[i].nom_prenom; e2.moy:=(t[i].nt+t[i].nc+2*t[i].ns)/4; if e2.moy>=10 then e2.decision:='admis' else e2.decision:='refuser'; write(f,e2); end; end; procedure afficher(var f:notes;e2:enreg2); begin reset(f); while(not eof(f)) do begin read(f,e2); with e2 do begin writeln(nom_prenom2,' ',moy:5:2,' ',decision); end; end; close(f); end; begin repeat writeln('Entrer le nombre d''enregistrements'); readln(n); until(n>2); assign(f,'c:\notes.dat'); rewrite(f); remplir(t,n); creation(f,t,n,e2); afficher(f,e2); end.
merci pour votre aide