Есть ли питон на егэ по информатике

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

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

Всем удачи!

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

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

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

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

Теперь ЕГЭ по информатике выпускники сдают в компьютерной форме, а это значит, что и в процессе подготовки их ждет немало изменений.

Как связаны программирование и подготовка к ЕГЭ по информатике

Некоторые задания из ЕГЭ по информатике 2022 (номера 8, 11, 19, 20, 21, 24, 25 и 27) требуют знаний одного из языков программирования и минимальных навыков работы с ним. В первых из перечисленных заданий проверяется умение выпускников понимать и анализировать текст программы, в 25 задаче нужно самостоятельно написать фрагмент программы, в 27 — законченную программу. 

В формулировках заданий перечислены следующие языки программирования: Basic, Pascal, C/C++, Алгоритмический язык, Python, Естественный язык. Выбор языка программирования не влияет на оценку, несмотря на то, что на каком-то из них программа может получиться длиннее, а на другом короче. Эксперты в области подготовки к ЕГЭ по информатике говорят, что за все время их деятельности на экзамене еще ни разу не попалось задание, которое нельзя было бы выполнить, например, с использованием Basic.

Как решать задачи на программирование при подготовке

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

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

Приступая к практической части подготовки, в первую очередь решите демонстрационную версию экзамена (можно даже на специальной онлайн-платформе, где КИМ будет выглядеть ровно так, как компьютерная версия самого ЕГЭ) и посмотрите, какие задания вам даются легко, какие вызывают небольшие трудности, а с какими вы совсем не можете справиться. Такое распределение задач по категориям поможет вам лучше организовать подготовку, расставить приоритеты и повысить эффективность практики.

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

И только после этого начинайте практиковаться. Лучше делать это каждый день, а также привлечь к подготовке человека, который в этом хорошо разбирается — репетитора или куратора онлайн-школы. Он поможет вам прояснить непонятные моменты и научит находить ошибки.

Какой язык программирования выбрать для сдачи ЕГЭ по информатике в 2022 году

В большинстве школ языкам программирования уделяется не так много времени, а где-то о них и не упоминают, поэтому ученикам приходится брать на себя целых две сложных и важных задачи:

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

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

  1. Pascal

Даже если в вашей школе информатика преподавалась “для галочки”, об этом языке вы уж точно слышали. Несмотря на то, что Паскаль является устаревшим языком программирования и не используется разработчиками в крупных компаниях, для ЕГЭ он вполне подойдет. 

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

  1. C++

Этот язык пользуется наибольшей популярностью среди выпускников, несмотря на то, что написание программ на нем — не самое быстрое. Если у вас медленный темп работы, то в целях экономии времени на ЕГЭ по информатике 2022 лучше выбрать другой язык программирования, тем более, что в большинстве заданий проверяются ответы, а не написание программ.

  1. Python

Питон совсем недавно вошел в список разрешенных языков программирования для ЕГЭ по информатике, поэтому для многих (в том числе проверяющих) он покажется непривычным. Однако этот язык почти идеально подходит под формат экзамена: он быстрый, на нем можно решить 18 заданий из 27, он имеет простой синтаксис.

  1. Другие варианты

Вы можете выбрать другой язык программирования, например, C или Basic, которые также рекомендуют многие преподаватели. Однако здесь могут возникнуть две сложности: это усложнит подготовку, так как в большинстве методических материалов по подготовке используются первые три языка из нашего списка, а также может случиться такое, что эксперт, проверяющий работу, не будет знать выбранный вами язык (это, конечно, не ваша проблема, но неприятные ситуации могут возникнуть).

Итог

При выборе языка программирования для ЕГЭ по информатике 2022 мы советуем руководствоваться именно легкостью, распространенностью языка и быстротой использования. Самое важное — чтобы он помог вам решить задания из КИМа, а все остальное уже второстепенно.

Что необходимо знать из Python для ЕГЭ

Как данные в этом языке обрабатываются и какие есть основные конструкции — то, с чего начинается разговор о программировании. 

Основные конструкции = способы создания алгоритма.

Цель на ЕГЭ для выпускников — научиться решать задачи с помощью Python. 

Базовые знания этого языка программирования состоят из

  • циклов;
  • типов данных (хранение информации в вашей программе);
  • условий;
  • функций

Функция в Python — метод, позволяющий какие-то значения передать, преобразовать и что-то, в итоге, получить или не получить.

ЕГЭ-шные нюансы в Python

Если вы в Python разберётесь с особенностями программы, о которых мы рассказываем дальше, то станет гораздо проще решать задания на экзамене.

  • списки, срезы, словари (необходимо посмотреть, как именно обрабатываются данные);
  • обработка строк
  • файлы (чтобы научиться с ними работать, необходимо выучить две команды — считать одну строку и считать все строки.

Самое важное в программирование — ЖЕЛАНИЕ разобраться во всех тонкостях и УМЕНИЕ их применять.

Ресурсы для освоения Python

  • metanit.com;
  • sobolearn.com;
  • Платформа stepik;
  • Платформа coursera;
  • Бесплатный спецкурс, где Коля Касперский объясняет программу с нуля и рассказывает, как решать задания 6,12,16,17,24 и 27 для ЕГЭ. 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter. Мы обязательно поправим!

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

Содержание

  1. Почему выбор пал на информатику?
  2. Организация экзамена на пункте проведения.
  3. Какие были IDE на ЕГЭ по информатике? Были ли Excel и Word или их аналоги?
  4. Можно ли использовать код для заданий, не связанных с языками программирования?
  5. Можно ли пользоваться Экселем и Вордом для других заданий?
  6. Калькулятор был?
  7. Был ли Paint?
  8. Можно ли возвращаться к заданиям и делать их не подряд?
  9. Какие были компьютеры?
  10. Дадут ли дополнительное время, если возникнут проблемы с компьютером/программой?
  11. Что там по одинаковым заданиям 24 и 25 числа?
  12. Можно ли пользоваться компьютером до начала экзамена?
  13. Совпали ли задания по информатике у Центра с Дальним Востоком?

Почему выбор пал на информатику?

Вопрос хороший, ответ тоже: череда случайностей привела неподготовленного человека к изучению данного предмета. Буквально с лета после окончания 10 класса было решено сдавать физику. В октябре меня записали и на курсы по физике и информатике. Причем тут информатика? Для общего развития. В итоге физика не пошла, а вот инфа — еще как. Ушла с курсов по физике, начала изучать C++. Пробников у меня не было, на курсы ходила только одну пару в неделю. В общем, ленилась до последнего. Прошу заметить, что преподаватель у меня был довольно сильный. В основном решали задания с сайта Полякова.

За две недели до экзамена поняла, что пора быстро повторять уже изученное. Ради простоты написания кода начала учить Питон (самое время), в итоге сдала на 83 балла. Информатики в школе как таковой не было и вовсе. Единственное, что она мне давала — понимание того, как строить таблицы в Экселе и менять шрифт Ворде. Ну и html три урока изучали. Так что за чуть больше полугода вполне можно подготовиться.

ЕГЭ по информатике

Организация экзамена на пункте проведения.

Сдающих разделили на две группы: одна сдавала ЕГЭ 24 числа, другая — 25. Так как сейчас (лето 2021) все еще присутствуют некоторые меры предосторожности из-за ковида, нас пропускали в школу по очереди. В кабинете стояло четыре компьютера, рядом — скрепленные листы с правилами работы. Особо ничего особенного в работе не было. Заполнили бланк, начали экзамен одновременно. Сверху был таймер, так что за временем было легко следить. В конце просто расписались и ушли. Если вы все еще не видели то, как будет выглядеть форма с заданиями, то вот вам ссылка на тренажер. Сам экзамен длился 3 часа 55 минут.

Какие были IDE на ЕГЭ по информатике? Были ли Excel и Word или их аналоги?

Это было самым главным вопросом для меня на протяжении всей подготовки к экзамену. Многим ученикам выдавали документ, в котором они выбирали программы, которые им нужны во время ЕГЭ. Мне такой бумажки не дали. В итоге у нас был Эксель, Ворд, Visual Studio, PyCharm, Python 3.9, PascalABC. Были заявлены и программы для Java, но времени на изучение всех приложений у меня не было. В принципе, если вы пишите на двух или более ЯП, то у вас есть шанс воспользоваться всеми ними.

ЕГЭ по информатике

Можно ли использовать код для заданий, не связанных с языками программирования?

Можно и нужно, если это не занимает большое количество времени, ведь его у вас мало. Кстати, советую удалять всевозможные файлы, которые вы успели сохранить. У нас уже были ситуации, когда ребятам, что сдавали 25 числа, оставались какие-то доработки сдающих 24. В некоторых школах просто не подчищали компьютер после выпускников.

Можно ли пользоваться Экселем и Вордом для других заданий?

Ответ все тот же: можно. У некоторых ребят Word и Excel были в виде отдельных программ, у кого-то — в виде пустого файла из этих программ. В принципе, весь компьютер в вашем распоряжении. У кого-то вместо программ от Office стоял LibleOffice. Перед экзаменом я попробовала в нем поработать, особо ничем не отличается.

Калькулятор был?

Был. В нем есть смысл, если вам нужно что-то быстро перевести в двоичную систему счисления. На Windows 10 есть программистский калькулятор. Все то же самое вы сможете сделать с помощью кода.

Как проходит ЕГЭ по информатике?
Как проходит ЕГЭ по информатике?

Был ли Paint?

Самого Паинта на компьютере не было, но вы вполне можете его открыть иным образом.

Как проходит ЕГЭ по информатике?
нажимаем правую кнопку мыши и выбираем создать
Как проходит ЕГЭ по информатике?
создаем точечный рисунок и открываем его с помощью Paint

Можно ли возвращаться к заданиям и делать их не подряд?

Можно.

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

Какие были компьютеры?

В нашей аудитории были обычные компьютеры с нормальным большим экраном и не очень удобной клавиатурой, если вы привыкли пользоваться ноутбуком. Стоял Windows 10.

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

Нет. Так получилось, что рядом со мной сидел выпускник, у которого не открывалась программа для Питона. Она была, но требовала вход в интернет. Что именно было не так, я не до конца поняла. К нему много раз подходили организаторы экзамена, звали других людей, долго пытались понять проблему. Теоретически они должны были сделать замену, тем более в нашей аудитории стоял лишний пк (одна сдающая не пришла на экзамен). В итоге потратили много времени ни на что, а ученик завершил экзамен вместе с нами. Спасибо тому, кто определял места в аудитории, у меня проблем не было.

Что там по одинаковым заданиям 24 и 25 числа?

У сдающих 24 числа были новые прототипы заданий в 26 и 27 номере, сдающие 25 числа их прорешали после экзамена у 24-ых, пришли на экзамен и увидели практически то же самое. Не думаю, что это помогло тем, кто вообще не решал 26 и 27 ни разу, но преимущество это дало.

Можно ли пользоваться компьютером до начала экзамена?

Нет, хотя было бы неплохо.

Совпали ли задания по информатике у Центра с Дальним Востоком?

Да.

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

Автор:
Кусточкин Александр Валерьевич

учитель
информатики, МБОУ «Поспелихинская СОШ №1»

2021
г.

Оглавление

Введение

1. Основы
языка программирования
Python

2. Обзор
задач компьютерного ЕГЭ по информатике и их решение на языке
Python

3. Сравнение
эффективности программ, написанных на языках
Pascal,
C и Python

Заключение

Введение

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

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

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

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

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

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

Задачи:

     рассмотреть
основы языка программирования
Python;

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

     сравнить
эффективность программ, написанных на языках
Pascal,
C
и
Python.

1. Основы
языка программирования
Python

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

Физические строки
разделяются самим символом конца строки. Для выделения блоков кода используются
исключительно отступы. Логические строки с одинаковым размером отступа
формируют блок, и заканчивается блок в том случае, когда появляется логическая
строка с отступом меньшего размера. Именно поэтому первая строка в сценарии
Python не должна иметь отступа.

Других радикальных
отличий от других языков программирования в синтаксисе Python нет. Также
используются стандартные правила для заданий идентификаторов переменных,
методов и классов – имя должно начинаться с подчеркивания или латинского символа
любого регистра и не может содержать символов @, $, %. Также не может
использоваться в качестве идентификатора только один символ подчеркивания.

Типы данных, используемых
в Python, совпадают с другими языками – целые и вещественные типы данных;
дополнительно поддерживается комплексный тип данных – с вещественной и мнимой
частью. Python поддерживает строки, которые могут быть заключены в одинарные,
двойные или тройные кавычки, при этом строки являются immutable-объектами, т.е.
не могут изменять свое значение после создания.

Есть в Python и
логический тип данных bool c двумя вариантами значения – True и False. Для
повышения читаемости кода рекомендуется использовать для логических переменных
тип bool.

В Python определены три
типа коллекций для хранения наборов данных:

     
кортеж (tuple);

     
список (list);

     
словарь (dictionary).

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

Список – это изменяемая
упорядоченная последовательность элементов. Элементы списка также разделяются
запятыми, но задаются уже в квадратных скобках. Для создания списков
предлагается функция list().

Словарь является
хеш-таблицей, сохраняющей элемент вместе с его идентификатором-ключом.
Последующий доступ к элементам выполняется тоже по ключу, поэтому единица
хранения в словаре – это пара объект-ключ и связанный с ним объект-значение.
Словарь – это изменяемая, но не упорядоченная коллекция, так что порядок
элементов в словаре может меняться со временем. Задается словарь в фигурных
скобках, ключ отделяется от значения двоеточием, а сами пары ключ/значение
разделяются запятыми. Для создания словарей доступна функция dict().

В
листинге 1 приведены примеры различных коллекций, доступных в Python.

Листинг 1. Виды коллекций, доступные в Python

(‘w’,‘o’,‘r’,‘l’,‘d’)    
# кортеж из пяти элементов

(2.62,)                  
# кортеж из одного элемента

[“test”,’me’]            
# список из двух элементов


]                     
# пустой список

{ 5:‘a’,
6:‘b’, 7:‘c’ }   # словарь из трех элементов с ключами типа int

Многие возможности Pythonреализованы в виде
отдельных функций; кроме того, модули расширения чаще всего делаются тоже в
виде библиотеки функций. Функции также применяются и в классах, где они по
традиции называются методами.

Синтаксис
определения функций в Python крайне простой; с учетом изложенных выше
требований (листинг 2).

Листинг 2. Виды коллекций, доступные в Python

def
ИМЯ_ФУНКЦИИ(параметры):

    выражение
№ 1

    выражение
№ 2

    …

Как
видно, необходимо использовать служебное слово def, двоеточие и отступы.
Вызвать функцию также очень просто:

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

Листинг 3. Виды коллекций, доступные в Python

#функция,
выполняющая деление нацело – с помощью оператора //

def
foo(delimoe, delitel):

    return
delimoe // delitel

print
divide(50,5)                        
#
результатработы: 10

print
divide(delitel=5, delimoe=50)      #
результатработы: 10

Функция в Python
обязательно возвращает значение – это делается либо явно с помощью оператора
return, за которым следует возвращаемое значение, либо, в случае отсутствия
оператора return, возвращается константа None, когда достигается конец функции.
Как видно из примеров объявлений функций, в Python нет необходимости указывать,
возвращается что-либо из функции или нет, однако если в функции имеется один
оператор return, возвращающей значение, то и другие операторы return в этой
функции должны возвращать значения, а если такого значения нет, то необходимо
явно прописывать return None.

Если функция очень
простая и состоит из одной строки, то ее можно определить прямо на месте
использования, в Python подобная конструкция называется лямбда-функцией
(lambda). lambda-функция – это анонимная функция (без собственного имени),
телом которой является оператор return, возвращающий значение некоторого
выражения. Такой подход может оказаться удобным в некоторых ситуациях, однако
стоит заметить, что повторное использование подобных функций невозможно.

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

2. Обзор
задач компьютерного ЕГЭ по информатике и их решение на языке
Python

В
проекте компьютерного ЕГЭ по информатике предлагаются десять типов заданий на
следующие темы.

1.    
Вычисления

2.    
Решение уравнений численными методами

3.    
Перебор целых чисел. (Разбиение числа на
цифры)

4.    
Перебор чисел. Проверка делимости

5.    
Перебор целых чисел. Количество делителей

6.    
Символьные строки. Цепочки символов

7.    
Функции двух аргументов. Таблицы значений

8.    
Электронные таблицы. Встроенные функции
(не решается средства
Python)

9.    
Рекурсия. Рекурсивные функции

10.
Исследование моделей. Оптимизация

1.    
Пример задания на вычисление

С помощью программы Калькулятор или электронных
таблиц вычислите значение выражения. В ответе запишите только целую часть
результата. Можно также написать программу.

ПрограмманаязыкеPython

from math
import sqrt, cos, pi

print( sqrt(1
+ cos(3.53*pi)*10)*310 )

Ответ:
431.

Для
решения данного задания, нужно знать правила записи математических функций на
языке Python. В связи с невозможностью записи некоторых стандартных
математических функций с клавиатуры персонального компьютера в языке Python
существуют так называемые встроенные функции, с помощью которых пользователь
записывает арифметические выражения.

Основные
математические функции языка Python представлены в таблице 1. Прежде чем
использовать математические функции, необходимо в начале программы написать
инструкцию import math, однако тогда перед упоминанием каждой функции необходимо
будет добавлять имя модуля — math, например, y=math.sin(x). Другой способ,
который позволит избежать многократного вызова модуля math, — сделать следующую
запись в начале программы: from math import *.

Таблица
1. Общие математические функции модуля Math

Запись на Python

Действие

math.sin (x)

Возвращает значение функции Sin от числа х

math.cos (x)

Возвращает значение функции Cos от числа х

math.tan (x) или math.sin (x)

/ math.cos (x)

Возвращает значение функции Tg от числа х

math.cos
(x) / math.sin (x)

Возвращает значение функции Ctg от числа х

math.abs (x)

Возвращает абсолютную величину числа х

math.exp (x)

Возвращает результат возведения числа е в степень X

math.Log lp (x)

Возвращает натуральный логарифм от х+1

math.sqrt (x)

Возвращает результат извлечения квадратного корня
числа х

math.log (x)

Возвращает логарифм числа х по основанию

10

math.cos
(x) * math.cos (x)

Возвращает результат возведения функции

Cos х в квадрат

math.acos (x)

Возвращает значение функции арккосинус от числа х

math.asin (x)

Возвращает значение функции арксинус от числа х

math.atan (x)

Возвращает значение функции арктангенс от числа х

Pi

Возвращает 3.141592653589793

math.degrees(x)

Преобразует радианы в градусы

math.radians(x)

Преобразует градусы в радианы

math.floor(x)

Возвращает значение, округленное до ближайшего
меньшего целого

math.ccil(x)

Возвращает значение, округленное до ближайшего
большего целого

math.factorial(x)

Возвращает факториал числа. 3 != 1 *2*3

В таблице2 представлены
некоторые встроенные функции для работы с числами, не требующие подключения
модуля math.

Таблица
2. Функции для работы с числами

Запись на Python

Описание

round(x)

Возвращает результат округления числа х до ближайшего меньшего целого
значения для чисел с дробной частью меньше 0.5 или результат округления числа
х до ближайшего большего целого значения для чисел с дробной частью больше
0.5

pow(x,y)

другой вариант х**у

Возвращает результат возведения числа х в степень у

mах(список чисел через
запятую)

Возвращает большее значение из списка чисел

min(список чисел через
запятую)

Возвращает меньшее значение из списка чисел

sum(список K чисел через запятую)

Возвращает сумму значений элементов последовательности

float(число)

Преобразует объект (например, строковое значение, целое
значение) в вещественное число

2. Пример задания на решение уравнения численным
методом

Известно, что уравнение  на отрезке [0; 1,5] имеет единственный корень.
Найдите его приблизительное значение с точностью не менее 0,00001 и запишите
в ответе найденное значение ровно с пятью значащими цифрами после запятой.

Программа
на языке Python:

from math
import cos, exp       # подключить функции cos, exp

def
f(x):                       # это функция f(x)

return
0.01*exp(x) — cos(3*x)

a, b =
0, 1.5                   # границыотрезка

while b-a
> 1e-6:               # пока ширина отрезка >= 10^(-6)   

  c = (a +
b) / 2               # середина отрезка

  if
f(a)*f(c) <= 0:            # сдвигаем правую или левую границу

        b =
c

  else: a =
c

# вывод с 5
знаками в дробной части

print(
«{:.5f}».format((a + b) / 2) )

Ответ:
0.51800

3. Пример
задания на перебор целых чисел. Разбиение числа на цифры

Назовём натуральное четырёхзначное число N
(1000
£N£
9999) счастливым, если суммы двух его первых и двух последних цифр
различаются не более, чем на 3. Найдите количество таких чисел.

Программа на языке Python

count = 0

for n in
range(1000, 10000):

  d0 = n %
10; n //= 10

  d1 = n %
10; n //= 10

  d2 = n %
10

  d3 = n //
10

  if
abs(d3+d2-d1-d0) <= 3:

    count
+= 1

print(count)

Поскольку
заданный отрезок [1000; 9999] содержит всего 9000 чисел, можно решать задачу
простым перебором. Для этого сначала нужно разбить число на цифры с помощью
операций деления нацело и остатка от деления; цифры помещаем в переменные d0,
d1, d2, d3. Затем проверяем «счастливость» числа: число счастливое при
выполнении условияв этом случае увеличиваем счётчик найденных счастливых чисел.

Ответ:
4071.

4. Пример
задания на перебор целых чисел. Проверка делимости

Рассматривается
множество целых чисел, принадлежащих отрезку
[1033;
7737], которые делятся на 5 и не делятся на 11, 17, 19 и 23. Найдите
количество таких чисел и максимальное из них. В ответе запишите два числа
через пробел: сначала количество, затем максимальное число.

Программа на языке Python

count = 0

maxGood = 0

for n in
range(1033, 7737+1):

  if (n % 5
== 0) and (n % 11 != 0) and

     (n %
17 != 0) and (n % 19 != 0) and (n % 23 != 0):

    maxGood
= n

count += 1

print(count,
maxGood)

Поскольку
заданный отрезок [1033; 7737] содержит не так много чисел, можно решать задачу
простым перебором. Условие будем понимать так: интересующие нас числа делятся
на 5 и не делятся ни на одно из чисел 11, 17, 19 и 23. Нам выгоднее перебирать
числа в порядке возрастания, тогда последнее найдённое число – это и есть искомое
максимальное подходящее число (если требуется найти наименьшее подходящее
число, удобнее перебирать числа в порядке убывания)

Ответ:
1040 7730

Напишите программу, которая ищет среди целых
чисел, принадлежащих числовому отрезку
[194455;
194500], числа, имеющие ровно 4 различных делителя. Выведите эти четыре
делителя для каждого найденного числа в порядке возрастания.

ПрограмманаязыкеPython

for n in
range(194455, 194500+1):

  divs = []

  for d in
range(1,n+1):

    if n %
d == 0:

     
divs.append(d)

  if
len(divs) == 4:

print(
*divs )

При
написании программы на языке Python можно поступить так

for для
всех чисел n в интервале:

  divs =
массив всех делителей n

  if
len(divs) == 4:

    вывести
массив делителей

5. Пример
задания на работу с простыми числами

Напишите программу, которая ищет среди целых
чисел, принадлежащих числовому отрезку
[3532000;
3532160], простые числа. Выведите все найденные простые числа в порядке
возрастания, слева от каждого числа выведите его номер по порядку.

ПрограмманаязыкеPython

from
math import sqrt

count
= 0

for
n in range(3532000, 3532160+1):

 
prime = True

 
for d in range(2, round(sqrt(n))):

   
if n % d == 0:

     
prime = False

     
break

 
ifprime:

count
+= 1

print(
count, n )

6. Пример
задания на работу с символьными строками

В текстовом файле k7.txt
находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите
количество цепочек длины 3, удовлетворяющих следующим условиям:

·        
1-й символ – один из символов B, C или D;

·        
2-й символ – один из символов B, D, E, который не
совпадает с первым;

·        
3-й символ – один из символов B, C, E, который не
совпадает со вторым.

Программанаязыке
Python

s =
open(‘k7.txt’).read()

count = 0

for i in
range(len(s)-2):

    if s[i]
in ‘BCD’ and s[i+1] in ‘BDE’

      and
s[i+2] in ‘BCE’ and s[i]!=s[i+1]

      and
s[i+1]!=s[i+2]:

      count
+= 1

print(count)

Решение:

1) 
Считываем из файла и перебираем символы.

2) 
Перебираем все тройки символов. Примем,
что переменная i будет хранить номер первого элемента в тройке, то есть, будем
рассматривать тройки (s[i], s[i+1], s[i+2]).

3) 
Организуем цикл который перебирает
значения i от 1 до len(s)-2

for i in
range(len(s)-2):

  …

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

7. Пример задания на
вычисление значения функции от двух переменных

С помощью редактора
электронных таблиц создайте таблицу вещественных значений выражения  для следующих вещественных
значений x и y:

x  = 5,5; 6,0; …; 8,5;  y 
= 10,0; 10,3; …; 13,0.

Вычислите сумму
получившихся значений и запишите её целую часть в ответе.

Для выполнения этого
заданий также можно написать программу.

Решение:

1)                
Чтобы написать программу, нужно
использовать вложенный цикл: в одном цикле будем перебирать значения x,
а во втором (вложенном) – значения y; учитывая, что цикл с переменной (
for
in)
работает только с целыми последовательностями чисел, придётся использовать
циклы с условием:

s =
0                # это неправильная программа

x =
5.5              # это неправильная программа

while x
<= 8.5:      # это неправильная программа  

  y = 10

  while y
<= 13:

    #
print(x, y) # отладочная печать, см. обсуждение ниже

s +=
2*x**3/(y+1)

    y +=
0.3

  x += 0.5

print( s )

сумма значений функции накапливается в
переменной s

2)                
однако эта программа выводит неверный
ответ.

3)                
Дело в том, что вещественные числа,
которые нельзя представить в виде суммы целых (в том числе и отрицательных)
степеней числа 2, в двоичной системе счисления представляют собой бесконечную
дробь и поэтому не могут быть точно записаны в памяти двоичного компьютера; при
выполнении вычислений с такими числами ошибка накапливается, и к последнему
шагу (это можно проверить с помощью отладочной печати) значение y равно
не 12,7, а чуть больше:

12.700000000000006

из-за
этого следующее значение, равное 13,000000000000006, уже больше, чем 13, и не
удовлетворяет условию работы цикла; таким образом, на каждом шаге цикла по x
мы теряем одно значение y, и соответствующее значение функции не
включается в сумму.

4)                
с переменной x подобных проблем
нет, так как шаг изменения x равен 0,5 = 2–1

5)                
исправить ситуацию можно так: организовать
перебор только целых значений, используя вспомогательные целочисленные
переменные x10 = x
×
10 и
y10
=
y×
10:

s
= 0

for
x10 in range(55, 86, 5):

 
for y10 in range(100, 131, 3):

s
+= 2*(x10/10)**3/(y10/10+1)

print(s)

8. Пример задания на
вычисление значения рекурсивной функции

Определите
наименьшее значение n, при котором сумма чисел, которые будут выведены при
вызове F(n), будет больше 500000. Запишите в ответе сначала найденное значение
n, а затем через пробел – соответствующую сумму выведенных чисел.

def F( n ):

  print(2*n)

  if n > 1:

    print(n-5)

    F(n-1)

    F(n-2)

Решение:

Первое,
что может прийти в голову – вызывать приведённую процедуру при разных значениях
параметра и увеличивать это значение до тех пор, пока сумма выведенных чисел не
превысит заданное значение 500000; это тупиковый подход, поскольку чисел очень
много и сложение займет очень много времени при низкой вероятности правильного
ответа

Можно
попробовать изменить программу так, чтобы сумма выводимых чисел считалась
автоматически: добавим в программу глобальную переменную
s
и будем увеличивать её при выводе каждого числа на значение этого числа; при
этом для ускорения (значительного!) работы программы сразу закомментируем вывод
чисел на экран:

def
F( n ):

 
global s    # если не объявить s глобальной – ошибка!

#
print(2*n)

  s += 2*n

  if n >
1:

    #
print(n-5)

s += n — 5

    F(n-1)

F(n-2)

Дальше
можно написать такую программу и запускать её при различных значениях
переменной n:

n
= 15

s
= 0

F(n)

print(
n, s )

Увеличивая
каждый раз значение
n
на 1, мы в конце концов найдём первое (минимальное) значение
n,
при котором сумма чисел, которые будут выведены при вызове F(
n),
будет больше 500000 – это F(24) = 531864

Ответ:
24  531864.

9. Пример задания на
оптимизацию

На покупку мебели выделено 500 тыс. рублей.
Стоимость одного комплекта составляет 18 тыс. рублей. Запишите наборы
вариантов покупки максимального количества комплектов мебели, при условии,
что производитель М продает мебель упаковками по 6 комплектов в упаковке, а
производитель N – по 4 комплекта в упаковке.

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

Решение:

В
простейшем варианте можно просто вывести на экран все варианты сочетаний  a
и b с соответствующими значениями
K,
в конце программы вывести мак
cимальное
значение K; затем вручную найти все строки, где значение
K
равно максимальному.

S0
= 500000 # доступная сумма

cost1
= 18000  # стоимость одного комплекта

packM
= 6     # количество комплектов в упаковке M

packN
= 4     # количество комплектов в упаковке N

  
# максимальное значение a

aMax = int(S0 /
(
packM*cost1))

#
поиск максимального K по всем вариантам

maxK = 0

for a in
range(aMax+1):

  Sb = S0 —
a*packM*cost1  #
сумманазакупкуу N

  b =
int(Sb / (packN*cost1))

K =
packM*a + packN*b    # общее количество

print(a, b,
K)

  if K >
maxK:

    maxK = K              
#
новыймаксимум

print(maxK,
maxK*cost1)

3. Сравнение
эффективности программ, написанных на языках
Pascal, C и Python

Сравним
программы, написанные на языках
Pascal,
C
и
Python
по таким критериям, как время работы и используемая память. Для примера возьмем
линейные программы, программы с циклами и программы с рекурсивными функциями.

Задача
1:
дано натуральное число.
Выведите его последнюю цифру.

Pascal

C

Python

var a: integer;

begin

readln(a);

writeln(a
mod 10);

end.

#include
<stdio.h>

main() {

       int x;

      
scanf(«%i», &x);

      
printf(«%i», x%10);

}

x=int(input())

print(x%10)

Время
работы:
0.002 с.

Используемая
память:
348160 бит

Время работы:
0.002

Используемая
память: 958464

Время
работы:
0.037

Используемая
память:

360448 бит

Как видно из таблицы, при реализации линейных
алгоритмов программа на
Pythonпроигрывает во времени реализации и используемой
памяти программам на
Pascalи C.

Задача2:подсчитайте количество натуральных
делителей числа 
x (включая
1 и само число;
x2109).

Pascal

C

Python

var x, i, k: longint;

begin

readln(x);

k:=0;

for i:=1 to x do

begin

if (x mod i =0) then inc(k);

end;

writeln(k);

end.

#include
<stdio.h>

#include
<conio.h>

main() {

      int x, i, k;

scanf(«%i»,
&x);

k=0;

for (i=1; i<=x; i++)
{

if (x % i ==0) {

      k=k+1;

}

}

printf(«%i»,
k);

}

x=int(input())

k=0

for i in range(1,x+1):

    if x%i==0:

        k+=1

print(k)

Время
работы:
0.002 с.

Используемая
память:
348160 бит

Время работы:
0.002

Используемая
память: 958464

Время
работы:
0.039

Используемая
память:

376832 бит

Из-за того, что значение xможет быть достаточно большим, все написанные программы не проходят все
тесты. Последние два теста не выполняются из-за того, что превышено
максимальное время работы (рис. 1).

Рис. 1. Результаты
прохождения тестов

Поэтому простым перебором данную задачу решать
нельзя. Повысим эффективность программы,
идея состоит в
том, чтобы для определения количества делителей числа
N
перебирать только числа до
;
если число
q целое, его нужно
добавить в список делителей, а все остальные делители – парные, то есть если
a
– делитель
N, то b
=
N
/
a
– тоже делитель
N.

Таким
образом, циклом пробегаемся от 1 до (корня X)-1, и проверяем на делимость, если
делится, то увеличиваем счетчик. После цикла удваиваем наш счетчик, так как
любое число если имеет делитель до корня этого числа, то он имеет ещё один
делитель после корня этого числа. Проверяем отдельным if-ом случай для корня X,
если делится нацело, то увеличиваем на один и выводим наш счетчик, иначе просто
выводим счетчик.

Pascal

C

Python

var x, i, k: longint;

begin

readln(x);

k:=0;

for i:=1 to x do

begin

if (x mod i =0) then inc(k);

end;

writeln(k);

end.

#include
<stdio.h>

#include
<math.h>>

main() {

      int x, i, k,q;

      double fp,ip;

scanf(«%i»,
&x);

k=0;

if (x%2==0) {

            q=trunc(sqrt(x));

} else

{

q=trunc(sqrt(x))-1;     

}

for (i=1; i<=q; i++)
{

if (x % i ==0) {

      k=k+1;

}

}

k=k*2;

fp = modf(sqrt(x) ,
&ip);

if(fp==0) {

            k=k+1;

}

printf(«%i»,
k);

}

import math

x=int(input())

if(x%2==0):

q=math.trunc(math.sqrt(x))

else:

q=math.trunc(math.sqrt(x))1

k=0

for i inrange(1,q+1):

if(x%i==0):

        k=k+1

k=k*2

if(math.sqrt(x)%1==0):

k=k+1

print(k)

Время
работы:
0.002 с.

Используемая
память:
348160 бит

Время работы:
0.002

Используемая
память: 962560бит

Время
работы:
0.037

Используемая
память:

380928 бит

Заключение

Девяносто
процентов задач компьютерного ЕГЭ по информатике решается с помощью программирования.

В
процессе выполнения работы были решены следующие задачи:

     рассмотрены
основы языка программирования
Python;

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

     проанализирована
эффективность программ, написанных на языках
Pascal,
C
и
Python.

Список литературы

1.  
Сайт К. Ю. Полякова. Методические материалы и
программное обеспечение [Электронный ресурс]. Режим доступа:http://kpolyakov.spb.ru

2.  
Прохоренок Н. А. Python 3. Самое
необходимое [Текст]. – Спб.: БХВ-Петербург, 2019. – 608 с.

3.       
Основы Python [Электронный ресурс]. Режим доступа: 

4.       
Применение и основы Python [Электронный ресурс]. Режим доступа: 

5.       
Дистанционная подготовка к информатике [Электронный ресурс]. Режим доступа
https://informatics.mccme.ru

 

Никогда не программировал, но хочешь сдать ЕГЭ по информатике? Тогда знай: к экзамену можно подготовиться за год, если грамотно организовать учебный процесс. Из этой статьи ты узнаешь все о структуре ЕГЭ по информатике в 2023 году, изменениях и типах заданий.

Структура и изменения ЕГЭ 2023

Структура и изменения ЕГЭ 2023 по информатике

Изменения в ЕГЭ по информатике 2023

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

В связи с этим, ФИПИ ежегодно вносят изменения в КИМ по информатике, чтобы внести больше разнообразия и избавиться от шаблонных решений. В 2023 году полностью претерпят структуру 2 задания, но это не все изменения, что ФИПИ представили в новой демоверсии ЕГЭ. 

Долой переборное решение!

В блоке «Программирование» даже после перехода на компьютерную форму было два задания, в которых программа уже представлена в условии, а задача сдающего — проанализировать ее — задания №6 и 22. Но многие справедливо подумали – зачем анализировать код, если я могу его переписать и запустить переборное решение. Благодаря этому, почти все, кто знал о таком варианте решения заданий, законно получали 2 балла за них. ФИПИ такой способ решения вряд ли понравился. 

Официальный список изменений выглядит следующим образом: 

ЕГЭ по информатике 2023

ФИПИ об изменениях в ЕГЭ по информатике 2023

Задание №6 теперь мы будем относить к блоку «Алгоритмизация», так как теперь оно предоставляет нам работу с исполнителем и анализом алгоритма. В демоверсии вам предлагают проанализировать «Черепашку», которая многим знакома из ОГЭ по информатике:

ЕГЭ по информатике 2023

Задание 6, демоверсия ЕГЭ по информатике 2023

Задание №22 пополняет ряды блока «Информационные модели», а также заданий, к которым прилагаются дополнительные файлы, если быть точнее — электронная таблица. В условии затрагивается новая для экзамена тема – многопоточность (довольно важная тема для многих IT-специалистов и затрагивается на определенных предметах в университете), а решение требует анализа таблицы и зависимостей процессов: 

ЕГЭ по информатике 2023

Задание 22, демоверсия ЕГЭ по информатике 2023

Кроме двух новых заданий, некоторые номера также претерпели изменения: 

Задание №14 все еще направлено на работу с системами счисления, но теперь нужно искать неизвестную цифру числа. Такого прототипа ранее на ЕГЭ мы не видели: 

ЕГЭ по информатике 2023

Задание 14, демоверсия ЕГЭ по информатике 2023

Задание №12, ​судя по демоверсии, станет сложнее — это уже знакомый для экзамена исполнитель «Редактор», но с необычным вопросом (раньше, в основном, требовалось назвать получившуюся после обработки программой строку/сумму цифр строки): 

Задание 12, демоверсия ЕГЭ по информатике 2023

Задание №16 на рекурсию из демоверсии намекает нам на то, что не стоит забывать про аналитическое решение. Это происходит из-за больших аргументов у функции, гораздо проще поразмыслить, что же считает функция:

ЕГЭ по информатике 2023

Задание 16, демоверсия ЕГЭ по информатике 2023

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

Поэтому на своих занятиях по подготовке к ЕГЭ по информатике я всегда разбираю с учениками самые свежие обновления ФИПИ. Мы выясняем, как именно надо понимать задание, изучаем разные алгоритмы решения и тренируем лучшие способы их оформления — в соответствии со всеми критериями. Именно поэтому мои ученики сдают экзамен на высокий балл и поступают в тот вуз, в который изначально хотели. Помочь с этим я могу и вам — записывайтесь на курс и начните подготовку к ЕГЭ на 80+ 💪

О структуре экзамена

В ЕГЭ по-прежнему осталось 27 заданий с кратким ответом. За задания 1-25 можно получить по 1 первичному баллу, а за задания 26 и 27 — по 2 балла. Максимальный возможный результат — 29 первичных баллов.

Все задания школьникам нужно решить за 3 часа 55 минут.

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

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

Программирование

Программирование встречается в шести заданиях — а именно в 16, 17, 24, 25, 26 и 27. Чтобы справиться с ними достаточно хорошо знать только один язык программирования. Нужно уметь работать с массивом, строками, файлами, знать алгоритмы сортировки и другие не менее важные алгоритмы работы с числами.

ЕГЭ по информатике 2023

Задание 24, демоверсия ЕГЭ по информатике 2023

Логика

Логика встречается в заданиях 2 и 15. Чтобы успешно справиться с этими заданиями, нужно знать основные логические операции и их таблицы истинности, уметь преобразовывать и анализировать выражения.

Алгоритмизация

В данный блок входят семь заданий (5, 6, 12, 19, 20, 21 и 23). Для решения этих заданий нужно уметь работать с различными алгоритмами и исполнителями. Важно понимать теорию игр — определять выигрывающего игрока, выигрышную позицию, различать понятия заведомо проигрышной и выигрышной позиций.

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

Информационные модели

С заданиями 1 и 13 ученики обычно справляются хорошо. Чтобы их решить, нужно уметь работать с графами и таблицами и знать пару простых методов. С заданием 10 проблемы возникают редко, так как от вас требуется найти количество определенных слов в текстовом документе. Задания 3, 9 и 18 требуют работы с электронными таблицами, при решении вам помогут знания про ссылки, функции и фильтры. К этому же блоку добавляется новое задание 22. 

ЕГЭ по информатике 2023

Задание 9, демоверсия ЕГЭ по информатике 2023

Информация и ее кодирование

Задания этого блока достаточно разнообразны. Вы встретите алгоритмы перевода чисел в различные системы счисления, условие Фано, формулы, единицы измерения информации и комбинаторику. Все это разнообразие встречается в заданиях 4, 7, 8, 11, 14, а также может пригодится в заданиях на программирование.  А новый прототип задания 14 на работу с системами счисления и вовсе можно решить с помощью программы.

Шкала оценивания

На самом деле шкала перевода баллов составляется после проведения экзаменов, так как в формуле есть параметр «среднее значение». То есть то, что мы называем шкалой — это результат перевода баллов прошлого года. ФИПИ переводит баллы по формуле, а не по шкале. Поэтому шкала меняется, если меняется экзамен или массово меняются результаты его прохождения. Мы полагаем, что в 2023 году проходной балл будет 40 вторичных баллов, но это может измениться.

Какие типы заданий встретятся на ЕГЭ по информатике 2023?

На ЕГЭ 2023, как и в 2021 году, все задания будут с кратким ответом, больше не нужно писать подробные объяснения по теории игр и сдавать программный код на проверку на бумаге. Но это не значит, что все задания идентичны. Посмотрим, какие именно типы заданий встретятся на экзамене.

Задания, которые можно решить «вручную»

Хотя ЕГЭ по информатике и проходит в компьютерной форме, в КИМах по-прежнему остаются задания, которые можно решать, как на бумаге, так и на компьютере. Это задания 1, 2, 4-8, 11-15, 19-23, в них необходимо получить число или последовательность букв в ответе. Ты можешь написать программу на компьютере или использовать электронные таблицы, а затем записать в ответ получившееся значение. За каждое задание можно получить 1 балл.

Задания, которые решаются с помощью компьютера

Все такие задания бывают трех типов:

  1. Работа с предложенным файлом
  2. Создание программы
  3. Написание программы и получение ответа, используя предложенный файл

Разберемся с каждым типом отдельно.

Работать только с предложенным файлом нужно в заданиях 3, 9, 10, 18 и 22. Чтобы решить эти задания, нужно знать, какие функции есть у текстовых редакторов и редакторов электронных таблиц, а также теория по реляционным базам данных. За каждое задание можно получить по 1 баллу.

Создать программу понадобится в задании 25. Задача в том, чтобы написать код и получить на выходе какой-то ответ. Начальные данные, при которых нужно получить ответ, уже указаны в самом задании. За оба задания можно получить по 1 баллу.

Задания, где нужно написать программу и считать информацию из файла — это 17, 24, 26 и 27. Эффективность и способ решения, который вы использовали, не проверяется. Главное — получить верный численный ответ. За задания 17 и 24 вы можете получить по 1 баллу, а за задания 26 и 27 — по 2 первичных балла.

Обрати внимание, что в некоторых прототипах заданий 17, 24, 25, 26 и 27 программу можно не писать, если ты знаешь, как решить эти задания другим способом — это не запрещено.

Как подготовиться к ЕГЭ по информатике 2023?

Лучший способ — разобраться в каждой теме и выучить все необходимое. Как это сделать?

  1. Для начала оцените текущий уровень знаний. Можно пройти диагностическое тестирование или попробовать решить последнюю демоверсию экзамена. Таким образом вы поймете, что вы уже знаете, а над чем нужно еще поработать.
  2. Если вы не умеете программировать, советуем заняться этим с самого начала учебного года. Задания на программирование приносят минимум 8 первичных баллов из 29, это достаточно много.
  3. Подумайте, смогут ли вас хорошо подготовить в школе. Оцените, что из школьной программы вы уже знаете, а что предстоит изучить в течение года.
  4. Решите, как вам комфортнее заниматься: лично с преподавателем, в группе или онлайн.
  5. Регулярно занимайтесь, уделяя время и теории, и практике!

Именно по такой схеме проходят мои занятия по подготовке к ЕГЭ по информатике в MAXIMUM Education. Но вдобавок к этому я еще показываю ученикам разные ловушки экзамена: как в формулировках заданий, так и в критериях и правилах оформления решений. Я помогаю распознавать эти ловушки и обходить их стороной — только так можно гарантированно получить максимальный балл за каждое задание.

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

Так что на экзамен мои ученики приходят абсолютно спокойные и уверенные в своих силах. И результаты ЕГЭ у них соответствующие: намного выше среднего балла по стране. Если и вы хотите получить 80+ на экзамене по информатике, записывайтесь на курс подготовки к ЕГЭ. Я научу вас всему, что я знаю!

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

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

Всем удачи!

Like this post? Please share to your friends:
  • Есть ли пересдача экзамена в универе
  • Есть ли пересдача итогового сочинения в 11 классе
  • Есть ли пересдача егэ в 11 классе по русскому
  • Есть ли пересдача гос экзаменов в институте
  • Есть ли переменный ток в егэ по физике