Salut,
je dois réaliser un programme qui doit gérer les employés d'une société. Je l'ai déjà fait, mais il y a certains trucs qui marchent pas comme pour le calcul des primes par exemple. Le programme est compilé avec succès, mais j'ai pas les bons résultats!! Je demande votre aide car j'arrive pas à trouver où se situe le problème dans mon code source, qui est le suivant:


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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
program  TP_salaire;
uses crt;
const max=500;
  type date=record
    jour:byte;
    mois:byte;
    annee:byte;
    end;
    employe=record
      matricule:string[6];
      nom,prenom:string[20];
      naiss:date;
      nationalite:string[15];
      salaire:real;
      statut:char;
      end;
    societe=array[1..max] of employe;
 
    var numo,po, choix,n,i,ch:byte;
    so:societe;
    nt,pr,v,b,j:real;
 
    procedure saisie_employe(var e:employe);
    begin
    writeln('Donner les informations de l''employe');
    writeln('Saisir le matricule');
    readln(e.matricule);
    clrscr;
    writeln('Saisir le nom de famille');
    readln(e.nom);
    writeln('Saisir le prenom');
    readln(e.prenom);
    clrscr;
    repeat
    writeln('Donner le jour de naissance');
    readln(e.naiss.jour);
    until (e.naiss.jour)>0;
    repeat
    writeln('Donner le mois de naissance');
    readln(e.naiss.mois);
    until (e.naiss.mois)>0;
    repeat
    writeln('Donner l''annee de naissance');
    readln(e.naiss.annee);
    until (e.naiss.mois)>0;
    clrscr;
 
    writeln('Donner la nationalite');
    readln(e.nationalite);
 
    repeat
    writeln('Donner le salaire');
 
    readln(e.salaire);
    until (e.salaire)>0;
    writeln('Donner le statut');
    readln(e.statut);
    clrscr;
    end;
    procedure saisie_soc(var soc:societe;m:byte);
    var i:byte;
    begin
    for i :=1 to m do
    begin
    saisie_employe(soc[i]);
    end;
    end;
    procedure prime_salaire(e:employe;var prime:real);
    begin
    if (e.statut='s') then
    begin
    prime:=e.salaire*(3.2/100);
    end;
     if e.statut='m' then
     begin
    prime:=e.salaire*(5.6/100);
    end;
    if e.statut='b' then
    begin
    prime:=e.salaire*(7.3/100);
    end;
     if e.statut='c' then
    begin
    prime:=e.salaire*(9.7/100);
    end;
    end;
 
 
 
    function masse_salaire(e:employe;prime:real):real;
    var net:real;
    begin
    net:=e.salaire+prime;
    masse_salaire:=net;
    end;
    procedure affiche_employe(e:employe;prime,net:real);
    begin
    write('MATRICULE',' ',e.matricule,'  ');
    write('NOM',' ',e.nom,' ');
    write('PRENOM', ' ', e.prenom,' ');
    write('STATUT',' ',e.statut,' ');
    write('SALAIRE',' ',e.salaire:2:2,' ');
    write('PRIME', ' ', prime:2:2,' ');
    write('NET A PAYER',' ',net:2:2);
    writeln;
    end;
    procedure affiche_societe(soc:societe;var prime,l:real;m:byte);
    var i:byte;
    begin
    for i:=1 to m do
    begin
    writeln('INFORMATIONS DE L''EMPLOYE NUMERO',i);
    prime_salaire(soc[i],prime);
    l:=masse_salaire(soc[i],prime);
    affiche_employe(soc[i],prime,l);
    end;
    end;
 
 
    procedure directeur(m:byte;var max:real;var pos:byte;soc:societe);
     var i:byte;
    begin
    max:=soc[1].salaire;
    for i:=2 to m do
    begin
    if soc[i].salaire>max then
    begin
    max:=soc[i].salaire;
    pos:=i;
    end;
    end;
    end;
 
 
 
 
    procedure modification(var num,c:byte;soc:societe;var prime,p:real);
    begin
    repeat
    repeat
    writeln('Saisir le numero de l''employe dont  voulez modifier les informations');
    readln( num);
    until num>0;
 
    writeln('Choisissez la rubrique que vous vous voulez modifier');
    writeln('1:MATRIULE');
    writeln('2:NOM');
    writeln('3: PRENOM');
    writeln('4:STATUT');
    writeln('5:SALAIRE');
    writeln('6: PRIME');
 
    writeln('7:NET A PAYER');
    readln(c);
    until c>0;
    case c of
    1:begin
    writeln('Saisir le nouveau matricule');
    readln(soc[num].matricule);
    end;
    2:begin
    writeln('Donner le nouveau nom');
    readln(soc[num].nom);
    end;
    3:begin
    writeln('Saisir le nouveau prenom');
    readln(soc[num].prenom);
    end;
    4:begin
    writeln('Donner le nouveau statut');
    readln(soc[num].statut);
    end;
    5:begin
    repeat
    writeln('Donner le nouveau salaire');
    readln(soc[num].salaire);
    until soc[num].salaire>0;
    end;
    6:begin
    repeat
    writeln('Donner la nouvelle prime');
    readln(prime);
    until prime>0;
    end;
    7: begin
    repeat
    writeln('Donner le net a payer');
    readln(p);
    until p>0;
    end
    else
    writeln('ERREUR');
 
    end;
    writeln('Modification enregistrée.');
 
   end;
    begin
    repeat
    writeln('Veuillez faire un choix');
 
    writeln('1:Informations sur les employes');
    writeln('2:Informations sur le directeur');
    writeln('3:Modification');
    readln(choix);
    until choix>0;
    clrscr;
    case choix of
 
    1:begin
 
 
    repeat
    writeln('Donner  le nombre d''employe');
    readln(n);
    until n>0;
    saisie_soc(so,n);
    for i:=1 to n do
    begin
 
 
    prime_salaire(so[i],pr);
    v:=masse_salaire(so[i],pr);
 
    end;
      affiche_societe(so,pr,v,n);
    end;
 
 
    2:begin
      repeat
    writeln('Donner  le nombre d''employe');
    readln(n);
    until n>0;
    saisie_soc(so,n);
    for i:=1 to n do
    begin
 
 
    prime_salaire(so[i],pr);
    v:=masse_salaire(so[i],pr);
    affiche_employe(so[i],pr,v);
    end;
 
     writeln('Voici les informations sur le directeur:');
    directeur(n,b,po,so);
    pr:=(so[po].salaire)*0.97;
    nt:=masse_salaire(so[po],pr);
    affiche_employe(so[po],pr,nt);
    end;
    3:begin
    repeat
    writeln('Donner  le nombre d''employe');
    readln(n);
    until n>0;
    saisie_soc(so,n);
    for i:=1 to n do
    begin
 
 
    prime_salaire(so[i],pr);
    v:=masse_salaire(so[i],pr);
    affiche_employe(so[i],pr,v);
    end;
 
    modification(numo,ch, so,pr,j);
    end
    else
 
    writeln('ERREUR');
    end;
    readln;
 
end.