Programme juste mais n'affichre rien!!!

Résolu
Rahmouni007 Messages postés 169 Statut Membre -  
Rahmouni007 Messages postés 169 Statut Membre -
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

  1. Utilisateur anonyme
     
    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
  2. Rahmouni007 Messages postés 169 Statut Membre 2
     
    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
    1. Utilisateur anonyme
       
      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
    2. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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
    3. Utilisateur anonyme
       
      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
    4. Rahmouni007 Messages postés 169 Statut Membre 2
       
      parce que la taille du tableau est >2
      0
    5. Rahmouni007 Messages postés 169 Statut Membre 2
       
      j4ai déjà modifié et toujours la même résultat
      0
  3. Utilisateur anonyme
     
    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
    1. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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
  4. Rahmouni007 Messages postés 169 Statut Membre 2
     
    j'attends toujours vos aides mes amis
    ça m'étonne ce programme vraiment...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
    1. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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
    2. Utilisateur anonyme
       
      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
    3. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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
  7. Utilisateur anonyme
     
    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
    1. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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
  8. Utilisateur anonyme
     
    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
    1. Rahmouni007 Messages postés 169 Statut Membre 2
       
      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