Задача 12 Урок 15
Primary tabs
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 |
- Log in to post comments
- 565 reads
iiekka
Wed, 11/16/2022 - 03:45
Permalink
Исправлено
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.