Урок 15. Задача 8.

Урок 15. Задача 8.

Заполнить массив из 9 элементов случайными числами, далее получить случайное число N из диапазона от 1 до 9 и затем "удалить" элемент с позиции N из массива, "сдвинув" значения влево и заполнив все что справа нулями.
Примечание: операции сдвига элементов массива оформите в виде подпрограммы.

type ar = array[1..9] of integer;
var i, a : integer;
    Arr : ar;

function shift(a_1 : integer; var Arr_2 : ar) : ar;
var i : integer;
    fl : boolean;
begin
  fl := true;
  for i := 1 to 9 do
    if fl and (a_1 <> i) then // запись массива до числа-ограничителя
      Arr_2[i] := Arr_2[i]
    else
    begin                     // запись массива после числа-ограничителя
      fl := false;
      Arr_2[i] := Arr_2[i + 1];
    end;
  shift := Arr_2;
end;

begin
  randomize;
  for i := 1 to 9 do
  begin
    Arr[i] := random(9) + 1; // инициализация массива
    a := Arr[5]; // захват случайного числа
  end;

  Arr := shift(a, Arr);
  for i := 1 to 9 do // вывод измененного массива
    write(Arr[i], ' ');

  readln();
end.
vedro-compota's picture

function shift(a_1 : integer; var Arr_2 : ar) : ar;

-- зачем здесь массив передается по ссылке?

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

type ar = array[1..9] of integer;
var i, a : integer;
    Arr : ar;

function shift(a_1 : integer; Arr_2 : ar) : ar;
var i : integer;
    fl : boolean;
begin
  fl := true;
  for i := 1 to 9 do
    if fl and (a_1 <> i) then // запись массива до числа-ограничителя
      Arr_2[i] := Arr_2[i]
    else
    begin                     
      fl := false;
      if (a_1 = i) then  // сдвиг массива в лево
        Arr_2[i] := Arr_2[i + 1];
      Arr_2[i + 1] := 0; // запись массива после числа-ограничителя
    end;
  shift := Arr_2;
end;

begin
  randomize;
  for i := 1 to 9 do
  begin
    Arr[i] := random(9) + 1; // инициализация массива
    a := Arr[5]; // захват случайного числа
  end;

  for i := 1 to 9 do // вывод массива
    write(Arr[i], ' ');
  writeln();

  Arr := shift(a, Arr);
  for i := 1 to 9 do // вывод измененного массива
    write(Arr[i], ' ');

  readln();
end. 
vedro-compota's picture

for i := 1 to 9 do
    if fl and (a_1 <> i) then // запись массива до числа-ограничителя
      Arr_2[i] := Arr_2[i]
    else
    begin                    
      fl := false;
      if (a_1 = i) then  // сдвиг массива в лево
        Arr_2[i] := Arr_2[i + 1];

-- позиция уже известна на момент вызова функции, можно сразу начать сдвигать в цикле, начиная с указанного места

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