Сапёр Николай готовится к сдаче экзамена по обезвреживанию бомб. Среди прочего, для успешной сдачи экзамена ему необходимо обезвредить модуль с цифровой панелью. Правила обезвреживания следующие. · Цифровая панель отображает матрицу 5 на 5, состоящую из натуральных чисел, расположенных в случайном порядке.
· Цифровая панель называется корректной, если содержит в себе все числа от единицы до двадцати пяти без повторений.
· Приблизительно каждая вторая панель является корректной.
· Сапер должен определить, является ли данная цифровая панель корректной. Если цифровая панель корректна, то ему достаточно указать, что она корректна, в противном случае сапёр должен назвать наименьшее из чисел которое повторяется или которое отсутствует в таблице.
начинающему сапёру в подготовке к экзамену и напишите программу, которая позволит ему тренироваться в решении данной задачи. Предполагается, что интерфейс программы будет «консольным», тем не менее, вы можете выбрать тот тип интерфейса, который будет удобнее вам. Допускается использование английского языка в интерфейсе. Далее перечислены требования, за каждое из которых начисляется при полном выполнении.
1. Программа должна выводить на экран условие задачи (матрицу 5 на 5 из натуральных чисел), при каждом запуске программы условие должно быть разным.
2. Программа должна ждать ввода ответа от пользователя (в случае, если цифровая панель корректна, то пусть пользователь введёт слово ‘yes’, в противном случае число) и сообщать ему корректный ответ, если сапёр совершил ошибку.
3. После решения модуля (верного или нет) программа должна выдавать новое задание и продолжать тестирование сапёра.
4. Программа должна выводить количество верно решённых заданий подряд, а также процент верно решённых заданий за всё время работы программы.
5. В программе должен быть узнать правильный ответ без изменения статистики, например при вводе знака вопроса программа
будет сообщать правильный ответ, не учитывая это ни как правильный, ни как неправильный ответ.
6. При написании исходного кода придерживайтесь общих стандартов к чистоте кода на вашем языке программирования. Соблюдайте отступы, именуйте переменные в соответствии с их предназначением.
Неожиданное завершение работы программы (вылет), может привести к обнулению за те пункты, при которых встречается вылет, а также тех пунктов, работа которых зависит от обнулённых пунктов.
ВСЕ ДОЛЖНО БЫТЬ НА ЯЗЫКЕ PYTHON
Базовая структура СЛЕДОВАНИЕ указывает на то, что управление передается последовательно от одного действия к другому.
Базовая структура ВЕТВЛЕНИЕ (РАЗВИЛКА) используется в случае, когда выполнение программы может измениться в зависимости от результата проверки условия и пойти двумя разными (альтернативными) путями. Другими словами, условие является некоторым высказыванием (предикатом) и может быть истинным или ложным (принимать значение TRUE или FALSE). Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
Цикл с предусловием, или цикл «пока». При реализации этого цикла сначала проверяется условие его выполнения. Пока оно выполняется, будут происходить повторения тела цикла. Отсюда и другое его название — цикл «пока». Если условие не выполняется при первой проверке, то тело цикла не будет выполняться вообще. После выхода из цикла управление передается следующей структуре. Для того чтобы избежать зацикливания, т. е. бесконечного цикла, в теле цикла обязательно должны изменяться параметры, записанные в условии.
нц
пока условие
тело цикла (последовательность действий)
кц
Цикл с параметром. Этот вид цикла удобно использовать в тех случаях, когда заранее известно количество повторений цикла. Вводится понятие счетчика цикла, который по умолчанию считается равным либо 1, либо –1. В некоторых случаях изменение счетчика цикла (приращение) указывают явно. Для организации цикла необходимо задать верхнюю и нижнюю границы изменения счетчика цикла. В зависимости от значения верхней и нижней границы определяется шаг цикла (1 или −1), т. е. значение счетчика цикла.
нц
для i от i1 до i2
тело цикла (последовательность действий)
кц
Объяснение:
m1 = 20;
n1 = 20;
var
x: array[1..m1, 1..n1] of integer;
i, j, m, n, mx, mn: integer;
begin
Write('Введите через пробел число строк и столбцов матрицы: ');
Readln(m, n);
Randomize;
writeln(#13#10, 'Исходная матрица');
for i := 1 to m do
begin
for j := 1 to n do
begin
x[i, j] := Random(100) - 50;
Write(x[i, j]:5)
end;
Writeln
end;
for i := 1 to m do
begin
mx := x[i, 1]; mn := mx;
for j := 2 to n do
if mx < x[i, j] then mx := x[i, j]
else if mn > x[i, j] then mn := x[i, j];
Writeln('В строке ', i, ' мin=', mn, ', max=', mx)
end
end.
Тестовое решение:
Введите через пробел число строк и столбцов матрицы: 5 8
Исходная матрица
14 35 4 16 44 -14 47 36
-23 -40 16 43 40 48 21 46
23 30 -18 25 -43 -5 -3 37
24 -26 9 -37 36 23 -33 36
30 46 17 -18 -34 -35 36 28
В строке 1 мin=-14, max=47
В строке 2 мin=-40, max=48
В строке 3 мin=-43, max=37
В строке 4 мin=-37, max=36
В строке 5 мin=-35, max=46