Урок 15. Задача №7. Решение.

Урок 15. Задача №7.

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

Цикл должен работать до тех пор, пока в массиве не останется ненулевых элементов или пока пользователь не введет число большее чем 9 или меньшее чем 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| // промежуточный результат

// Сообщение о завершении, т.к. все элементы удалены
-- в данном случае программа завершилась, так как удалены все элементы.
Если бы пользователь ввел число 10 или -5 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.

type
  MyArr = array[1..5] of integer;

function FillArray(other_arr: MyArr): MyArr;
var i, min, max: integer;
begin
  randomize();
  min := -10;
  max := 10;
  for i := 1 to length(other_arr) do
    other_arr[i] := min + random(max - min + 1);
  result := other_arr;
end;

function RebuildArr(copy_arr: MyArr; b: integer): MyArr;
var i, j: integer;
begin
  i := 1;
  j := 1;
  while(i <= length(copy_arr)) do
  begin
    if(i = b) then
      i += 1;
    copy_arr[j] := copy_arr[i];
    j += 1;
    i += 1;
  end;
  result := copy_arr;
end;

procedure ShowArray(arr_first: MyArr);
var i: integer;
begin
  writeln('arr = ');
  for i := 1 to length(arr_first) do
    write('|', arr_first[i], '|', ' ');
  writeln();
end;

var a, k: integer;
  arr: MyArr;
begin
  arr := FillArray(arr);
  ShowArray(arr);
  k := high(arr);
  while(k >= low(arr)) do
  begin
    writeln();
    writeln('Enter integer from 1 until 5 : ');
    readln(a);
    if(a > 5) or (a < 1) then
    begin
      writeln('Error! You entered an invalid number! Try again.');
      break;
    end;
  arr := RebuildArr(arr, a);
  arr[k] := 0;
  k -= 1;
  writeln();
  ShowArray(arr);
  end;
  writeln();
  writeln('Programe is complited. All the elements of array deleted');

  readln(); // Удержание консоль
end.// Завершение программы  
vedro-compota's picture

решение засчитано

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

vedro-compota's picture

 while(k >= low(arr)) do

-- уточнить

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

Firons's picture

type
 IntArr = array[1..5] of integer;

function FillArray(other_arr: IntArr): IntArr;
var i, min, max: integer;
begin
  randomize();
  min := -10;
  max := 10;
  for i := 1 to length(other_arr) do
    other_arr[i] := min + random(max - min + 1);
  result := other_arr;
end;

function RebuildArr(copy_arr: IntArr; b: integer): IntArr;
var i, j: integer;
begin
  i := 1;
  j := 1;
  while(i <= length(copy_arr)) do
  begin
    if(i = b) then
      i += 1;
    copy_arr[j] := copy_arr[i];
    j += 1;
    i += 1;
  end;
  result := copy_arr;
end;

procedure ShowArray(arr_first: IntArr);
var i: integer;
begin
  writeln('arr = ');
  for i := 1 to length(arr_first) do
    write('|', arr_first[i], '|', ' ');
  writeln();
end;

var k, poz: integer;
  arr: IntArr;
begin
  arr := FillArray(arr);
  ShowArray(arr);
  k := high(arr);
  while(k >= low(arr)) do
  begin
    writeln();
    writeln('Enter integer from 1 until 5 : ');
    readln(poz);
    if(poz > 5) or (poz < 1) then
    begin
      writeln('Error! You entered an invalid number! Try again.');
      break;
    end;
    if(arr[poz] <> 0) then
    begin
      arr := RebuildArr(arr, poz);
      arr[k] := 0;
      k -= 1;
    end else
      writeln('Try again please.');
    writeln();
    ShowArray(arr);
  end;
  writeln();
  writeln('Programe is complited. All the elements of array deleted');

  readln(); // Удержание консоль
end.// Завершение программы 
vedro-compota's picture

добавить оценку изначально нулевых k

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

Firons's picture

type
 IntArr = array[1..5] of integer;

function Check_on_Zero(arr_ch: IntArr): boolean;
var i, a: integer;
  allZero: boolean;
begin
  a := 0;
  allZero := false;
  for i := 1 to length(arr_ch) do
    if(arr_ch[i] = 0) then
      inc(a);
  if(a = high(arr_ch)) then
    allZero := true;
  result := allZero;
end;

function FillArray(other_arr: IntArr): IntArr;
var i, min, max: integer;
begin
  randomize();
  min := -10;
  max := 10;
  for i := 1 to length(other_arr) do
    other_arr[i] := min + random(max - min + 1);
  result := other_arr;
end;

function RebuildArr(copy_arr: IntArr; b: integer): IntArr;
var i, j: integer;
begin
  i := 1;
  j := 1;
  while(i <= length(copy_arr)) do
  begin
    if(i = b) then
      i += 1;
    copy_arr[j] := copy_arr[i];
    j += 1;
    i += 1;
  end;
  result := copy_arr;
end;

procedure ShowArray(arr_first: IntArr);
var i: integer;
begin
  writeln('arr = ');
  for i := 1 to length(arr_first) do
    write('|', arr_first[i], '|', ' ');
  writeln();
end;

var k, poz: integer;
  arr: IntArr;
begin
  k := high(arr);
  arr := FillArray(arr);
  ShowArray(arr);
  while(Check_on_Zero(arr) = false) do
  begin
    writeln();
    writeln('Enter integer from 1 until 5 : ');
    readln(poz);
    if(poz > 5) or (poz < 1) then
    begin
      writeln('Error! You entered an invalid number! Try again.');
      break;
    end;
    if(arr[poz] <> 0) then
    begin
      arr := RebuildArr(arr, poz);
      arr[k] := 0;
      k -= 1;
    end else
      writeln('Try again please.');
    writeln();
    ShowArray(arr);
  end;
  writeln();
  writeln('Programe is complited. All the elements of array deleted');

  readln(); // Удержание консоль
end.// Завершение программы