Дан вектор А[1:30] и вектор B[1:15]. Если разность между максимальными элементами векторов больше 10, то из положительных элементов обеих векторов сформировать матрицу C[1:5,1:4]. Иначе в векторе А за максимальным элементом вставить все элементы вектора B — Pascal(Паскаль)

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.

Результат работы программы

Leave a Comment

6 + 3 =