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
| Program DC3 ;
Uses wincrt;
Type
info = record
nom,prenom : string ;
moy : real ;
end ;
tab= array[1..5] of info ;
fiche = file of info ;
Var
tableau: tab ;
t:tab;
n,i,j: integer;
eleve :fiche ;
procedure creation (var eleve :fiche);
var
ch :string;
begin
ch:='c:\4si\moyenne.txt';
assign(eleve,ch);
{$i-}reset(eleve);{$i+}
if ioresult <> 0 then
rewrite(eleve);
end;
procedure saisie (var n :integer);
begin
writeln('Donner le nbre des élèves :');
readln(n);
if not(n in [2..10]) then
saisie(n);
end;
procedure lecture (var t :tab ;d,f:integer);
begin
with t[d] do
begin
writeln('Donner le nom : ');readln(nom);
writeln('Donner le prénom : ') ; readln(prenom);
writeln('Donner la moyenne : ') ; readln(moy);
end;
if (d<f) then
lecture (t,d+1,f);
end;
procedure tri_selection (var t : tab ; d,f:integer);
var
aux:info;
max:integer;
begin
max:=d;
for i:=d+1 to f-1 do
if (t[i].moy>t[max].moy) then
max:=i;
if max<> d then
begin
aux:= t[max];
t[max]:=t[d];
t[d]:=aux;
end;
if (d+1<f) then
tri_selection(t,d+1,f);
end;
procedure tri_shell(var t:tab ; n:integer);
var
i,j,pas:integer;
aux:info;
begin
pas:=0;
while (pas<n) do
pas:=pas*3+1;
while pas<> 0 do
begin
pas:=pas div 3 ;
for i:= pas to n do
begin
aux:=t[i];
j:=i;
while (j>pas-1) and (t[j-pas].moy<aux.moy) do
begin
t[j]:=t[j-pas];
j:=j-pas;
end;
t[j]:=aux;
end;
end;
end;
procedure fusion (t1,t2:tab;d1,f1,d2,f2:integer; var tableau:tab);
var
c1,c2,c3,i,j:integer;
begin
reset (eleve);
c1:=d1;c2:=d2;
repeat
if (t1[c1].moy>t2[c2].moy) then
begin
tableau[c3]:=t1[c1];
c1:=c1+1;
end
else
begin
tableau[c3]:=t2[c2];
c2:=c2+1;
end;
c3:=c3+1;
until (c1>f1) or (c2>f2) ;
if (c1>d1) then
for i:= c2 to f2 do
begin
tableau[c3]:=t2[i];
c3:=c3+1;
end
else
for i:=c1 to f1 do
begin
tableau[c3]:=t1[c1];
c3:=c3+1;
end;
end;
procedure affiche (var f: fiche);
var
ele:info;
begin
if not (eof(f)) then
begin
read(f,ele);
with ele do
begin
writeln(' le nom est ; ',nom);
writeln(' le prénom est : ',prenom);
writeln(' la moyenne est : ',moy);
end;
affiche (f);
end;
end;
{ PP }
BEGIN
creation(eleve);
saisie(n);
lecture(t,1,n);
tri_shell(t,n div 2);
tri_selection(t,((n div 2)+(n mod 2)),n);
fusion (t,t,1,n div 2,(n div 2) +1,n , tableau);
reset(eleve);
affiche(eleve);
close(eleve);
END. |
Partager