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

Урок 15

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

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

var a: myArr;
    i, n, k: integer;
begin
  i := 1;
  randomize();
  for i:=low(a) to high(a) do // наполняем и выводим в консоль
  begin
    a[i] := random(11) - 5;
    write(a[i], ' ');
  end;
  writeln();
  writeln('Vvedite chislo ot 1 do 5'); //чтобы лишних ифов в цикле вайл не делать
  readln(n);
  while (n <= 5) and (n >= 1) and (k <> 5) do
  begin
    for i := n to high(a) do // убираем элемент, затираем данные, при этом a[9] затираем данными извне массива.
      a[i] := a[i + 1];
    k := 0;
    for i:=low(a) to high(a) do // выводим в консоль и проверяем нули
    begin
      write(a[i], ' ');
      if a[i] = 0 then // проверяем нули
          inc(k);
    end;
    writeln();
    if k <> 5 then //чтобы не запрашивать n при всех нулях и не обходить все позиции
    begin
      writeln('Vvedite chislo ot 1 do 5');
      readln(n);
    end;
  end;
  writeln('THE END');
  readln();
end.

КОНСОЛЬ

-2 4 3 -4 -3
Vvedite chislo ot 1 do 5
3
-2 4 -4 -3 0
Vvedite chislo ot 1 do 5
2
-2 -4 -3 0 0
Vvedite chislo ot 1 do 5
1
-4 -3 0 0 0
Vvedite chislo ot 1 do 5
5
-4 -3 0 0 0
Vvedite chislo ot 1 do 5
2
-4 0 0 0 0
Vvedite chislo ot 1 do 5
1
0 0 0 0 0
THE END
vedro-compota's picture

оформить сдвиг как подпрограмму

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

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

var a: myArr;
    n, k, i: integer;

function f1(arr: array of integer; m: integer): myArr; //функция сдвига
  var j: integer;
  begin
  for j := (m - 1) to (high(arr)-1) do // убираем элемент
      begin
      arr[j] := arr[j + 1]; //затираем данные
      end;
      arr[high(arr)] := 0;
      result := arr;
  end;

begin
  i := 1;
  randomize();
  for i:=low(a) to high(a) do // наполняем и выводим в консоль
  begin
    a[i] := random(11) - 5;
    write(a[i], ' ');
  end;
  writeln();
  writeln('Vvedite chislo ot 1 do 5'); //чтобы лишних ифов в цикле вайл не делать
  readln(n);
  while (n <= 5) and (n >= 1) and (k <> 5) do
  begin
    k := 0;
    a := f1(a, n);
    for i:=low(a) to high(a) do // выводим в консоль и проверяем нули
    begin
      write(a[i], ' ');
      if a[i] = 0 then // проверяем нули
          inc(k);
    end;
    writeln();
    if k <> 5 then //чтобы не запрашивать n при всех нулях
    begin
      writeln('Vvedite chislo ot 1 do 5');
      readln(n);
    end;
  end;
  writeln('THE END');
  readln();
end.

КОНСОЛЬ

3 -1 -5 4 5
Vvedite chislo ot 1 do 5
3
3 -1 4 5 0
Vvedite chislo ot 1 do 5
1
-1 4 5 0 0
Vvedite chislo ot 1 do 5
4
-1 4 5 0 0
Vvedite chislo ot 1 do 5
4
-1 4 5 0 0
Vvedite chislo ot 1 do 5
4
-1 4 5 0 0
Vvedite chislo ot 1 do 5
2
-1 5 0 0 0
Vvedite chislo ot 1 do 5
1
5 0 0 0 0
Vvedite chislo ot 1 do 5
1
0 0 0 0 0
THE END
vedro-compota's picture

засчитано

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