Posted by : aymen
Thursday, 16 January 2014
program tri_fus;
uses wincrt;
type tab=array[1..20]of integer;
var m,n,nb,i:integer;t:tab;
procedure saisie(var x:integer);
begin
repeat
writeln('Donner le nombre d''éléments du tableau : ');
readln(x);
until(x in[1..10]);
end;
procedure remplir (x:integer;var v:tab);
var i:integer;
begin
for i:=1 to x do
begin
writeln('Donnerl''élément numéro ',i);
readln(v[i]);
end;
end;
procedure fusion(var v:tab;g,m,d:integer);
var i,j,k,c:integer;s:tab;
begin
for i:=g to d do
s[i]:=v[i];
i:=g;j:=g;k:=m+1;
while(j<=m)and(k<=d)do
begin
if(s[j]<=s[k])then
begin
v[i]:=s[j];
j:=j+1;
end
else
begin
v[i]:=s[k];
k:=k+1;
end;
i:=i+1;
end;
for c:=j to m do
begin
v[i]:=s[c];
i:=i+1;
end;
for c:=k to d do
begin
v[i]:=s[c];
i:=i+1;
end;
end;
Procedure Tri_Fusion (Var t : TAB; g, d : integer);
Var
m : integer;
s : TAB;
Begin
If g < d Then
Begin
m := (g + d) Div 2;
Tri_Fusion (t, g, m);
Tri_Fusion (t, m + 1, d);
fusion(t,g,m,d);
End;
End;
procedure affiche(x:integer;v:tab);
var i:integer;
begin
for i:=1 to x do
write(v[i]:4);
end;
begin
saisie(nb);
remplir(nb,t);
tri_fusion(t,1,nb);
affiche(nb,t);
end.