Урок 15(Решенная задача номер 7)

Урок 15 (Решенная задача номер 17)

7) Заполните массив из 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 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.

var a: array[1..5] of integer;
    i, N : integer;
begin
  N := 1;
  randomize();
  for i:= 1 to 5 do
  begin
    a[i] := random(10) - 1;
    writeln(a[i]);
  end;
  while (N >= 1) and (N <= 5) and (a[1] <> 0)  do
   begin
    writeln('vvedite cislo');
    readln(N);
    a[n] := a[n+1];
    a[n+1] := a[n + 2];
    a[n+2] := a[n + 3];
    a[n+3] := a[n + 4];
    a[n+4] := a[n + 5];
    for i := 1 to 5 do
     writeln(a[i]);
  end;
end.
vedro-compota's picture

представьте что в условии написано "5000" элементов и приведите решение этой задачи.

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

Romakip's picture

var a: array[1..5] of integer;
    i, N : integer;
begin
  N := 1;
  randomize();
  for i:= 1 to 5 do
  begin
    a[i] := random(10) - 1;
    writeln(a[i]);
  end;
  while (N >= 1) and (N <= 5) and (a[1] <> 0)  do
   begin
    writeln('vvedite cislo');
    readln(N);
    for i := N to high(a) do
      a[i] := a[i+1];
    for i := 1 to 5 do
     writeln(a[i]);
  end;
end.
vedro-compota's picture

операцию сдвига нужно оформить отдельной подпрограммой

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

Romakip's picture

type massivcisl = array[1..5] of integer;
var a: massivcisl;
    i, N : integer;
procedure OperSdviga(var x : massivcisl; M : integer);
var c : integer;
begin
  for c := N to high(a) do
    x[c] := x[c+1];
end;

begin
  N := 1;
  randomize();
  for i:= 1 to 5 do
  begin
    a[i] := random(10) - 1;
    writeln(a[i]);
  end;
  while (N >= 1) and (N <= 5) and (a[1] <> 0)  do
  begin
    writeln('vvedite cislo');
    readln(N);
    OperSdviga(a, N);
    for i := 1 to 5 do
      writeln(a[i]);
  end;
end.