Решение задач программирования для подготовки к егэ по информатике на языке python

Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!

В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.

Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.

Всех желающих — приглашаю ниже!

Быстрый перевод из системы в систему

В Python есть интересные функции bin(), oct() и hex(). Работают данные функции очень просто:

bin(156) #Выводит '0b10011100'
oct(156) #Выводит '0o234'
hex(156) #Выводит '0x9c'

Вывод в интерпретационном режиме

Вывод в интерпретационном режиме

Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные…

Давайте посмотрим и на них:

n = int(input()) #Вводим целое число
 
b = '' #Формируем пустую строку
 
while n > 0: #Пока число не ноль
    b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева
    n = n // 2 #Целочисленное деление
 
print(b) #Вывод

Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:

n = int(input()) #Вводим целое число

b = '' #Формируем пустую строку

while n > 0: #Пока число не ноль
	if (n % 21) > 9: #Если остаток от деления больше 9...
		if n % 21 == 10: #... и равен 10...
			b = 'A' + b #... запишем слева A
		elif n % 21 == 11:#... и равен 11...
			b = 'B' + b#... запишем слева B

'''

И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20)

'''

		elif n % 21 == 11:
			b = 'B' + b
		elif n % 21 == 12:
			b = 'C' + b
		elif n % 21 == 13:
			b = 'D' + b
		elif n % 21 == 14:
			b = 'E' + b
		elif n % 21 == 15:
			b = 'F' + b
		elif n % 21 == 16:
			b = 'G' + b
		elif n % 21 == 17:
			b = 'H' + b
		elif n % 21 == 18:
			b = 'I' + b
		elif n % 21 == 19:
			b = 'J' + b
		elif n % 21 == 20:
			b = 'K' + b
	else: #Иначе (остаток меньше 10)
		b = str(n % 21) + b #Остатот от деления записываем слева
	n = n // 21 #Целочисленное деление

print(b) #Вывод

Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:

def convert_base(num, to_base=10, from_base=10):
    # Перевод в десятичную систему
    if isinstance(num, str): # Если число - строка, то ...
        n = int(num, from_base) # ... переводим его в нужную систему счисления
    else: # Если же ввели число, то ...
        n = int(num) # ... просто воспринять его как число
    # Перевод десятичной в 'to_base' систему
    alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит
    if n < to_base: # Если число меньше системы счисления в которую переводить...
        return alphabet[n] # ... вернуть значения номера в алфавите (остаток от деления)
    else: # Иначе...
        return convert_base(n // to_base, to_base) + alphabet[n % to_base] # ... рекурсивно обратиться к функии нахождения остатка

Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).

Задача 2

Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.

Решение данной задачи совсем простое: банальный перебор.

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				print(x, y, z, F) #Выводим результат

Результат:

Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				if not F:
					print(x, y, z, F) #Выводим результат

Результат:

Далее — простой анализ.

Задача 5

Данная задача легко решается простой последовательностью действий в интерпретационном режиме:

Задача 6

Перепечатали и получили ответ:

s = 0
k = 1
while s < 66:
    k += 3
    s += k
print(k)

Задача 12

В очередной раз, просто заменим слова на код:

a = '9' * 1000

while '999' in a or '888' in a:
	if '888' in a:
		a = a.replace('888', '9', 1)
	else:
		a = a.replace('999', '8', 1)
print(a)

Задача 14

Компьютер железный, он всё посчитает:

a = 4 ** 2020 + 2 ** 2017 - 15
k = 0

while a > 0:
    if a % 2 == 1:
    	k += 1
    a = a // 2

print(k)

Задача 16

Опять же, просто дублируем программу в python:

def F(n):
    if n > 0:
        F(n // 4)
        print(n)
        F (n - 1)
print(F(5))

Результат:

Задача 17

Задача с файлом. Самое сложное — достать данные из файла. Но где наша не пропадала?!

with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения
    text = f.read() #В переменную text запихнули строку целиком
a = text.split("n") #Разбили строку энтерами (n - знак перехода на новую строку)

k = 0 #Стандартно обнуляем количество
m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому...

for i in range(len(a)): #Обходим все элементы массива
	if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие
		k += 1 #Счётчик
		if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума
			m = int(a[i - 1]) + int(a[i])

print(k, m) #Вывод

Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном — задача стандартна.

Задача 19, 20 и 21

Все три задачи — задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:

Пишем рекурсивную функцию и цикл перебора S:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 3: #Условия завершения игры
		return p == 3
	return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
		   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий

for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)
		break

Немного пояснений. В рекурсивной функции существует 3 переменные x — число камней в первой куче, y — число камней во второй куче, p — позиция. Позиция рассчитывается по таблице:

Игра

Петя

Ваня

Петя

Ваня

Петя

p

1

2

3

4

5

6

Далее — всё по условию задачи.

Вторая задача на теорию игр:

Все отличия в рамке. Ну и код, соответственно, не сильно отличается:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 4: #Условия завершения игры
		return p == 4
	if p % 2 != 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Отличия:

  1. Выиграл Петя, соответственно, позиция 4

  2. Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))

  3. Убрали break, так как нам нужны все S, а не единственный

Последняя вариация задачи:

Сразу код:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 5: #Условия завершения игры
		return p == 3 or p == 5
	if p % 2 == 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Ну и всего лишь 2 отличия:

  1. Позиции 3 или 5, а не 4, так как выиграл Ваня

  2. На второй ход выигрывает Ваня и нам нужно or и and поменять. Я заменил только кратность 2.

Задача 22

Ctrl+C, Ctrl+V — наше всё! :)

for i in range(1, 100000):
	x = i
	L = 0
	M = 0
	while x > 0 :
		L = L+1
		if (x % 2) != 0:
			M = M + x % 8
		x = x // 8
	if L == 3 and M == 6:
		print(i)

Задача 23

Итак, код:

def f(x, y):
	if x > y: #Перегнали цель
		return 0
	if x == y:  #Догнали цель
		return 1
	if x < y: #Догоняем цель тремя методами
		return f(x + 1, y) + f(x + 2, y) + f(x * 2, y)

print(f(3, 10) * f(10, 12)) #Прошло через 10, значит догнали 10 и от де догоняем 12

Так как в условии задачи мы увеличиваем число, но будем числа «догонять». Три метода описаны, ну а пройти через 10 — значит дойти до него и идти от него.

Собственно, это и есть вся первая часть ЕГЭ по информатике решённая на Python.

Ссылка на репозиторий со всеми программами:

Надеюсь, что смог помочь в своей статье выпускникам и готовящимся ;)

Остался один вопрос — нужен ли разбор второй части ЕГЭ по информатике на Python? Оставлю этот вопрос на ваше голосование.

Всем удачи!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Делаю разбор второй части?

Проголосовали 106 пользователей.

Воздержались 15 пользователей.

РЕШЕНИЕ
ЗАДАЧ компьютерного ЕГЭ НА ЯЗЫКЕ
PYTHON

В
школьном курсе информатики после введения компьютерного ЕГЭ возникла
необходимость «перестроиться» с языка программирования
Pascal на Phyton, который  обладает простым и понятным
синтаксисом и позволяет обрабатывать большие числа, что является необходимым
для решения заданий из блока «Программирование». Для обучающихся была создана
следующая  «памятка»  с описанием синтаксиса операторов
Python  и примерами решений некоторых задач КЕГЭ.

Для
ввода информации пользователем используется функция input() – эта функция
считывает строку из консоли, введенную пользователем. Для вывода результата –
print.

Ниже представлена
таблица с примерами использования:

Функция

Описание

n =
input()

Считывание
данных в переменную n.

Тип по
умолчанию строка.

a =
int(input())

Считывание
целого числа в переменную a.

a =
float(input())

Считывание
вещественного числа в переменную a.

Математические
операции

Операция

Символ

Пример

Возведение
в степень

**

print(6
** 2) # 36

Целая
часть от деления

//

print(7
/ 2) # 3

Остаток
от деления

%

print(8
% 3) # 2

Условный
оператор

image_description

Условий внутри одного оператора может быть несколько, в таком
случае они проверяются последовательно и выполняются команды для того условия,
которое первым окажется истинным:

image_description

Для проверки  условий в
Python используются операторы сравнения:

Символ

Смысл

Пример

==

равно

a == b

!=

не равно

a != b

and

конъюнкция

a > 5
and b < 5

or

дизъюнкция

a > 5
or b < 5

not

логическое
отрицание

 not(b
< 5)

Циклы ПОКА и ДЛЯ

Командное
слово для цикла – while (после условия – двоеточие), а команды цикла
записываются на отступе от строки, инициализирующей цикл.

С
помощью range() можно задавать диапазон значений, которая будет принимать любая
численная переменная с некоторым шагом.

У
функции range всего может быть три аргумента:

·        
Начало (включается в диапазон, по умолчанию равен 0);

·        
Конец (не включается в диапазон);

·        
Шаг (по умолчанию равен 1).

Пример:

Значения range

Сгенерированная последовательность

range(5)

0,
1, 2, 3, 4

range(3,
8)

3,
4, 5, 6, 7

range(2,
10, 2)

2,
4, 6, 8

range(10,
0, -1)

10,
9, 8, 7, 6, 5, 4, 3, 2, 1

Задание
№6 (КЕГЭ)

В задании №6 в блоке «Программирование» проверяется умение
работать с прогрессиями, 

Пример
1
 

Определите, при
каком наибольшем введенном значении переменной s программа
выведет число 1250.

s = int(input())

s = s // 10

n = 1

while n < 400:

    s
= s + n
 

    n
= n * 2

print(s)

Перебираем в цикле for
с большим интервалом переменную
s:

for i in range(100000):

    s = i

    s = s // 10

    n = 1

    while n < 400:

        s = s + n

        n = n * 2

    if s = = 1250:

        print(i)

Вывод
на
экран:

7390

7391

7392

7393

7394

7395

7396

7397

7398

7399

Ответ: 7399

Пример
2

Определите, при каком наименьшем введенном
значении переменной s программа выведет число 310.

s = int(input())

s = s // 10

n = 0

while n <= 56:

    s
= s + n

    n
= n + 7

print(s)

Используем тот же метод решения:

for i in range(100000):

    s = i

    s = s // 10

    n = 0

    while n <= 56:

        s = s + n

        n = n + 7

    if s = = 310:

        print(i)

Вывод
на
экран:

580

581

582

583

584

585

586

587

588

589

Ответ: 580

Пример решения задания №6 из
тренировочной работы системы Статград за 17.12.2021 г.

for i in range(1000000):

    s = i

    s = s // 10

    n = 1

    while s < 221:

        if n % 2 == 0:

            s = s + 13

        n = n + 5

    if n == 121:

        print(i)

Вывод на
экран:

735

736

…..

 779

Ответ: 779

Задание
14 (КЕГЭ)

Данное задание  связано
с переводом из одной позиционной системы счисления в другую и умением работать
с такими системами счисления.

 Метод

Описание

Пример

Получение последней цифры числа

Пусть n – это число, a –
основание системы счисления.

Тогда остаток от деления n на a –
это последняя цифра числа в искомой системе счисления

image_description

Получение числа без последней цифры

Пусть n – это число, a –
основание системы счисления.

Тогда результат деления нацело n на a –
это число без последней цифры в искомой системе счисления, представленное в
10-чной системе счисления.

Например,

8 = 10002

8 // 2 = 4

4 = 1002

Было число, равное 10002 – стало число, равное
1002.

image_description

Разложение числа на разряды в любой системе счисления

Пусть n – это число, a –
основание системы счисления.

Используем программу перебора

image_description

image_description

Пример 1

Сколько единиц
содержится в двоичной записи значения выражения 416 + 236 – 16?

x = 4**16 + 2**36 — 16

k = 0

while x > 0:

    if x % 2 = = 1:

        k += 1

    x = x // 2

print(k)

Ответ:
29

Пример
2

Значение
арифметического выражения: 918 + 354 – 9 – записали в
системе счисления с основанием 3. Сколько цифр «2» содержится в этой записи?

x = 9**18 + 3**54
— 9

k = 0

while x > 0:

    if
x % 3 = = 2:

        k += 1

    x = x // 3

print(k)

Ответ:
34

Пример
3

Значение арифметического выражения: 5 ×
2161156 – 4 × 361147 + 61153 – 875 — записали
в системе счисления с основанием 6. Определите разность между количеством цифр
5 и количеством нулей в записи этого числа.

x = 5 * 216**1156 — 4 *
36**1147 + 6**1153 — 875  

k5 = 0

k0 = 0

while x > 0:

    if x % 6 == 5:

        k5 += 1

    if x % 6 == 0:

        k0 += 1

    x = x // 6

print(k5-k0)

Ответ:
1182

Пример решения задания №14 из
тренировочной работы системы Статград за 17.12.2021 г.

x =3*125**6 + 2*25**9 + 5**12 — 625

k = 0

while x>0:

    d = x % 5

    if d = = 0:

        k +=1

    x = x//5

print(k)

Ответ:
11

Задание
16 (КЕГЭ)

Задание
на рекурсивный алгоритм. Здесь используются функции — именованные наборы
команд, которые записываются один раз и могут быть вызваны из любого места в
программе.

Пример 1

Алгоритм
вычисления значения функции F(n), где n — натуральное число,
задан следующими соотношениями.

F(n) = n + 2 при n ≤ 3;

F(n) = F(n – 2) + F(n – 1) при
n > 3.

Чему
равно значение функции F(30)?

def  F(n):

    if n
<= 3:

       
return n + 2

    else:

       
return F(n — 2) + F(n — 1)

print(F(30))

Ответ: 2374727

Пример 2. Вложенное
ветвление

Алгоритм
вычисления значения функции F(n), где nнатуральное число,
задан следующими соотношениями.

F(n)
= 3
n + 6 при n ≤ 2;

F(n)
= F(n – 2) + 2
F(n
– 1) при n > 2 и n — четное число;

F(n)
= 10 + F(n – 4) при n > 2 и n — нечетное число.

Чему равно
значение функции F(18)?

def F(n):

    if n
<= 2:

       
return 3*n + 6

    else:

        if
n % 2 == 0:

           
return F(n — 2) + 2*F(n — 1)

       
else:

           
return 10 + F(n — 4)

print(F(18))

Ответ:
508

Пример 3. Перекрестные
функции

Алгоритмы
вычисления значения функций
F(n)
и
G(n),
где
n
— натуральное число, заданы следующими соотношениями.

F(n)
=
n
+ 9 при
n < 3;

F(n)
= 2
F(n
– 1) + 3
G(n
– 2) при
n ≥ 3.

G(n)
= 25 –
n при n
< 4;

G(n)
= 4
G(n
– 1) –
F(n
– 2) при
n ≥ 4.

Чему равно
значение функции
G(13)?

def F(n):

    if n
< 3:

       
return n + 9

    else:

       
return 2*F(n — 1) + 3*G(n — 2)

def G(n):

    if n
< 4:

       
return 25 — n

    else:

       
return 4*G(n — 1) — F(n — 2)

print(G(13))

Ответ:
3781546

Пример 4. Перекрестные функции. Сумма значений

Алгоритмы
вычисления значения функций
F(n) и G(n), где n — натуральное число, заданы следующими соотношениями.

F(n) = n + 3 при n < 4;

F(n) = F(n – 4) + 3 G(n – 2) + G(n – 1) при n ≥ 4.

G(n) = 3 n при n < 5;

G(n) = F(n – 1) + G(n – 3) – F(n – 2) при n ≥ 5.

Чему
равна сумма значений функций
G(20) и F(18)?

def F(n):

    if n
< 4:

       
return n + 3

    else:

       
return F(n — 4) + 3*G(n — 2) + G(n — 1)

def G(n):

    if n
< 5:

       
return 3*n

    else:

       
return F(n — 1) + G(n — 3) — F(n — 2)

print(F(18)
+ G(20))

Ответ:
4075

Пример решения задания №16 из
тренировочной работы системы Статград за 17.12.2021 г.

def F(n):

    if n ==
0:

       
return 0

    if n %
3 == 2:

       
return F(n — 1) + 1

    if n %
3 < 2:

       
return F((n — n % 3) // 3)

for i in
range(10000):

    if F(i)
= = 6:

       
print
(i)

       
break

Ответ:
728

 Задание
2 (КЕГЭ)

Пример решения задания №2 из
тренировочной работы системы Статград за 17.12.2021 г.

Переборный алгоритм позволяет получить
таблицу для ложных значений функции
F,
которую необходимо соотнести с таблицей в задании.

print(‘x y w z’)

for x in range(2):

    for y in range(2):

        for w in
range(2):

            for z in
range(2):

                if
(((x<=y) and (z or w)) <= ((x == w) or (y and not(z)))) = = 0:

                    print(x,y,w,z)

Вывод на экран:

x y w z

0
0 1 0

0
0 1 1

0
1 1 1

1
1 0 1

Ответ: yxwz

Продолжаем наш видеокурс по подготовке к ЕГЭ по информатике 2022. Сегодня разоблачим второе задание!

Кто незнаком с основными логическими операциями, можете посмотреть прошлогоднюю статью по заданию 2 из ЕГЭ по информатике.

В этой статье будут раскрыты методики решения 2 задания через язык программирования Питон.

Будем перебирать для каждой логической переменной все возможные варианты в программе. А логическая переменная всего два значения может принимать: 1 или 0 (истину или ложь). Таким образом, если к примеру у нас 4 переменные, мы получим 24=16 различных комбинаций.

Кто знаком с мощнейшим методом для 2 задания из ЕГЭ по информатике, о котором я рассказывал в прошлогодней статье, тот поймёт, что мы будем применять тот же самый мощнейший метод, но автоматизированный с помощью питона.

Нам нужно будет запрограммировать логическую функцию на языке Питон. Вот таблица, которая поможет это сделать.

Логическая операция Представление в Питоне
Отрицание ¬ not()
Логическое умножение ∧ and
Логическое сложение ∨ or
Следование A ⟶ B not(A) or B
Равносильность ≡ ==

Перейдём к практике решения задач задания 2 с помощью языка программирования Python.

Задача (Классическая)

Миша заполнял таблицу истинности логической функции F

(w → z) ∧ ((y → x) ≡ (z → y)),

но успел заполнить лишь фрагмент из трёх различных её строк, даже
не указав, какому столбцу таблицы соответствует каждая из переменных
w, x, y, z.

ЕГЭ по информатике 2022 - задание 2 (классическая задача)

Определите, какому столбцу таблицы соответствует каждая из переменных
w, x, y, z.

В ответе напишите буквы w, x, y, z в том порядке, в котором идут
соответствующие им столбцы (сначала буква, соответствующая первому
столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы
в ответе пишите подряд, никаких разделителей между буквами ставить
не нужно.

Пример. Функция F задана выражением ¬x / y, зависящим от двух
переменных, а фрагмент таблицы имеет следующий вид.

ЕГЭ по информатике 2022 - задание 2 (пример)

В этом случае первому столбцу соответствует переменная y, а второму
столбцу – переменная x. В ответе следует написать: yx.

Решение:

Решать задачу будем с помощью шаблона на языке Python (Питон).

print('x y z w')
for x in range(0, 2):
    for y in range(0, 2):
        for w in range(0, 2):
            for z in range(0, 2):
                if (not(w) or z) and ((not(y) or x) == (not(z) or y)):
                    print(x, y, z, w)

В задаче у нас 4 переменные, значит, формируем 4 вложенных цикла. В каждом цикле перебираем все возможные значения для конкретной переменной. Мы перебираем значения 0 и 1.

Функция должна выдавать всегда 1 (единицу, истину). Внутри всех циклов прописываем условие, которое срабатывает как раз на истину. В этом условии прописываем нашу функцию. Если наша функция будет выдавать истину, то мы распечатаем значения переменных, при которых это произошло. Если функция будет выдавать ложь, значит, ничего распечатано не будет.

Четыре вложенных цикла проверяют все возможные варианты (24 = 16 вариантов), и мы получим таблицу истинности, почти такую же, как нам и дали в условии задачи.

Так же вверху печатаем названия переменных, чтобы знать, какие значения каким переменным принадлежат.

Запустим программу, и на экране распечатается табличка:

ЕГЭ по информатике 2022 - задание 2 (таблица истинности)

В получившийся табличке может быть больше строчек, чем в условии. Так же при поиске переменных нельзя опираться на порядок, в котором идут нули и единицы в нашей табличке. А можно опираться лишь на количество нулей и единиц в строчках или столбцах.

Можно вычеркнуть первую строчку и последнюю, потому что в таблице, которую дали в условии, в каждой строчке есть хотя бы один ноль и хотя бы одна единица.

ЕГЭ по информатике 2022 - задание 2 (классическая задача решение)

Сразу видно, что первый столбец принадлежит переменной x, только там могут быть все единицы.

Второй столбец принадлежит переменной w, только там могут быть все нули.

У нас остались две пустые клеточки в самой таблице. Нам нужно где-то поставить единицу, а где-то ноль, потому что у нас остались столбцы с двумя единицами и одним нулём, а так же с двумя нулями и одной единицей. Если мы в третий столбец поставим единицу, а в четвёртый ноль, то первая строчка и вторая будут совпадать.

А в условии сказано, что строки не должны повторяться. Поэтому нужно ноль и единицу расставить наоборот.

Получается, что в третий столбец идёт z, а в четвёртый y

Ответ: xwzy

Посмотрим, как решать задачи второго задания из ЕГЭ по информатике, когда функция выдаёт нули в таблице истинности.

Задача (Классическая, закрепление)

Миша заполнял таблицу истинности функции (x ≡ ¬y) → ((x ∧ w) ≡ z), но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.

ЕГЭ по информатике 2022 - задание 2 (классическая задача 2)

Определите, какому столбцу таблицы соответствует каждая из переменных
w, x, y, z.

В ответе напишите буквы w, x, y, z в том порядке, в котором идут
соответствующие им столбцы (сначала буква, соответствующая первому
столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы
в ответе пишите подряд, никаких разделителей между буквами ставить
не нужно.

Пример. Функция F задана выражением ¬x / y, зависящим от двух
переменных, а фрагмент таблицы имеет следующий вид.

ЕГЭ по информатике 2022 - задание 2 (пример)

В этом случае первому столбцу соответствует переменная y, а второму
столбцу – переменная x. В ответе следует написать: yx.

Решение:

Воспользуемся программой на языке Python.

print('x y z w')
for x in range(0, 2):
    for y in range(0, 2):
        for w in range(0, 2):
            for z in range(0, 2):
                if not( not(( x == (not(y)) )) or ((x and w) == z) ):
                    print(x, y, z, w)

От прошлой программы эта программа отличается только функцией!

В таблице видим, что функция должна выдавать ноль. Поэтому в условии мы функцию «оборачиваем» в not().

После == операцию not() мы заключили в скобки, чтобы не было синтаксической ошибки.

Получаем следующую таблицу истинности:

ЕГЭ по информатике 2022 - задание 2 (таблица истинности 2)

Разгадаем, где какая переменная находится.

ЕГЭ по информатике 2022 - задание 2 (классическая задача решение)

Последнюю строку из нашей таблицы можно вычеркнуть, потому что, если мы вычеркнем другую строку, то не получится столбца, где все три единицы, а он должен быть.

Получается, что второй столбец достаётся переменной z.

В первом столбце должно быть две единицы. На эту роль подходит переменная y.

В нашей таблице нет строчки, где все единицы, значит, во второй строчке в пустом окошке выставляем ноль. И в этой строчке нулём обладает переменная x. Следовательно, в третьем столбце будет находится x.

А в последний столбец идёт переменная w по остаточному принципу.

Ответ: yzxw

А как Питон справится с более сложной функцией из примерного варианта ЕГЭ по информатике?

Задача (Сложная функция)
Логическая функция F задаётся выражением ((x → y ) ∧ (y → w)) ∨ (z ≡ ( x ∨ y)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.

ЕГЭ по информатике - задание 2 мощнейший метод

В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:

ЕГЭ по информатике - задание 2 (лёгкая задача) пример

Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.

Источник задачи сайт решу ЕГЭ: https://inf-ege.sdamgia.ru/

Решение:

Запрограммируем функцию на языке Python.

print('x y z w')
for x in range(0, 2):
    for y in range(0, 2):
        for w in range(0, 2):
            for z in range(0, 2):
                if not( ((not(x) or y) and (not(y) or w)) or (z == (x or y)) ):
                    print(x, y, z, w)

Запустим программу и расставим переменные по своим местам.

ЕГЭ по информатике 2022 - задание 2 (сложная функция, решение)

Переменная z может быть только в третьем столбце.

Во второй столбец идёт переменная w, только этот столбец может иметь одну единицу.

Посмотрим на строчку, где у w стоит единица. В этой же строчке и у x единица. Значит, x идёт в последний столбец, а y в первый столбец.

Ответ: ywzx

Тот же шаблон работает, когда у нас во втором задании три переменные.

Задача (Три переменные)

(№ 1608) Логическая функция F задаётся выражением (¬x ∧ z) ∨ (¬x ∧ ¬y ∧ ¬z)

ЕГЭ по информатике 2022 - задание 2 (три переменных)

На рисунке приведён фрагмент таблицы истинности функции F, содержащий все наборы аргументов, при которых функция F истинна. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z.

Источник задачи сайт К. Ю. Полякова: https://kpolyakov.spb.ru/

Решение:

Для трёх переменных шаблон на Питоне отлично работает.

print('x y z')
for x in range(0, 2):
    for y in range(0, 2):
        for z in range(0, 2):
               if (not(x) and z) or (not(x) and not(y) and not(z)):
                    print(x, y, z)

Здесь и так понятно, куда какая переменная идёт.

ЕГЭ по информатике 2022 - задание 2 (с тремя переменными, решение)

Ответ: yxz

Посмотрим, как решать задачи из второго задания ЕГЭ по информатике, когда в таблице истинности разные значения у функции F.

Задача (Разные значения функции)

Логическая функция F задаётся выражением (¬a ∨ b ∨ ¬c) ∧ (b ∨ ¬c). Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных a, b, c.

ЕГЭ по информатике 2022 - задание 2 (разные значения функции)

В ответе напишите буквы a, b, c в том порядке, в котором идут соответствующие им столбцы (без разделителей).

Источник задачи сайт К. Ю. Полякова: https://kpolyakov.spb.ru/

Решение:

Когда такая ситуация, что функция имеет различные значения в таблице, мы можем проверить, какие значения переменных дают единицу у всей функции. А потом проверить, какие значения выдают ноль у всей функции, если это потребуется.

print('a b c')
for a in range(0, 2):
    for b in range(0, 2):
        for c in range(0, 2):
               if (not(a) or b or not(c)) and (b or not(c)):
                    print(a, b, c)

ЕГЭ по информатике 2022 - задание 2 (разные значения функции, решение)

В таблице 6 строчек, в которых главная функция превращается в единицу. Далее эти строчки и будем рассматривать. У нас тоже получилось 6 строчек.

Переменная a имеет три единицы. Это второй столбец, потому что там три единицы.

Переменная b имеет четыре единицы, значит, она расположена в первом столбце.

Переменной c достаётся последний столбец.

Ответ: bac

Ещё одна интересная задача для подготовки к ЕГЭ по информатике 2022.

Задача(С подвохом)

Логическая функция F задаётся выражением a ≡ b ∨ b → c.

ЕГЭ по информатике 2022 - задание 2 (задача с подвохом)

На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных a, b, c.

Источник задачи группа Евгения Джобса: https://vk.com/inform_web

Решение:

Подвох заключается в том, что если мы переведём бездумно функцию на язык Питон, то получится a==b or not(b) or c. Но у нас существуют приоритеты для логических операций, которые описаны в прошлогодней статье по подготовке к ЕГЭ по информатике.

В начале должно обрабатываться или, которое было изначально. Затем должно обработаться следование, а потом равносильность. А если мы переведём формулу бездумно, порядок будет не правильный.

Операцию b ∨ b можно представить, как просто b. Ведь, если b принимает значение 0, тогда будет 0 ∨ 0 = 0. Если значение будет 1, то 1 ∨ 1 = 1. Поэтому формулу можно переписать следующим образом:

a ≡ b → c

a == (not(b) or c)

В предыдущих задачах нам не приходилось думать над приоритетами, потому что везде были расставлены скобки. И в основном они уже расставлены в задачах второго задания из ЕГЭ по информатике.

Дальше решаем как обычно.

print('a b c')
for a in range(0, 2):
    for b in range(0, 2):
        for c in range(0, 2):
               if a == (not(b) or c):
                    print(a, b, c)

Последнюю строчку можно вычеркнуть из нашей таблицы, т.к. у нас в каждой строчке есть хотя бы один ноль.

ЕГЭ по информатике 2022 - задание 2 (задача с подвохом, решение)

Последний столбец занимает переменная a, т.к. только в последний столбец может влезть две единицы.

В строчке, где у a ноль, так же ноль и у переменной c. Значит, во второй столбец идёт переменная c. Если мы ноль поставим в первой строчке в первом столбце, то получится первый столбец из всех нулей. А такого у нас в таблице истинности нет.

Тогда переменная b в первом столбце.

Ответ: bca

слишком много лишних скобок ни к чему. Код очень грязный

А есть какой-нибудь простой код, который смог бы помочь с таким заданием: «Сколькими способами можно поставить в соответствие переменные w, x, y, z столбцам таблицы истинности функции F, опираясь на информацию из данного фрагмента?», или же в данном случае нужно самому подбирать комбинации?

Доброго времени суток, есть вопрос про операции в последней задаче. Вот там написано что b ∨ b можно представить как b. А если будет b ∧ b, то это можно будет представить как b? И можете объяснить почему?

Как в циклах идут переменные, это не важно. Это просто перебор всех возможных вариантов.

Володя, b ∧ b = b, эти формулы приведены в материале, на который я даю ссылку в начале статьи.


Пройти тестирование по 10 заданиям
Пройти тестирование по всем заданиям
Вернуться к каталогу заданий

Версия для печати и копирования в MS Word

1

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от −10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Например, для последовательности из пяти элементов: 6; 2; 9; –3; 6  — ответ: 4 11.

17.txt

Ответ:

Источник: Демонстрационная версия ЕГЭ−2022 по информатике


2

В файле содержится последовательность из 10 000 натуральных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых различные остатки от деления на d  =  160 и хотя бы одно из чисел делится на p  =  7, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

Пример входных данных:

168

7

320

328

Пример выходных данных для приведённого выше примера входных данных:

4 488

Пояснение: Из 4 чисел можно составить 6 пар. В данном случае условиям удовлетворяют пары: 168 и 320, 168 и 7, 320 и 7, 328 и 7. Максимальную сумму дает пара 168 и 320  — 488.

17.txt

Ответ:


3

В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, разность которых четна и хотя бы одно из чисел делится на 31, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

17.txt

Ответ:


4

В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, разность которых четна и хотя бы одно из чисел делится на 19, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

17.txt

Ответ:


5

В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, для которых произведение элементов делится без остатка на 10, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

17.txt

Ответ:

Пройти тестирование по этим заданиям

Урок 1

MOSH:
Python Tutorial — Python Full Course for Beginners here
00:13:03 Variables
00:18:21 Receiving Input

MOSH:
Python Tutorials for Beginners — Learn Python Online here

Learn Python Programming — Python Course here

На уроке рассматривается работа с файлами в Питон: текстовые и бинарные файлы, запись в файл и чтение из файла

Дальше — больше… Python Урок 9. Работа с файлами

На уроке рассматриваются алгоритмы работы с двумерными массивами в Python: создание матрицы, инициализация элементов, вывод, обработка элементов матрицы

Дальше — больше… Python Урок 8. Матрицы (двумерный массив)

На уроке рассматриваются алгоритмы работы с массивами: сортировка на python, поиск в массиве, поиск максимального или минимального элемента и другие алгоритмы

Дальше — больше… Python Урок 7. Массивы в Питоне: продолжение (алгоритмы)

На уроке объясняется синтаксис составления процедуры и функции Питон. Рассматривается вызов функции, параметры функции и процедуры

Дальше — больше… Python Урок 3. Функции и процедуры

На уроке раскрываются подробности работы в python с кортежами и словарями:

Дальше — больше… Python Урок 6. Кортежи и словари

На уроке рассмотрены примеры использования оператора присваивания на языке python, примеры работы с основными арифметическими операторами. Узнаете об одной из функций преобразования типов (int). Изучите работу условного оператора, оператора python print и input.

Дальше — больше… Python Урок 1. Арифметические действия и конструкции

На уроке рассматривается алгоритм работы с различными видами циклов на языке Питон (Python): цикл с предусловием While и цикл со счетчиком For. Объясняется возможность генерации в Python случайных чисел

Дальше — больше… Python Урок 2. Работа с циклами

На уроке объясняется принцип работы со строками на языке Питон. Будут рассмотрены некоторые необходимые функции для работы со строками. Изучается алгоритм того, как создавать срезы

Дальше — больше… Python Урок 5. Немного о строках. Срезы

На уроке объясняется, как в языке python представлены списки (вместо массивов); объясняется про создание списков на Python.

Дальше — больше… Python Урок 4. Списки или массивы в Питоне

Решение задач программирования для подготовки к ЕГЭ по информатике на языке Python, Нигмедзянова А.М., Ефремова Е.А., 2019.

Учебно-методическое пособие составлено в соответствии с программой для учителей информатики в старших классах. Пособие содержит основные сведения о языке программирования Python, поурочную разработку проведения элективного курса по информатике в 10-11 классе, типовые примеры из ЕГЭ с решениями на Python.

Решение задач программирования для подготовки к ЕГЭ по информатике на языке Python, Нигмедзянова А.М., Ефремова Е.А., 2019

Язык программирования Python.
Язык программирования можно инициализировать как набор команд, направленный на понимание компьютером инструкции к выполнению той или иной программы, написанной на соответствующем языке программирования. Если же говорить о таком языке программирования как Python, то нельзя не заметить его тенденцию роста популярности. Он используется не только отдельными пользователями, но и целыми компаниями для создания продуктов, приносящих прибыль. Например, компания Google использует Python в своей поисковой системе; платформа YouTube в значительной степени реализована на этом языке. Python ориентирован на повышение производительности разработчика и облегчение задач при написании и читаемости кода. Этот язык программирования был изобретен в 1991 году голландским программистом Гвидо ван Россумом.

Оглавление.
Введение
1.Язык программирования Python.
1.1.Первые шаги в Python.
1.2.Вывод и ввод информации на экран.
1.3.Переменные величины.
1.4.Условный оператор.
1.5.Циклы.
1.5.1.Цикл for.
1.5.2.Цикл while.
1.6.Функции.
2.Поурочная разработка элективного курса по информатике в 10 — 11 классе.
2.1.Предисловие.
2.2.Примерное поурочное планирование учебного материала элективных курсов в 10-11 классе при 1 уроке в неделю (33 урока в год).
2.3.Методика ведения элективного курса по теме: «Решение задач ЕГЭ по информатике на языке программирования Python».
3.Решение задач ЕГЭ но информатике на языке программирования Python.
3.1.Задание № 8. Анализ программ.
3.2.Задание № 11. Рекурсивные алгоритмы.
3.3.Задание № 19. Обработка массивов и матриц.
3.4 Задание № 20. Анализ программы с циклами и условными операторами.
3.5 Задание № 21. Анализ программ с циклами и подпрограммами.
3.6.Задание № 24. Исправление ошибок в программе.
3.7.Задание № 25. Алгоритмы обработки массивов.
Литература.

Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:

Скачать книгу Решение задач программирования для подготовки к ЕГЭ по информатике на языке Python, Нигмедзянова А.М., Ефремова Е.А., 2019 — fileskachat.com, быстрое и бесплатное скачивание.

Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.Купить эту книгу

Скачать
— pdf — Яндекс.Диск.

Дата публикации: 19.08.2019 11:26 UTC

Теги:

подготовка к ЕГЭ :: ЕГЭ по информатике :: информатика :: задачи :: ответы :: решения :: 11 класс :: Нигмедзянова :: Ефремова


Следующие учебники и книги:

  • ЕГЭ 2019, Иформатика и ИКТ, 11 класс, Методические рекомендации, Кириенко Д.П., Лещинер В.Р., Путимцева Ю.С.
  • Спецификация контрольных измерительных материалов для проведения в 2020 году единого государственного экзамена по информатике и ИКТ
  • Кодификатор элементов содержания и требований к уровню подготовки выпускников образовательных организаций для проведения единого государственного экзамена по информатике и ИКТ, 2020
  • Демонстрационный вариант контрольных измерительных материалов единого государственного экзамена 2020 года по информатике и ИКТ

Предыдущие статьи:

  • Обобщение знаний по теме логические основы ЭВМ, Обучающихся 10-11 классов при подготовке к ЕГЭ по информатике, Пегасова Н.А., Иванова Е.Н., Лесников И.Н., 2018
  • Паскаль для школьников, подготовка к ЕГЭ, Катаев С.М., Шерстнева Л.В., 2014
  • ЕГЭ 2019, Информатика и ИКТ, Тренировочный вариант
  • ЕГЭ 2019, Информатика и ИКТ, Досрочный вариант

Автор: Губаев Максим Станиславович

Место работы/учебы (аффилиация): МАОУ Лицей №39 города Нижний Тагил Свердловской области, 11 класс

Единый государственный экзамен по информатике необходим тем, кто планирует поступать в российские вузы на специальности, связанные с IT-технологиями. Этот экзамен нужен тем, кто хочет стать программистом, разработчиком, специалистом по информационным технологиям. Единый государственный экзамен по информатике будет проходить на компьютерах уже с 2021 года. Новая модель реализована в виде компьютерной системы тестирования, а ее апробация прошла в нашем городе осенью 2019. Смысл новой модели состоит в том, что все задания выпускники будут выполнять при помощи компьютеров и с применением различных языков программирования и программного обеспечения.

В настоящее время все большую популярность приобретает язык Python. Одна из причин популярности Python  – более простое и компактное оформление, чем в других языках. Это самый популярный язык общего назначения: он используется для машинного обучения, аналитике, разработке игр и в науке о данных. В данной работе будет применение языка Python в решении задач компьютерного ЕГЭ по информатике.

Объект работы – процесс решения задач компьютерного ЕГЭ по информатике.

Предмет работы – средства решения задач компьютерного ЕГЭ по информатике.

Цель работы – провести обзор возможностей языка программирования Python в решении задач компьютерного ЕГЭ по информатике.

Задачи:

  • рассмотреть основы языка программирования Python;
  • выделить типы задач компьютерного ЕГЭ по информатике и, по возможности, решить их средствами языка программирования Python;
  • сравнить эффективность программ, написанных на языках Pascal, C и Python.

Понравилась статья? Поделить с друзьями:

Новое и интересное на сайте:

  • Решение задач полякова информатика егэ
  • Решение задач по экзамену 1с специалист по платформе
  • Решение задач по цитологии на применение знаний в новой ситуации высокий уровень егэ
  • Решение задач по химии 11кл к егэ 2020г
  • Решение задач по физике егэ с объяснениями

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: