{ Terreno Antonio mat.9714216 }
unit
vettori;
interface
const
min=1;
max=20;
type
tipo_elemento= integer;
tipo_array= array[min..max] of tipo_elemento;
procedure leggi_array(var a: tipo_array; var n : integer);
procedure stampa_array(var a: tipo_array; n : integer);
procedure insertion_sort(var a: tipo_array; n : integer);
procedure selection_sort(var a: tipo_array; n : integer);
procedure elimina_ripetizioni(var a: tipo_array; var n : integer);
procedure inserisci_ordinato(x: tipo_elemento; var a: tipo_array; var n : integer);
procedure fondi_array(var a,b,c: tipo_array; n,m : integer;var r : integer);
implementation
procedure leggi_array(var a: tipo_array; var n : integer);
var
i : integer;
begin
write('numero di elementi? ');
readln(n);
writeln('inserisci ',n,' elementi');
for i:=min to n do
read(a[i])
end;
procedure stampa_array(var a: tipo_array; n : integer);
var
i : integer;
begin
write('array -> ');
for i:=min to n do
write(a[i],' ');
end;
procedure insertion_sort(var a: tipo_array; n : integer);
var
i,j: integer;
key: tipo_elemento;
begin
for i:=min+1 to n do
begin
key:=a[i];
j:=i-1;
while (j>=min) and (a[j]>key) do
begin
a[j+1]:=a[j];
j:=j-1
end;
a[j+1]:=key
end
end;
procedure selection_sort(var a: tipo_array; n : integer);
var
i,j,piccolo: integer;
temp: tipo_elemento;
begin
for i:=min to n-1 do
begin
piccolo:=i;
for j:=i+1 to n do
if (a[j] < a[piccolo]) then
piccolo:=j;
temp:=a[piccolo];
a[piccolo]:=a[i];
a[i]:=temp
end
end;
procedure elimina_ripetizioni(var a: tipo_array; var n : integer);
{ elimina ogni ripetizione di a[i] dall'array aggiornando n }
var
i,j: integer;
begin
i:=min;
while (i<n) do
if (a[i] <> a[i+1]) then
i:=i+1
else
begin
for j:=i to n-1 do
a[j]:=a[j+1];
n:=n-1
end;
end;
procedure inserisci_ordinato(x: tipo_elemento; var a: tipo_array; var n : integer);
var
i : integer;
begin
if (n<max) then
begin
n:=n+1;
i:=n;
while (i>min) and (x<a[i-1]) do
begin
a[i]:=a[i-1];
i:=i-1
end;
a[i]:=x
end
else
writeln('overflow error!')
end;
procedure fondi_array(var a,b,c: tipo_array; n,m : integer;var r : integer);
var
i,j,k: integer;
begin
i:=min;
j:=min;
k:=min;
if (n+m <=max) then
begin
while (i<=n) and (j<=m) do
begin
if (a[i] <= b[j]) then
begin
c[k]:=a[i];
i := i+1
end
else
begin
c[k]:=b[j];
j:=j+1
end;
k:=k+1;
end;
for i:=i to n do
begin
c[k]:=a[i];
k:=k+1
end;
for j:=j to m do
begin
c[k]:=b[j];
k:=k+1
end
end
else
write('I vettori sono troppo grandi:IMPOSSIBILE FARE LA FUSIONE');
r:=k-1;
end;
end.