Programme juste mais n'affichre rien!!!

Résolu/Fermé
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 - 14 nov. 2012 à 09:36
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 - 14 nov. 2012 à 20:23
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 :

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

7 réponses

Utilisateur anonyme
14 nov. 2012 à 10:01
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.
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:03
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
0
Utilisateur anonyme
14 nov. 2012 à 10:08
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.
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:13
toujours le même problème
tous marche sauf il n'écrit pas dans le fichier et donc rien ne marche par la suite
comment je dois faire ?
merci
0
Utilisateur anonyme
14 nov. 2012 à 10:13
Quand je lis ton programme un peu plus attentivement, je vois un tas d'autres trucs bizarres. Par exemple le type tab=array [3..100] : pourquoi commencer à 3 alors que tu utilises les indices 1 et 2 ?
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:16
parce que la taille du tableau est >2
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:18
j4ai déjà modifié et toujours la même résultat
0
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.
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:22
oui vous avez raison pour le n,j'ai ajouter var devant n dans la procédure remplir et là le programme s'arrête au niveau de test 4
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 10:42
j'attends toujours vos aides mes amis
ça m'étonne ce programme vraiment...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
14 nov. 2012 à 11:06
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 ?
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 11:11
oh mon père!soit un peu doux avec moi!:)
ben le programme n'as aucune erreur et il s'exécute normal mais il n'écrit pas dans le premier fichier et il s'arrête dans le message de test au niveau de test ' sans erreur ni rien mais il ne passe pas a test 5 et test 6...
0
Utilisateur anonyme
14 nov. 2012 à 11:20
Si, le programme a de nombreuses erreurs, je t'en ai déjà relevé quelques unes
et il s'exécute normal mais S'il y a un mais, c'est qu'il ne s'exécute pas normalement.
Tu ne m'as toujours pas dit ce qu'étaient test 4 , test 5 ou test 6, je ne sais pas où il faut chercher l'erreur suivante.
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 11:28
c moi qui as ajouter ces simples messages de test pour savoir au quel point le programme s'arrête de s'exécuter
ben maintenant il s'arrête au niveau de test 4 vu que il m'écrit la dernière chose qui s'affiche sur écran, pascal est test4...
0
Utilisateur anonyme
14 nov. 2012 à 11:37
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
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 11:44
ah oui pardon mon père j'ai pas fais attention vraiment...
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.
0
Utilisateur anonyme
14 nov. 2012 à 12:02
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
0
Rahmouni007 Messages postés 155 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 17 avril 2017 2
14 nov. 2012 à 20:23
c bon mon père
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
0