Задача 11 Урок 15

Задача 11 Урок 15

Заполнить массив из 9 элементов случайными числами из диапазона от нуля до N,
и затем удалите из этого массива все элементы равные M,
причем удаление необходимо производить "сдвигом"
влево оставшихся элементов на позиции элементов, совпавших с M.

Решить двумя способами:

1) Любым
2) Провести операцию сдвига за одно прочтение исходного массива
(для этого нам потребуется еще один массив, где мы будем хранить какие-то значения)

Нужны комментарии, так как не уверен, что решения оптимальные.

// Первый способ (любой)

type
  myArr1 = array[1..9] of integer;
var
  a: myArr1;
  min, max, i, m: integer;
function sdvig(var a : myArr1; m : integer) : myArr1;
var i : integer;
begin
  i := 1;
  while i <= high(a) do //первый цикл для обхода
    if a[i] = m then
      for i := i to high(a) do //второй цикл для сдвига
        a[i] := a[i+1]
    else
      i += 1;
  result := a;
end;

begin

  write('Введите правую границу диапазона чисел: ');
    readln(max);
  randomize();
  min := 1;
  for i := low(a) to high(a) do
    a[i] := min + random(max - min + 1);

  write('Числа массива до операции: ');
  for i := low(a) to high(a) do
    write(a[i], ' ');
  writeln;

  writeln('Какое число убрать?');
  readln(m);
  sdvig(a, m);

  write('Числа массива после операции: ');
  for i := low(a) to high(a) do
    write(a[i], ' ');
    writeln;

  write('Программа завершила свою работу');
  readln();readln();
end.

// с двумя массивами

type
  myArr1 = array[1..9] of integer;
  myArr2 = array[1..9] of integer;
var
  a: myArr1;
  b: myArr2;
  min, max, i, m: integer;
function sdvig(var a : myArr1; var b : myArr2; m : integer) : myArr2;
var i, j : integer;
begin
  i := 1;
  j := 1;
  while i <= high(a) do
    if a[i] <> m then
    begin
      b[j] := a[i];
      j += 1;
      i += 1;
    end
    else
      i += 1;
  result := b;
end;

begin

  write('Введите правую границу диапазона чисел: ');
    readln(max);
  randomize();
  min := 1;
  for i := low(a) to high(a) do
    a[i] := min + random(max - min + 1);
  for i := low(b) to high(b) do
    b[i] := 0;

  write('Числа массива до операции: ');
  for i := low(a) to high(a) do
    write(a[i], ' ');
  writeln;

  writeln('Какое число убрать?');
  readln(m);
  sdvig(a, b, m);

  write('Числа массива после операции: ');
  for i := low(b) to high(b) do
    write(b[i], ' ');
    writeln;

  write('Программа завершила свою работу');
  readln();readln();
end.