СВЕТ: СПАСИБО
01-12-2023
Читать статью
Калужский Александр: Задача про Цаплю: https://www.youtube.co..
24-11-2023
Сергей: спасибо большое
Пришло время 6 задания из ОГЭ по информатике 2023.
В этом задании нужно проанализировать программу на одном из языков программирования и ответить на поставленный вопрос.
Перейдём к примерным задачам из ОГЭ по информатике.
Ниже приведена программа, записанная на 5 языках программирования.
DIM s, t AS INTEGER INPUT s INPUT t IF s > 8 OR t > 8 THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t: integer; begin readln(s); readln(t); if (s > 8) or (t > 8) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t; cin >> s; cin >> t; if (s > 8 || t > 8) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t ввод s ввод t если s > 8 или t > 8 то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) if (s > 8) or (t > 8): print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (5, 6); (9, 5); (6, 8); (10, 9); (–9, –10); (–9, 10); (–10, 9); (8, 8); (8, 6).
Сколько было запусков, при которых программа напечатала «YES»?
Разберём программы на Питоне и на Паскале.
Чтобы программа напечатала "YES", нужно, чтобы в паре было хотя бы одно число, которое больше 8, т.к. в условии стоит союз ИЛИ (or).
Подходят пары: (9, 5); (10, 9); (-9, 10); (–10, 9); . Всего получается 4 запуска.
DIM s, t AS INTEGER INPUT s INPUT t IF s < 5 OR t > 5 THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t: integer; begin readln(s); readln(t); if (s < 5) or (t > 5) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t; cin >> s; cin >> t; if (s < 5 || t > 5) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t ввод s ввод t если s < 5 или t > 5 то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) if (s < 5) or (t > 5): print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (2, 5); (5, 2); (4, 4); (2, -2); (3, 1); (8, 3); (9, -7); (7, 7); (4, 6).
Чтобы программа напечатала "YES", нужно, чтобы в паре первое число s было меньше 5 ИЛИ второе число t было больше 5, или оба условия выполнились одновременно.
Подходят пары: (2, 5); (4, 4); (2, -2); (3, 1); (7, 7); (4, 6); Всего получается 6 запусков.
DIM s, t AS INTEGER INPUT s INPUT t IF s >= 8 AND t >= 10 THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t: integer; begin readln(s); readln(t); if (s >= 8) and (t >= 10) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t; cin >> s; cin >> t; if (s >= 8 && t >= 10) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t ввод s ввод t если s >= 8 и t >= 10 то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) if (s >= 8) and (t >= 10): print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (6, 8); (9, 10); (9, 5); (-10, 9); (5, 6); (9, -10); (10, 9); (8, 10); (17, 10).
В этот раз в условии стоит союз И (and). В этом случае, чтобы распечаталось YES, нужно, чтобы два условия одновременно сработали. Т.е. первое число должно быть s >= 8, а второе t >= 10, тогда мы пару будем засчитывать.
Подходят пары: (9, 10); (8, 10); (17, 10); Всего получается 3 запуска.
DIM s, t AS INTEGER INPUT s INPUT t IF s > 6 AND t < 7 THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t: integer; begin readln(s); readln(t); if (s > 6) and (t < 7) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t; cin >> s; cin >> t; if (s > 6 && t < 7) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t ввод s ввод t если s > 6 и t < 7 то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) if (s > 6) and (t < 7): print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (7, 3); (2, 7); (6, 10); (5, 3); (5, 4); (-11, 4); (-8, 9); (7, 3); (9, 1).
Сколько было запусков, при которых программа напечатала «NO»?
Здесь нужно определить сколько раз распечатается "NO". В подобных случаях удобно всё равно считать сколько раз распечатается "YES", а потом вычислить сколько раз будет распечатано "NO".
В условии стоит союз И. Значит, первое число должно s быть больше 6 и одновременно с этим второе число t должно быть меньше 7.
Подходят пары: (7, 3); (7, 3); (9, 1); Всего получается 3 запуска.
Но нам нужно было найти, сколько раз выведется "NO". Поэтому ответ будет 9-3=6.
DIM s, t AS INTEGER INPUT s INPUT t IF s \ 2 = t THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t: integer; begin readln(s); readln(t); if s div 2 = t then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t; cin >> s; cin >> t; if (s / 2 == t) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t ввод s ввод t если div(s, 2) = t то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) if s // 2 == t: print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (1, 1); (8, 4); (14, 10); (20, 1); (7, 3); (10, 5); (10, 2); (4, 1); (1, 0).
Команда div в Паскале или двойной слеш в Питоне обозначает целочисленное деление!
Как это работает ? Например 5:2 = 2,5, но если мы сделаем 5 // 2 = 2. Т.е. дробная часть просто отбрасывается. Не округляется, а просто отбрасывается. Или другими словами происходит округление в меньшую сторону.
В нашей программе будет печататься "YES", когда применяется целочисленное деление на 2 к первому числу, и получается второе число. Посмотрим в каких парах будет выведено "YES".
Это пары: (8, 4); (7, 3); (10, 5); (1, 0). Четыре запуска. Значит, "NO" распечатается в 5 (9-4) случаях.
DIM s, t, A AS INTEGER INPUT s INPUT t INPUT A IF s > A OR t > 12 THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t, A: integer; begin readln(s); readln(t); readln(A); if (s > A) or (t > 12) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t, A; cin >> s; cin >> t; if(s > A || t > 12) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t, A ввод s ввод t если s > A или t > 12 то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) A = int(input()) if s > A or t > 12: print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (13, 2); (11, 12); (-12, 12); (2, -2); (-10, -10); (6, -5); (2, 8); (9, 10); (1, 13).
Укажите наименьшее целое значение параметра A, при котором при указанных входных данных программа напечатает "YES" 3 раза.
В условии стоит союз ИЛИ. Посмотрим, сколько пар подойдёт, если обращать внимание только на переменную t. Она должна быть больше 12. Тогда получается одна пара: (1, 13).
Ещё нужно набрать 2 пары. Это сделаем с помощью переменной s. Понимаем, что A должно быть равно 10, тогда ещё две пары подойдут по первому числу (13, 2) и (11, 12).
Но нас просили A найти как можно меньше. При значении 9 так же останутся три пары, но A будет ещё меньше. Значит, ответ будет 9. Ели попробовать взять A=8, то подойдёт ещё одна пара (9, 10), и их будет уже 4.
Укажите количество целых значений параметра A, при которых при указанных входных данных программа напечатает "NO" 5 раз.
Будем отталкиваться от количества "YES"ов.
Вновь найдём количество пар, которые печатают "YES" по второму числу, в независимости от параметра A. Получается одна пара (1, 13).
Нужно выбрать параметр A таким, чтобы распечатали "YES" ещё три пары. Здесь уже ориентируемся на первое число s.
Выберем A = 8. Тогда распечатают "YES" ещё три пары: (13, 2) ; (11, 12) ; (9, 10). Это наибольшее значение A, при котором распечатается 5 "NO". Но так же 5 "NO" будет напечатано и при A = 7, 6. При A = 5 добавляется ещё одна пара (6, -5), при которой будет напечатано "YES", и уже условие задачи не выполняется.
Таким образом, ответ получается 3 (А = 8, 7, 6).
DIM s, t, A AS INTEGER INPUT s INPUT t INPUT A IF s > 10 OR t > A THEN PRINT "YES" ELSE PRINT "NO" ENDIF
var s, t, A: integer; begin readln(s); readln(t); readln(A); if (s > 10) or (t > A) then writeln("YES") else writeln("NO") end.
#include using namespace std; int main(){ int s, t, A; cin >> s; cin >> t; if(s > 10 || t > A) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
алг нач цел s, t, A ввод s ввод t если s > 10 или t > A то вывод "YES" иначе вывод "NO" все кон
s = int(input()) t = int(input()) A = int(input()) if s > 10 or t > A : print("YES") else: print("NO")
Было проведено 9 запусков программы, при которых в качестве значений переменных вводились следующие пары чисел (s, t): (1, 2); (11, 2); (1, 12); (11, 12); (-11, -12); (-11, 12); (-12, 11); (10, 10); (10, 5).
Укажите наименьшее целое значение параметра A, при котором при указанных входных данных программа напечатает "NO" 3 раза.
Найдём сколько раз программа напечатает "YES", исходя из первого числа s. Получается только две пары: (11, 2) и (11, 12). Значит, 7 раз "NO". Нужно увеличивать количество "YES"ов.
Попробуем взять A=6. В группу "YES" передут ещё 4 пары: (1, 12); (-11; 12); (-12; 11); (10; 10).
В группе "NO" как раз останутся три пары: (1, 2); (-11, -12); (10, 5).
Проверим, является ли число 6 для переменной A минимальным.
Попробуем A=5. Оказывается, три вышеперечисленные пары остаются в группе "NO". Последняя пара тоже не распечатает "YES", ведь неравенство строгое.
Если будет A=4, то последняя пара уже будет печатать "YES", и условие задачи перестанет выполняться.
На этом всё, пусть у вас получится решить 6 задание из ОГЭ по информатике без сучка без задоринки.