uses crt;
const
n = 5; { размеры матрицы }
m = 9;
type
mas = array [1 .. n * m] of integer; { тип массивов }
matr = array [1 .. n, 1 .. m] of integer; { тип матрицы }
{ процедура ввода массивов, входные параметры - размер, диапазон значений, имя, выходной - масив }
procedure Vvod(var v: mas; x: byte; a, b: integer; c: char);
var
i: byte;
begin
repeat
writeln('Введите диапазон элементов для массива ', c, ' a<b');
readln(a, b);
until b > a;
for i := 1 to x do
v[i] := random(b - a + 1) + a;
{ вводим разные верхние диапазоны для того чтобы получать
разность максимумов больше или меньше 10 }
end;
{ вывод массивов на экран }
procedure Vyvod(var v: mas; x: byte; c: char);
var
i: byte;
begin
writeln(' массив ', c);
for i := 1 to x do
write(v[i]:4);
writeln;
writeln;
end;
{ поиск индекса максимального элемента, он нужен для вставки массива,
саио значение определим по индексу }
Function Max(v: mas; x: byte): byte;
var
i, imx: byte;
begin
imx := 1;
for i := 1 to x do
if v[i] > v[imx] then
imx := i;
Max := imx;
end;
{ создание матрицы, входные - 2 массива и их размеры, выходной - матрица }
procedure Matrica(v1, v2: mas; x1, x2: byte; var mt: matr);
var
i, j, a, b: byte;
begin
for i := 1 to n do
for j := 1 to m do
mt[i, j] := 0; { обнуляем матрицу }
for i := 1 to x2 do { объединяем массивы }
begin
x1 := x1 + 1;
v1[x1] := v2[i];
end;
a := 1;
b := 0;
for i := 1 to x1 do
if v1[i] > 0 then { если положительный }
begin
b := b + 1; { считаем столбец }
mt[a, b] := v1[i]; { записываем }
if b = 10 then { если вышли за границу }
begin
b := 1; { столбец 1 }
a := a + 1; { новая строка }
end;
end;
writeln('Матрица:');
for i := 1 to n do
begin
for j := 1 to m do
write(mt[i, j]:4);
writeln;
end;
end;
{ вставка массива после максимального, вход - 2 масива, их размеры,
индекс максимального в первом массиве, выход-новый массив и его размер }
procedure Vector(var v1: mas; v2: mas; x1, x2, imx: byte; var x3: byte);
var
i, j: byte;
begin
x3 := x1; { размер первого массива }
if imx = x1 then { если макс последний }
begin
for i := 1 to x2 do
begin
x3 := x3 + 1;
v1[x3] := v2[i]; { просто добавляем второй массив в первый }
end
end
else { иначе }
begin
for i := 1 to x2 do { по размеру второго массива }
begin
x3 := x3 + 1; { увеличиваем размер первого }
for j := x3 downto imx + i +
1 do { сдвигаем х2 раз конец массива за максимальным на 1 вправо }
v1[j] := v1[j - 1];
v1[imx + i] := v2[i];
{ записываем на свободное место элемент второго массива }
end;
end;
writeln('Вставка массива:');
for i := 1 to x3 do
write(v1[i]:4);
end;
var
a, b: mas;
c: matr;
i1, i2: integer;
k, t, ma, mb: byte;
begin
clrscr;
randomize;
Vvod(a, 30, i1, i2, 'A');
Vvod(b, 15, i1, i2, 'B');
Vyvod(a, 30, 'A');
ma := Max(a, 30);
writeln('Максимальный елемент a[', ma, ']=', a[ma]);
Vyvod(b, 15, 'B');
mb := Max(b, 30);
writeln('Максимальный елемент=', b[mb]);
if abs(a[ma] - b[mb]) > 10 then
begin
writeln('Разность максимумов >10:');
Matrica(a, b, 30, 15, c)
end
else
begin
writeln('Разность максимумов <=10:');
Vector(a, b, 30, 15, ma, t);
end;
readln
end.