Задача 8 Урок 15: Сдвиг массива - Обсуждение решения

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

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

|1|3|4|5|4|7|-8|-9|

Путь n=2, тогда после работы программы мы должны получить:

|1|4|5|4|7|-8|-9|0|

Примечание: операции сдвига элементов массива оформите в виде подпрограммы.

type inArr = array[1..9] of Integer;

var a: array [1..9] of integer;
    i, N , min, max, minN, maxN : integer;

function SS(x: inArr; N: integer): inArr;
begin
  for i := low(x) to high(x) do
    begin
      if (i < N) then
        x[i]:=x[i]
      else if(i<9) then
        x[i] := x[i+1]
      else
        x[i]:=0;
    end;
  writeln();
  writeln('N = ',N);
  result := x;
end;

begin
  min := 1;
  max := 100;
  minN := 1;
  maxN := 9;
  randomize();
  for i := 1 to 9 do
    a[i] := random(max - min + 1) + min;
  N := random(maxN - minN + 1) + minN;
  for i := low(a) to high(a) do //цикл вывода на экран начального массива
    write(a[i], ' ');
  writeln();

  a := SS(a,N); // переопределяем массив возвращеннным
  for i := low(a) to high(a) do // цикл вывода нового массива
    write(a[i], ' ');
  writeln();

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

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

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

Исправил вверху (был неполный тестовый вариант)

vedro-compota's picture

1)

      if (i < N) then
        x[i]:=x[i]

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

2)

   x[i]:=0;

последний элемент лучше затереть после цикла

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

type inArr = array[1..9] of Integer;

var a: array [1..9] of integer;
    i, N , min, max, minN, maxN : integer;

function numDeleter(x: inArr; N: integer): inArr;
begin

  for i := N to high(x) do
    begin
       if(i<9) then
        x[i] := x[i+1]
    end;
  x[i]:=0;
  writeln();
  writeln('N = ',N);
  result := x;
end;

begin
  min := 1;
  max := 100;
  minN := 1;
  maxN := 9;
  randomize();
  for i := 1 to 9 do
    a[i] := random(max - min + 1) + min;
  N := random(maxN - minN + 1) + minN;
  for i := low(a) to high(a) do //цикл вывода на экран начального массива
    write(a[i], ' ');
  writeln();

  a := numDeleter(a,N); // переопределяем массив возвращеннным
  for i := low(a) to high(a) do // цикл вывода нового массива
    write(a[i], ' ');
  writeln();

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

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

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