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

Задание 11 урок 15

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

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

program lesson_15;

type
  list11 = array [1..9] of integer;
var
   a, new_a: list11;
   count, del, max: integer;

procedure random_list11(max: integer; var a: list11);
var min, count: integer;
begin
   randomize();
   min := 0;
   count := 1;
   for count:=low(a) to high(a) do
      a[count] := min + random(max - min + 1);
   writeln('Now array is:');
   for count:= low(a) to high(a) do
        write(a[count], ' ');
   writeln();
end;

function del_and_shift(del: integer; var a: list11): list11;
var
   new_a: array [1..9] of integer;
   i, count: integer;
begin
   count := 0;
  for i := low(a) to high(a) do
      begin
         if a[i] = del then
            begin
            new_a[i - count] := a[i];
            count += 1;
            end
         else
             new_a[i - count] := a[i];
      end;
  count -= 1; // что по костылям...
  while count >= 0 do
  begin
     new_a[9 - count] := 0;
     count := count - 1;
  end;
  result := new_a;
end;

begin
   writeln('Please, enter max number of random:');
   readln(max); // задаем максимальное значение для чисел в массиве
   random_list11(max, a); // процедура заполнением случайными числами наш массив
   writeln('Now enter the number you want to del:');
   readln(del); // какое число удалить
   new_a := del_and_shift(del, a); // функция удаления и сдвига значений при помощи переписывания нужных значений из старого массива в новый
   writeln('Now array is:');
   for count:= low(new_a) to high(new_a) do
        write(new_a[count], ' ');
   writeln();
   readln();
end.
vedro-compota's picture

есть варианты, когда решение работает не верно, скинул скриншот в личку

_____________
матфак вгу и остальная классика =)