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

Задача 12 Урок 15:

12. Пусть есть процедура, которая умеет сдвигать массив влево на 1 элемент, начиная с указанного символа (устанавливая последний элемент равным нулю):

type newArr = array [1..5] of integer;
  
procedure shiftArr(var promArr: newArr; k:integer);
var j:integer;
begin
  for j:=k to 4 do
    promArr[j]:=promArr[j+1];
  promArr[high(promArr)]:=0;
end; 

Задача: У вас есть исходный массив случайных целых чисел из 5 элементов. Пользователь вводит три целых числа, сохраните их во второй массив и затем проведите сдвиг элементов исходного массива, для каждого случая их совпадения с элементами из второго массива, для сдвига используйте процедуру shiftArr().

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

var
  randArr: newArr;
  userArr: array[1..3] of integer;
  min, max, i, x: integer;

procedure shiftArr(var promArr: newArr; k: integer);
var j: integer;
begin
  for j := k to (high(promArr) - 1) do
    promArr[j] := promArr[j + 1];
  promArr[high(promArr)] := 0;

end;

begin
  min := 1;
  max := 10;
  randomize();
  for i := low(randArr) to high(randArr) do
  begin
    randArr[i] := min + random(max - min + 1);
    write(randArr[i], ' | ');
  end;
  writeln();

  for x := low(userArr) to high(userArr) do
  begin
    write('Введите ', x, ' целое число: ');
    readln(userArr[x]);
  end;
  for x := low(userArr) to high(userArr) do
    for i := low(randArr) to high(randArr) do
    begin
      if (userArr[x] = randArr[i]) then
      begin
        shiftArr(randArr, i);

        // i := (i -1); как откатить на один виток цикла, чтобы сравнивалось с предыдущим значением i
      end;
    end;
    for i := low(randArr) to high(randArr) do
      write(randArr[i], ' | ');
  readln();
end.

Вывод консоли:

3 | 5 | 5 | 5 | 10 |
Введите 1 целое число: 5
Введите 2 целое число: 1
Введите 3 целое число: 2
3 | 5 | 10 | 0 | 0 |

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

var
  randArr: newArr;
  userArr: array[1..3] of integer;
  min, max, i, x: integer;

procedure shiftArr(var promArr: newArr; k: integer);
var j: integer;
begin
  for j := k to (high(promArr) - 1) do
    promArr[j] := promArr[j + 1];
  promArr[high(promArr)] := 0;
end;

begin
  min := 1;
  max := 10;
  randomize();
  for i := low(randArr) to high(randArr) do
  begin
    randArr[i] := min + random(max - min + 1);
    write(randArr[i], ' | ');
  end;
  writeln();

  for x := low(userArr) to high(userArr) do
  begin
    write('Введите ', x, ' целое число: ');
    readln(userArr[x]);
  end;
  for x := low(userArr) to high(userArr) do
    for i := low(randArr) to high(randArr) do
    begin
      if (userArr[x] = randArr[i]) then
      begin
        while (userArr[x] = randArr[i]) do
        shiftArr(randArr, i);
      end;
    end;
    for i := low(randArr) to high(randArr) do
      write(randArr[i], ' | ');
  readln();
end.