IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[TP] Fichier texte


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut [TP] Fichier texte
    Bonjour,
    voila dans un sujet d'examen je bloque sur une question qui est celle-ci:
    Ecrire une procedure qui à partir du fichier binaire crée un fichier texte contenant les/la liste des étudiants admis(moyenne>=10).
    *voir procedure admis*
    Le problème est que dans ma procedure je n'affiche que le premier étudiant admis, je ne vois pas comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    program PR;
    uses crt;
    type etudiant=record
         nom:string;
         prenom:string;
         noteds:integer;
         noteexam:integer;
         noteprojet:integer;
    end;
    moyenne=file of etudiant;
    procedure affiche;
    var a:moyenne;
        b:etudiant;
        n:integer;
    begin
      assign(a,'c:\resultat');
      reset(a);
      n:=1;
      while not eof(a) do
      begin
        read(a,b);
        writeln('Etudiant ',n,':',b.nom,'  ',b.prenom,' note DS:',
        b.noteds,' Exam:',b.noteexam,' Projet:',b.noteprojet);
        n:=n+1;
      end;
      close(a);
    end;
     
    function moyenne_generale2(nom,prenom:string):real;
    var a:moyenne;
        b:etudiant;
        n:integer;
        res:real;
    begin
      assign(a,'c:\resultat');
      reset(a);
      n:=1;
      while not eof(a) do
      begin
        read(a,b);
        if ((b.nom=nom) and (b.prenom=prenom)) then
        begin
          if (((b.noteexam+b.noteds)div 2)>(b.noteexam)) then
          moyenne_generale2:= ((3 / 4) *((b.noteexam+b.noteds)
           div 2)) +((1 / 4) * b.noteprojet )
          else moyenne_generale2:=((3 / 4) * b.noteexam +
          ((1 / 4) * b.noteprojet ));
        end;
      end;
      close(a);
    end;
    procedure moyenne_generale(nom,prenom:string);
    var a:moyenne;
        b:etudiant;
        n:integer;
        res:real;
    begin
      assign(a,'c:\resultat');
      reset(a);
      n:=1;
      while not eof(a) do
      begin
        read(a,b);
        if ((b.nom=nom) and (b.prenom=prenom)) then
        begin
          if (((b.noteexam+b.noteds)div 2)>(b.noteexam)) then
          res:= ((3 / 4) *((b.noteexam+b.noteds) div 2)) +
          ((1 / 4) * b.noteprojet )
          else res:=((3 / 4) * b.noteexam + ((1 / 4) * b.noteprojet ));
          writeln('Moyenne Etudiant ',n,':',b.nom,' obtient:',res:0:0)
        end;
      end;
      close(a);
    end;
     
    function promo:real;
    var a:moyenne;
        b:etudiant;
        cpt1:real;
        cpt2:integer;
    begin
      assign(a,'c:\resultat');
      reset(a);
      cpt1:=0;
      cpt2:=0;
      while not eof(a) do
      begin
          read(a,b);
          if (((b.noteexam+b.noteds)div 2)>(b.noteexam)) then
          cpt1:=cpt1+ ((3 / 4) *((b.noteexam+b.noteds) div 2)) +
          ((1 / 4) * b.noteprojet )
          else cpt1:=cpt1+((3 / 4) * b.noteexam + ((1 / 4) * b.noteprojet ));
          cpt2:=cpt2+1;
      end;
      close(a);
      promo:=(cpt1 / cpt2);
    end;
     
    procedure modif(nom,prenom:string;nbpoint:integer);
    var a:moyenne;
        b:etudiant;
        trouve:boolean;
    begin
      assign(a,'c:\resultat');
      reset(a);
      trouve:=false;
      while ((not eof(a)) and (not trouve)) do
      begin
        read(a,b);
        if ((nom=b.nom) and (prenom=b.prenom)) then
        begin
          trouve:=true;
          b.noteexam:=b.noteexam+nbpoint;
          seek(a,filepos(a)-1);
          write(a,b);
        end;
      end;
      close(a);
    end;
     
    procedure admis;
    var a:moyenne;
        b:etudiant;
    begin
      assign(a,'c:\resultat');
      reset(a);
      while not eof(a) do
      begin
        read(a,b);
        if (moyenne_generale2(b.nom,b.prenom)>=10) then
        begin
          assign(a,'c:\admis');
          rewrite(a);
          write(a,b);
        end;
      end;
      close(a);
    end;
     
    var nom,prenom:string;
        nbpoint:integer;
    begin
      clrscr;
      affiche;
      writeln('donnez le nom:');readln(nom);
      writeln('donnez le prenom:');readln(prenom);
      moyenne_generale(nom,prenom);
      moyenne_generale2(nom,prenom);
      writeln('Moyenne Etudiant:',moyenne_generale2(nom,prenom):0:0);
      writeln('la moyenne de la promotion est de:',promo:0:0);
      writeln('combien de point voulez vous rajouter:');
      readln(nbpoint);
      modif(nom,prenom,nbpoint);
      admis;
    end.
    question à part: je sait comment modifier une partit d'un fichier mais comment suprimer une partit d'un fichier?
    par exemple en reprenant le programme ci-dessus, pour effacer les étudiants ayant une moyenne <10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure admis;
    var a:moyenne;
        b:etudiant;
    begin
      assign(a,'c:\resultat');
      reset(a);
      while not eof(a) do
      begin
        read(a,b);
        if (moyenne_generale2(b.nom,b.prenom)>=10) then
        begin
        erase(a);
        seek(a,filepos(a)-1);
        write(a,b);
        end;
      end;
      close(a);
    end;

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    procedure admis;
    var a:moyenne;
        b:etudiant;
    begin
      assign(a,'c:\resultat');
      reset(a);
      while not eof(a) do
      begin
        read(a,b);
        if (moyenne_generale2(b.nom,b.prenom)>=10) then
        begin
          assign(a,'c:\admis');
          rewrite(a);
          write(a,b);
        end;
      end;
      close(a);
    end;
    Je ne sais pas si tus sais comment se deplace le pointeur à l' interieur d' un fichier.
    dans la boucle, tu fais à chaque passage tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    assign(a,'c:\admis');
    rewrite(a);
    Tu n' as meme pas encore fermé le fichier et tu veux encore l' ouvrir.

    Meme si ça marche, le pointeur du fichier pointera toujours sur le premier element. Et c' est cet element que tu modifie à chaque fois.

    Pour modifier un element, il faut placer le pointeur sur cet element et tu ecris le nouvel elementà la meme place.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    En faite je sait faire l'ecriture d'un fichier et la lecture mais dans cette exemple je ne sait pas comment à la fois lire le fichier et en même temps écrire un fichier texte!
    Et dans ma premiére question je ne souhaite pas modifier un fichier mais créer un fichier texte avec les admis (étudiants ayant obtenu >=10 à la moyenne général)
    Pour la deuxiéme question c'est que je ne sait pas comment suprimer une partie d'un fichier

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Delnir Voir le message
    En faite je sait faire l'ecriture d'un fichier et la lecture mais dans cette exemple je ne sait pas comment à la fois lire le fichier et en même temps écrire un fichier texte!
    Et dans ma premiére question je ne souhaite pas modifier un fichier mais créer un fichier texte avec les admis (étudiants ayant obtenu >=10 à la moyenne général)
    Pour la deuxiéme question c'est que je ne sait pas comment suprimer une partie d'un fichier
    il te suffit de mettre assign et rewrite hors de la boucle et tout ce passera bien.
    Aussi, comment veux tu faire une operation sur deux fichiers differents si tu leurs donnes le meme nom ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    procedure admis;
    var a,f:moyenne;
    b:etudiant;
    begin
    assign(a,'c:\resultat');
    reset(a);
    assign(f,'c:\admis');
    rewrite(f);
    while not eof(a) do
    begin
    read(a,b);
    if (moyenne_generale2(b.nom,b.prenom)>=10) then
    begin
    write(f,b);
    end;
    end;
    close(a);
    close(f);
    end;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Pour la question 1 j'ai réusit à trouver mais la 2 iéme je cherche toujours, si quelqun peut m'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure admis;
    var c,a:moyenne;
        b:etudiant;
    begin
      assign(a,'c:\resultat.txt');
      reset(a);
      assign(c,'c:\admis.txt');
      rewrite(c);
      while not eof(a) do
      begin
        read(a,b);
        if (moyenne_generale2(b.nom,b.prenom)>=10) then
        begin
        write(c,b);
        end;
      end;
      close(c);
      close(a);
    end;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    je vien de voir ton message, j'ai trouver en testant un peut mais merci quand même p:
    Sinon la 2 iéme question que je pose je ne sait absolument pas comment faire je n'est pas sa vu dans mon cour ni td, je ne sait même pas la commande si il en existe une pour effacer.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    J'ai trouver les commande rename et erase sur le net j'ai teste et sa marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    procedure admis;
    var c,a:moyenne;
        b:etudiant;
    begin
      assign(a,'c:\resultat.txt');
      reset(a);
      assign(c,'c:\admis.txt');
      rewrite(c);
      while not eof(a) do
      begin
        read(a,b);
        if (moyenne_generale2(b.nom,b.prenom)>=10) then
        begin
        write(c,b);
        end;
      end;
      erase(a);
      rename(c,'c:\resultat.txt');
      close(c);
    end;
    Merci de m'avoir aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  2. Réponses: 1
    Dernier message: 12/02/2003, 09h36
  3. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo