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

var a : array [1..5] of integer;
i,i1,n: integer;
procedure arr(b:integer);
var n1: integer;
begin
  for i:= low(a[b]) to high(a) do
  begin
    n1:=b+1;
    a[b]:=a[n1];
    b:=b+1;
    if(i=5) then
      a[5]:=0;
  end;
end;

begin
 randomize();
  for i:= low(a) to high(a) do
  begin
    a[i]:=random(50);
    write(a[i], '|'); //первый вывод масива после заполнения
  end;
  writeln();

  for i1:= 1 to 5 do
  begin
    writeln('vvedite chislo ot 1 do 5:');
    readln(n);

    if(n>0) and (n<6)then  // проверка большее чем 5 или меньшее чем 1
    begin
      arr(n);
      for i:= low(a) to high(a) do
        write(a[i], '|');
      writeln();

      if(a[1]=0) then  // проверка на пустой масив
      begin
         write('vse pusto');
         break;
      end;
    end
    else
    begin
      write('poka!');
      break;
    end;
  end;
readln();
end.
27|29|35|42|30|
vvedite chislo ot 1 do 5:
5
27|29|35|42|0|
vvedite chislo ot 1 do 5:
1
29|35|42|0|0|
vvedite chislo ot 1 do 5:
3
29|35|0|0|0|
vvedite chislo ot 1 do 5:
2
29|0|0|0|0|
vvedite chislo ot 1 do 5:
1
0|0|0|0|0|
vse pusto
vedro-compota's picture

разбить на подпрограммы

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

var a : array [1..5] of integer;
    i,i1,n: integer;

procedure rand();
begin
  randomize();
  for i:=low(a) to high(a) do
  begin
    a[i] := random(50);
    write(a[i], ' ');
  end;
end;

procedure arr(b:integer);
var n1: integer;
begin
  for i:= b to high(a) do
  begin
    n1:=b+1;
    a[b]:=a[n1];
    b:=b+1;
    if(i=5) then
      a[5]:=0;
  end;
  for i:= low(a) to high(a) do
    write(a[i], '|');
  writeln();
end;

begin
  rand();
  writeln();

  for i1:= 1 to 5 do
  begin
    writeln('vvedite chislo ot 1 do 5:');
    readln(n);

    if(n>0) and (n<6)then  // проверка большее чем 5 или меньшее чем 1
    begin
      arr(n);
      if(a[1]=0) then  // проверка на пустой масив
      begin
         write('vse pusto');
         break;
      end;
    end
    else
    begin
      write('poka!');
      break;
    end;
  end;
readln();
end.
vedro-compota's picture

уйти от использования глобальных переменных

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

type marr = array[1..5] of integer;
var a : marr;
    i,i1,n: integer;

procedure del(b:integer;var a1: marr);
var n1,i2: integer;
begin
  for i2:= b to high(a1) do
  begin
    n1:=b+1;
    a1[b]:=a1[n1];
    b:=b+1;
    if(i2=5) then
      a1[5]:=0;
  end;
end;

begin
  randomize();
  for i:=low(a) to high(a) do
  begin
    a[i] := random(50);
    write(a[i], ' ');
  end;
  writeln();

  for i:= 1 to 5 do
  begin
    writeln('vvedite chislo ot 1 do 5:');
    readln(n);

    if(n>0) and (n<6)then  // проверка большее чем 5 или меньшее чем 1
    begin
      del(n,a);
      for i1:= low(a) to high(a) do
        write(a[i1], '|');
      writeln();

      if(a[1]=0) then  // проверка на пустой масив
      begin
         write('vse pusto');
         break;
      end;
    end
    else
    begin
      write('poka!');
      break;
    end;
  end;
readln();
end.