236.48K
Category: programmingprogramming

Программирование в заданиях ОГЭ-2022. Формальное исполнение алгоритма

1.

Программирование в заданиях
ОГЭ-2022
Учитель – Богачёва Г.В.
Лицей № 144 Санкт-Петербурга

2.

Формальное исполнение
алгоритма
Задание №6

3.

Задача 1.
Было проведено 9 запусков программы, при которых в качестве значений
переменных s и k вводились следующие пары чисел:
(2, 2); (5, 9); (7, −12); (5, 5); (2, 12); (—10, —13); (—11, 11); (1, 4); (2, 6).
Сколько было запусков, при которых программа напечатала «ДА»?
Паскаль
var s, k: integer;
begin
readln(s);
readln(k);
if (s > 5) or (k > 5)
then writeln ('ДА')
else writeln ('НЕТ')
end.
Python
s = int(input())
k = int(input())
if s > 5 or k > 5:
print("ДА")
else:
print("НЕТ")
С++
#include <iostream>
using namespace std;
int main() {
int s, k;
cin >> s;
cin >> k;
if (s > 5 || k > 5)
cout << "ДА";
else
cout << "НЕТ";
return 0;
}

4.

Проведём анализ программы:
var s, k: integer; - раздел описания переменных. Задаются имя, тип, выделяется
место в памяти. В данном случае переменные s и k – целого типа.
begin – начало раздела операторов.
readln(s); readln(k); - оператор ввода числа с клавиатуры (число записывается
в указанную переменную)
if (s > 5) or (k > 5)
– условный оператор (полное ветвление, конструкция
then writeln ('ДА') If <условие> then <оператор1> else <оператор 2>
else writeln ('НЕТ')
(s > 5) or (k > 5) – сложное условие, два простых объединены логической
операцией дизъюнкция. Дизъюнкция ложна, когда оба условия ложны, если
хотя бы одно из условий истинно, их дизъюнкция – истина.
writeln ('ДА') (writeln ('НЕТ')) – оператор вывода на экран.
end. – конец программы.
Таким образом, слово ДА на экране появится тогда, когда хотя бы одно из
введённых чисел больше 5 (неравенства строгие).
Это пары (5, 9); (7, −12); (2, 12); (—11, 11); (2, 6)
Ответ: 5

5.

Было проведено 9 запусков программы, при которых в качестве значений
переменных s и k вводились следующие пары чисел:
Задача 2. (1, 1); (10, 7); (6, −12); (6, 6); (5, 2); (−10, −8); (−10, 11); (3, 1); (12, 8).
Сколько было запусков, при которых программа напечатала «ДА»?
Паскаль
var s, k: integer;
begin
readln(s);
readln(k);
if (s < 7) and (k < 7)
then writeln ('ДА')
else writeln ('НЕТ')
end.
Python
s = int(input())
k = int(input())
if s < 7 and k < 7:
print("ДА")
else:
print("НЕТ")
С++
#include <iostream>
using namespace std;
int main() {
int s, k;
cin >> s;
cin >> k;
if(s < 7 && k < 7)
cout << "ДА";
else
cout << "НЕТ";
return 0;
}

6.

Проведём анализ программы:
var s, k: integer; - раздел описания переменных. Задаются имя, тип, выделяется
место в памяти. В данном случае переменные s и k – целого типа.
begin – начало раздела операторов.
readln(s); readln(k); - оператор ввода числа с клавиатуры (число записывается
в указанную переменную)
if (s < 7) and (k < 7)
– условный оператор (полное ветвление, конструкция
then writeln ('ДА') If <условие> then <оператор1> else <оператор 2>
else writeln ('НЕТ')
(s < 7) and (k < 7)– сложное условие, два простых объединены логической
операцией конъюнкция. Конъюнкция истинна, когда оба условия истинны.
writeln ('ДА') (writeln ('НЕТ')) – оператор вывода на экран.
end. – конец программы.
Таким образом, слово ДА на экране появится тогда, когда оба введённых числа
меньше 7 (неравенства строгие).
Это пары (1, 1); (6, −12); (6, 6); (5, 2); (−10, −8); (3, 1)
Ответ: 6

7.

Было проведено 9 запусков программы, при которых в качестве значений
переменных s и t вводились следующие пары чисел:
(1, 2); (11, 2); (1, 12); (11, 12); (−11, −12); (−11, 12); (−12, 11); (10, 10); (10, 5).
Задача 3. Укажите количество целых значений параметра A, при которых для
указанных входных данных программа напечатает «NO» три раза.
Паскаль
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.
Python
s = int(input())
t = int(input())
A = int(input())
if (s > 10) or (t > A):
print("YES")
else:
print("NO")
С++
#include <iostream>
using namespace std;
int main() {
int s, t, A;
cin >> s;
cin >> t;
cin >> A;
if(s > 10) or (t > A)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}

8.

Проведём анализ программы:
if (s > 10) or (t > A)
– условный оператор (полное ветвление, конструкция
then writeln ('ДА') If <условие> then <оператор1> else <оператор 2>
else writeln ('НЕТ')
(s > 10) or (t > A)– сложное условие, два простых объединены логической
операцией дизъюнкция. Дизъюнкция ложна, когда оба условия ложны, если
хотя бы одно из условий истинно, их дизъюнкция – истина.
Программа напечатает «NO», если переменная s будет меньше или равна 10, а
переменная t будет меньше или равна А.
Из первой части условия получаем, что при вводе значений s и t (11, 2) и
(11, 12) программа напечатает «YES» вне зависимости от значения A.
Заметим, что при A = 1 программа напечатает «NO» один раз, при 2 ≤ A ≤ 4
программа напечатает «NO» два раза, при 5 ≤ A ≤ 9 программа напечатает
«NO» три раза, а при A > 9 программа будет печатать «NO» четыре и более раз.
Таким образом, существует 5 значений параметра A, при которых «NO» будет
напечатано три раза, а именно 5, 6, 7, 8, 9, следовательно, ответ — 5.
Ответ: 5

9.

Было проведено 9 запусков программы, при которых в качестве значений
переменных s и t вводились следующие пары чисел:
Задача 4. (9, 9); (9, 10); (8, 5); (11, 6); (–11, 10); (–5, 9); (–10, 10); (4, 5); (8, 6).
Сколько было запусков, при которых программа напечатала «NO»?
Паскаль
var s, t: integer;
begin
readln(s);
readln(t);
if (s > 9) or (t > 9)
then writeln('YES')
else writeln('NO')
end.
Python
s = int(input())
t = int(input())
if s > 9 or t > 9:
print("YES")
else:
print("NO")
С++
#include <iostream>
using namespace std;
int main() {
int s, t;
cin >> s;
cin >> t;
if (s > 9 || t > 9)
cout << "YES";
else
cout << "NO";
return 0;
}

10.

Проведём анализ программы:
var s, k: integer; - раздел описания переменных. Задаются имя, тип, выделяется
место в памяти. В данном случае переменные s и k – целого типа.
begin – начало раздела операторов.
readln(s); readln(k); - оператор ввода числа с клавиатуры (число записывается
в указанную переменную)
if (s > 9) or (t > 9)
– условный оператор (полное ветвление, конструкция
then writeln ('ДА') If <условие> then <оператор1> else <оператор 2>
else writeln ('НЕТ')
(s > 9) or (t > 9) – сложное условие, два простых объединены логической
операцией дизъюнкция. Дизъюнкция ложна, когда оба условия ложны, если
хотя бы одно из условий истинно, их дизъюнкция – истина.
writeln ('ДА') (writeln ('НЕТ')) – оператор вывода на экран.
end. – конец программы.
Таким образом, слово NO на экране появится тогда, когда оба введенных числа
будут меньше или равны 9.
Это пары (9, 9); (8, 5); (–5, 9); (4, 5); (8, 6).
Ответ: 5

11.

Было проведено 9 запусков программы, при которых в качестве значений
переменных s и k вводились следующие пары чисел:
Задача 5. (1, 1); (8, 4); (14, 10); (20, 1); (7, 3); (10, 5); (10, 2); (4, 1); (1, 0).
Сколько было запусков, при которых программа напечатала «ДА»?
Паскаль
var s, k: integer;
begin
readln(s);
readln(k);
if s div 2 = k
then writeln ('ДА')
else writeln ('НЕТ')
end.
Python
s = int(input())
k = int(input())
if s // 2 == k:
print("ДА")
else:
print("НЕТ")
С++
#include <iostream>
using namespace std;
int main() {
int s, k;
cin >> s;
cin >> k;
if (s / 2 == k)
cout << "ДА";
else
cout << "НЕТ";
return 0;
}

12.

Проведём анализ программы:
var s, k: integer; - раздел описания переменных. Задаются имя, тип, выделяется
место в памяти. В данном случае переменные s и k – целого типа.
begin – начало раздела операторов.
readln(s); readln(k); - оператор ввода числа с клавиатуры (число записывается
в указанную переменную)
if s div 2 = k
– условный оператор (полное ветвление, конструкция
then writeln ('ДА') If <условие> then <оператор1> else <оператор 2>
else writeln ('НЕТ')
s div 2 = k - условие, которое истинно, если при делении s нацело на 2
получается k (целая часть частного).
writeln ('ДА') (writeln ('НЕТ')) – оператор вывода на экран.
end. – конец программы.
Таким образом, слово ДА на экране появится тогда, когда при делении первого
числа на 2 целая часть частного равна второму числу..
Это пары (8, 4); (7, 3); (10, 5); (1, 0).
Ответ: 4

13.

Задача 6.
Задача 7.
Было проведено 9 запусков программы, при которых в качестве значений
переменных s и k вводились следующие пары чисел:
(1, 1); (10, 8); (9, −12); (6, 6); (5, 15); (−10, −8); (−10, 11); (3, 1); (1, 8).
Сколько было запусков, при которых программа напечатала «ДА»?
var s, k: integer;
begin
readln(s);
readln(k);
Ответ: 4
if (s < 8) and (k < 8)
then writeln ('ДА')
else writeln ('НЕТ')
end.
Было проведено 9 запусков программы, при которых в качестве значений
переменных s и t вводились следующие пары чисел:
(3, 4); (5, 4); (–2, 1); (5, 6); (7, 8); (–5, 5); (–2, 2); (4, 3); (3, –8).
Сколько было запусков, при которых программа напечатала «NO»?
var s, t: integer;
begin
readln(s);
readln(t);
Ответ: 3
if (s < 4) or (t < 4)
then writeln('YES')
else writeln('NO')
end.

14.

Задача 8.
Задача 9.
Было проведено 9 запусков программы, при которых в качестве значений
переменных s и k вводились следующие пары чисел:
(1, 1); (8, 4); (14, 10); (20, 1); (7, 3); (10, 5); (10, 2); (4, 1); (1, 0).
Сколько было запусков, при которых программа напечатала «НЕТ»?
var s, k: integer;
begin
readln(s);
readln(k);
Ответ: 5
if s div 2 = k
then writeln ('ДА')
else writeln ('НЕТ')
end.
Было проведено 9 запусков программы, при которых в качестве значений
переменных s и t вводились следующие пары чисел:
(9, 5); (11, 2); (4, 5); (7, –2); (4, 4); (7, 7); (1, –1); (3, 9); (2, 2).
Сколько было запусков, при которых программа напечатала «YES»?
var s, t: integer;
begin
readln(s);
readln(t);
Ответ: 6
if (s < 7) or (t > 5)
then writeln('YES')
else writeln('NO')
end.

15.

Программирование на языке
Паскаль
Задание №15

16.

На что обратить внимание:
• Числа не надо хранить в программе, к тому же мы не знаем, сколько чисел
будет введено, поэтому отказываемся от массивов (в классическом Паскале
нет динамических массивов - в описании необходимо указать число
элементов массива).
• Вводим количество чисел в последовательность и организуем цикл
(возможны for и while). Если количество чисел не задано, а есть признак
окончания ввода, используем repeat (сначала вводим число, затем его
анализируем).
• Необходимо знать операции mod – остаток от деления
(if a mod 10 = 8) и div – деление нацело (x := x div 10).
• Знать, как считается количество (b:= b +1) и сумма (s:= s +a).
• Уметь использовать сложные условия
(if (a mod 10 =2) and (a mod 6 =0))
или вложенные условные операторы.
• Уметь сравнивать и находить в последовательности наибольшее или
наименьшее число.
• Избегаем подсказок и пояснений в операторах вывода.

17.

Напишите программу, которая в последовательности натуральных чисел
определяет минимальное число, оканчивающееся на 4. Программа
получает на вход количество чисел в последовательности, а затем сами
числа. В последовательности всегда имеется число, оканчивающееся на 4.
Количество чисел не превышает 1000. Введённые числа не превышают 30
000. Программа должна вывести одно число – минимальное число,
оканчивающееся на 4.
Пример работы программы:
Входные
данные
3
24
14
34
Выходные
данные
14

18.

Вводим с клавиатуры количество
чисел последовательности (read
(n)), заносим в переменную min
самое максимальное возможное
значение + 1. Затем n раз
повторяем одни и те же действия
(цикл): вводим число, проверяем,
оканчивается ли это число на 4 (a
mod 10 = 4) и, одновременно,
меньше ли введённое число
переменной min. Если да, меняем
значение min. Выводим результат.
Обязательно тестируем программу.
program pr2;
var n,i,a,min: integer;
Begin
readln(n);
min := 30001;
for i := 1 to n do begin
readln(a);
if (a mod 10 = 4) and (a < min)
then
min := a;
end;
writeln (min)
end.
Минимальное число,
оканчивающееся на 4.

19.

Напишите программу, которая в последовательности натуральных чисел
находит среднее арифметическое трёхзначных чисел или сообщает, что
таких чисел нет (выводит NO). Программа получает на вход натуральные
числа, количество введённых чисел неизвестно, последовательность чисел
заканчивается числом 0 (0
признак окончания ввода, не входит
в последовательность).
Пример работы программы:
Количество чисел не превышает 100.
Введённые числа не превышают 300.
Программа должна вывести среднее
арифметическое трёхзначных чисел или
вывести «NO», если таких чисел нет.
Входные
данные
10
120
125
0
11
1
0
Выходные
данные
122.5
NO

20.

До тех пор, пока не будет введён 0,
повторяем в цикле (repeat, так как
сначала вводим, потом проверяем):
если это трёхзначное число ((a>99) and
(a<1000)) , увеличиваем счетчик таких
чисел на 1 и сумму на это число
(k:=k+1; b:=b+a;)
Если такие числа есть (k<>0), находим
среднее арифметическое и выводим
результат, в противном случае выводим
'NO' Обязательно тестируем
программу.
Среднее арифметическое
трёхзначных чисел или «NO»
program pr5;
var a, b, k: integer;
m: real;
begin
b:=0;
repeat
read (a);
If (a>99) and (a<1000) then
begin
b:=b+a;
k:=k+1; end
until a=0;
if k<>0 then begin
m:=b/k;
writeln (m); end
else writeln ('NO')
end.

21.

Для самостоятельной работы:
Напишите программу, которая в последовательности натуральных чисел
определяет количество чисел, кратных 3 и оканчивающихся на 4.
Программа получает на вход количество чисел в последовательности, а
затем сами числа.
Количество чисел не превышает 1000. Введённые числа по модулю не
превышают 30 000.
Программа должна вывести одно число: количество чисел, кратных 3 и
оканчивающихся на 4.
Пример работы программы:
Входные
данные
Выходные
данные
3
24
25
54
2

22.

Для самостоятельной работы:
Напишите программу, которая в последовательности натуральных чисел
определяет минимальное число, оканчивающееся на 2. Программа получает
на вход количество чисел в последовательности, а затем сами числа.
В последовательности всегда имеется число, оканчивающееся на 2.
Количество чисел не превышает 1000. Введённые числа по модулю не
превышают 30 000.
Программа должна вывести одно число: минимальное число,
оканчивающееся на 2.
Пример работы программы:
Входные
данные
Выходные
данные
3
22
12
36
12

23.

Для самостоятельной работы:
Напишите программу, которая в последовательности натуральных чисел
определяет сумму чисел, оканчивающихся на 5. Программа получает на
вход количество чисел в последовательности, а затем сами числа.
В последовательности всегда имеется число, оканчивающееся на 5.
Количество чисел не превышает 100. Введённые числа по модулю не
превышают 300.
Программа должна вывести одно число: сумму чисел, оканчивающихся на
5.
Пример работы программы:
Входные
данные
Выходные
данные
3
15
25
24
40

24.

Источники:
• Открытый банк заданий по информатике ФИПИ
http://opengia.ru/subjects/informatics-9/topics/1
• Демоверсии ОГЭ и ГИА по информатике прошлых
лет
http://www.fipi.ru/oge-i-gve-9/demoversii-specifikaciikodifikatory
• Картинки: http://anatoliynikulininfo.ru, http://clipartlibrary.com
• https://oge.sdamgia.ru/
English     Русский Rules