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;