задача 9 урок 15

задача 9 урок 15

Заполните массив из 5 элементов случайными числами из любого диапазона.
Далее пользователь вводит в цикле значения от 1 до 5 -- удаляйте из массива очередной элемент с позиции очередного введенного пользователем числа, сдвигая оставшиеся элементы второго массива влево, заполняя то, что справа нулями. Распечатывайте промежуточной состояние массива, после каждого удаления.

Цикл должен работать до тех пор, пока в массиве не останется ненулевых элементов или пока пользователь не введет число большее чем 5 или меньшее чем 1.

Например:

|1|3|7|5|4| // исходный массив
3 // ввод пользователя
|1|3|5|4|0| // промежуточный результат
3 // ввод пользователя
|1|3|4|0|0| // промежуточный результат
2 // ввод пользователя
|1|4|0|0|0| // промежуточный результат
1 // ввод пользователя
|4|0|0|0|0| // промежуточный результат
1 // ввод пользователя
|0|0|0|0|0| // промежуточный результат
// Cообщение о завершении, т.к. все элементы удалены
-- в данном случае программа завершилась, так как удалены все элементы.
Если бы пользователь ввел число 10 или -5 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.

РЕШЕНИЕ:

program task_9_lesson_15;
type arr = array[1..5] of integer;

function sdvig(n : integer; ar : arr) : arr;     // функция сдвига
var i: integer;
  begin
    for i := n to high(ar) do
      begin
        if (i < high(ar)) then
          ar[i] := ar[i + 1]
        else
          ar[i] := 0;
      end;
    result := ar;
  end;

procedure writeArray(ar : arr);   // процедура которая будет печатать наш массив
var i: integer;
begin
  for i := low(ar) to high(ar) do
    write(ar[i], ' ');
  writeln();
end;

procedure su(ar1, ar2: arr; var n: boolean);  // процедура сравнения массивов
var i: integer;
begin
  n := true;
  for i := 1 to high(ar1) do
    if ar1[i] <> ar2[i] then
      n := false;
end;

var a, b: array[1..5] of integer;
  i, n: integer;
  comp: boolean;
begin
  randomize();
  comp:= true;                 // изначально массивы равны
  for i := low(b) to high(b) do
    b[i] := 0;
  for i := low(a) to high(a) do
    a[i] := -10 + random(20);
    writeArray(a);
    su(a, b, comp);            // первое сравнение
    while comp = false do      // пока массив #1 не равен массиву #2 из 0-ей делаем сдвиг
      begin
        write('Which element do you want to delete? : ');
        readln(n);
        if ((n >= 1) and (n <= 5)) then
          begin
            a := sdvig(n, a);
            writeArray(a);
            su(a, b, comp);
          end
        else
          break;
      end;
    writeln('VSE ELEMENTI UDALENI');
  readln()
end.

КОНСОЛЬ:

8 -5 6 -7 2
Which element do you want to delete? : 5
8 -5 6 -7 0
Which element do you want to delete? :
2
8 6 -7 0 0
Which element do you want to delete? : 1
6 -7 0 0 0
Which element do you want to delete? : 2
6 0 0 0 0
Which element do you want to delete? : 1
0 0 0 0 0
VSE ELEMENTI UDALENI