Теория:
Характеристика задания
2. Структура содержания задания: дана программа на нескольких языках программирования, нужно проанализировать её и ответить на поставленный вопрос.
3. Уровень сложности: базовый.
4. Примерное время выполнения: \(4\) минуты.
5. Количество баллов: \(1\).
6. Требуется специальное программное обеспечение: нет.
7. Задание проверяет умение анализировать программу на одном из языков программирования, содержащую условный оператор и логические операции.
Пример задания из демоверсии ОГЭ-\(2024\)
Ниже приведена программа, записанная на пяти языках программирования.
Алгоритмический язык алг нач цел s, t ввод s ввод t если s \(>\) \(10\) или t \(>\) \(10\) то вывод ′YES′ иначе вывод ′NO′ все кон | Паскаль var s, t: integer; begin readln(s); readln(t); if (s \(> \) \(10\)) or (t \(> \) \(10\)) then writeln(′YES′) else writeln(′NO′) end | Бейсик DIM s, t AS INTEGER INPUT s INPUT t IF s \(>\) \(10\) OR t \(>\) \(10\) THEN PRINT ′YES′ ELSE PRINT ′NO′ ENDIF |
Python s \(=\) int(input()) t \(=\) int(input()) if (s \(>\) \(10\)) or (t \(>\) \(10\)): print(′YES′) else: print(′NO′) | C\(++ \) #include <iostream> using namespace std; int main(){ int s, t; cin \(>>\) s; cin \(>>\) t; if (s \(>\) \(10\) || t \(>\) \(10\)) cout \(<<\) ′YES′ \(<<\) endl; else cout \(<<\) ′NO′ \(<<\) endl; return \(0\); } |
Было проведено \(9\) запусков программы, при которых в качестве значений
переменных вводились следующие пары чисел \((s, t)\):
переменных вводились следующие пары чисел \((s, t)\):
\((1, 2); (11, 2); (1, 12); (11, 12); (–11, –12); (–11, 12); (–12, 11); (10, 10); (10, 5)\).
\( \)
Сколько было запусков, при которых программа напечатала «YES»?
Сколько было запусков, при которых программа напечатала «YES»?
Решение
Из текста программы мы видим, что программа печатает «YES» всякий раз, когда выполняется условие:
\(s\) \(>\) \(10\) или \(t\) \(>\) \(10\).
Чтобы не запутаться в условии, составим таблицу, куда занесём все вводимые данные, и заполним её как таблицу истинности для логической операции «ИЛИ»:
\((s, t)\) | \(s\) \(> 10\) | \(t\) \(> 10\) | ИЛИ |
\((1, 2)\) \((11, 2)\) \((1, 12)\) \((11, 12)\) \((-11, -12)\) \((-11, 12)\) \((-12, 11)\) \((10, 10)\) \((10, 5)\) | \(0\) \(1\) \(0\) \(1\) \(0\) \(0\) \(0\) \(0\) \(0\) | \(0\) \(0\) \(1\) \(1\) \(0\) \(1\) \(1\) \(0\) \(0\) | \(0\) \(1\) \(1\) \(1\) \(0\) \(1\) \(1\) \(0\) \(0\) |
Теперь не трудно ответить на вопрос этого задания. Так как нас спрашивают, сколько раз программа напечатала «YES», а мы знаем, что «YES» программа печатала только в случае выполнения условия условного оператора, то для этого нам достаточно посчитать количество единиц в последнем столбце нашей таблицы.
Правильный ответ: \(5\).
• В условии задачи переменные \((s, t)\) могут вводиться в обратном порядке. Всегда проверяем, чтобы ввод \(s\), ввод \(t\) в самой программе совпадали с порядком переменных в задании: «...вводились следующие пары чисел \((s, t)\)».
• Обращаем внимание на знаки неравенств — включены ли границы интервалов? В нашем примере \(10\) не удовлетворяет условию \(s\) \(> 10\), так как неравенство строгое.
• При ответе на вопрос «Сколько раз программа напечатала «Да»?» считаем количество \(1\) в нашей таблице.
• При ответе на вопрос «Сколько раз программа напечатала «Нет»?» считаем количество \(0\).
• В этой задаче в условии могут встречаться операции DIV — целочисленное деление — и MOD — остаток от деления.