Урок 15 Задача 10
Primary tabs
Заполните массив из 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 - то это тоже была бы ситуация для завершения, но элементы в массиве ещё бы остались.Примечание: оформить код сдвига элемента как функцию.
var m: array[1..5] of integer; i, x: integer; q, p: boolean; function sdvig (a, b: integer): integer; // функция принимает текущий и следующий эл-т массива, возвращает новое значение текущего begin a:=b; // присваиваем текущему эл-ту значение след-го, последнему присвоится 0 result:= a; // результат - новый текущий элемент end; begin randomize(); for i:=low(m) to high(m) do // цикл для присваивания случайных значений begin m[i] := random(9) + 1; write(m[i], ' '); end; // конец цикла writeln(' -- исходный массив'); while (p = false) do // цикл работает, пока переключатель остается в таком положении, т.е. пока не все эл-ты массива нулевые begin write('Введите число от 1 до 5: '); readln (x); // считываем введенное значение if (1<=x) and (x<=5) then // проверка, чтобы введенное значение было от 1 до 5 begin q:= false; // ставим переключатель в исходное положение p:= true; // ставим второй переключатель в исходное положение for i:=low(m) to high(m) do // вложенный цикл для обхода массива begin if (i = x) then // когда счетчик сравнивается с введенным числом q:= true; // переключаем переключатель if q = true then // когда переключатель переключен m[i]:= sdvig (m[i], m[i+1]); // передаем в функцию текущий и следующий эл-нт массива, получаем от ф-ции новый текущий эл-нт if not (m[i]=0) then // если встретится ненулевой элемент p:= false; // переключаем второй переключатель write (m[i], ' '); end; if p = false then writeln(' -- промежуточный результат') else writeln(' -- не осталось ненулевых элементов'); end; end; readln (); end.
- Log in to post comments
- 584 reads
vedro-compota
Sun, 11/27/2022 - 13:16
Permalink
function sdvig
function sdvig
-- на вход получаем массив и позицию сдвига и возвращаем массив итоговом виде
_____________
матфак вгу и остальная классика =)
Patrick
Tue, 11/29/2022 - 18:10
Permalink
Исправил
Вывод в консоли:
vedro-compota
Sun, 12/04/2022 - 13:57
Permalink
аналогично исправить сдвиг
аналогично исправить сдвиг
_____________
матфак вгу и остальная классика =)
math2
Sun, 11/27/2022 - 20:03
Permalink
Для теста
Для теста
vedro-compota
Sun, 11/27/2022 - 20:43
Permalink
поправили запуск
поправили запуск
_____________
матфак вгу и остальная классика =)