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

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

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

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

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

Примечание: оформить код сдвига элемента как функцию.

program project1;

type newArr = array [1..5] of integer;
var numArr: newArr;
    i,n: 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;

begin
  randomize;
  for i:=1 to 5 do
  begin
    numArr[i]:=1+random(20);
    write(numArr[i],'|');
  end;
  writeln();
  write('Случайное значение N: '); readln(n);
  while(n<high(numArr))do
  begin
  shiftArr(numArr,n);
    if((numArr[low(numArr)]=0)or(n<1))then
  begin
    break;
  end;
  for i:=1 to 5 do
    write(numArr[i],'|');
  writeln();

  write('Случайное значение N: '); readln(n);
  end;
  readln();
end.                     
vedro-compota's picture

засчитано

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

Привет , при попытке ввести 5 не сдвигает массив

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

var numArr: newArr;
    i,n: 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;

begin
  randomize;
  for i:=1 to 5 do
  begin
    numArr[i]:=1+random(20);
    write(numArr[i],'|');
  end;
  writeln();
  write('Случайное значение N: '); readln(n);
  while(n<=high(numArr))do
  begin
  shiftArr(numArr,n);
    if((numArr[low(numArr)]=0)or(n<1))then
  begin
    break;
  end;
  for i:=1 to 5 do
    write(numArr[i],'|');
  writeln();

  write('Случайное значение N: '); readln(n);
  end;
  readln();
end.    
vedro-compota's picture

Пусть есть процедура, которая умеет сдвигать массив влево на 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 элементов. Пользователь вводит три числа целых числа, сохраните их во второй массив и затем проведите сдвиг элементов исходного массива, если они совпадают с каким-то из введенных чисел.

Пример 1:

Исходный массив: 1 5 6 8 9
Числа пользователя:
2
4
5
Ответ:
1 6 8 9 0

Пример 2:

Исходный массив: 1 5 6 8 9
Числа пользователя:
8
4
6
Ответ:
1 5 9 0 0

Пример 3:

Исходный массив: 1 5 6 5 9
Числа пользователя:
5
4
6
Ответ:
1 9 0 0 0

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