Программное обеспечение для ОГЭ
Офисы:
Язык программирования:
Pascal | Система программирования PascalABC.NET версия 3.Х | http://pascalabc.net/ssyilki-dlya-skachivaniya | Это программное обеспечение является свободным; вы можете распространять и/или модифицировать его на условиях GNU LGPL версии 3 с разъяснениями и исключениями |
Python | Система программирования Python версия 3.6 (и выше) |
https://www.python.org/downloads/ |
Все выпуски Python имеют открытый исходный код. Исторически сложилось так, что большинство, но не все выпуски Python также были совместимы с GPL. На странице «Лицензии» подробно описаны GPL-совместимость и Условия использования. Подробнее. |
С | Система программирования DevC++ версия 5.6 (и выше) | https://dev-c1.software.informer.com/download/ | Предоставляет полную IDE для C / C ++ на основе порта MingGW компилятора GCC. Среда Dev-C++ распространяется свободно с исходными кодами (на Delphi) по лицензии GPL. |
Среды исполнителя:
Кумир | Система программирования КуМир |
Для Windows версия 2.1.0: https://www.niisi.ru/kumir/dl.htm Для Linux используется версия 1.9.0, устанавливается в соответствии с требованиями и параметрами вашего дистрибутива. |
Система Кумир разработана в ФГУ ФНЦ НИИСИ РАН по заказу Российской Академии Наук и распространяется свободно на условиях лицензии GNU 2.0. |
В 2021 году впервые выпускники сдавали ЕГЭ по информатике на компьютерах. Скорее всего, данный формат проведения экзамена останется на несколько лет. В прошлом году я сама искала кучу информации по поводу ЕГЭ, но статей по этому поводу было крайне мало. Мне захотелось поделиться своим опытом, чтобы таким, как я, можно было хоть что-то почитать и успокоиться.
Содержание
- Почему выбор пал на информатику?
- Организация экзамена на пункте проведения.
- Какие были IDE на ЕГЭ по информатике? Были ли Excel и Word или их аналоги?
- Можно ли использовать код для заданий, не связанных с языками программирования?
- Можно ли пользоваться Экселем и Вордом для других заданий?
- Калькулятор был?
- Был ли Paint?
- Можно ли возвращаться к заданиям и делать их не подряд?
- Какие были компьютеры?
- Дадут ли дополнительное время, если возникнут проблемы с компьютером/программой?
- Что там по одинаковым заданиям 24 и 25 числа?
- Можно ли пользоваться компьютером до начала экзамена?
- Совпали ли задания по информатике у Центра с Дальним Востоком?
Почему выбор пал на информатику?
Вопрос хороший, ответ тоже: череда случайностей привела неподготовленного человека к изучению данного предмета. Буквально с лета после окончания 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?
Самого Паинта на компьютере не было, но вы вполне можете его открыть иным образом.
Можно ли возвращаться к заданиям и делать их не подряд?
Можно.
Кстати, настоятельно рекомендую переносить все свои ответы в черновик. Да, там будет черновик. Если у вас возникнут проблемы с компьютером, то будет очень обидно, если ответы пропадут.
Какие были компьютеры?
В нашей аудитории были обычные компьютеры с нормальным большим экраном и не очень удобной клавиатурой, если вы привыкли пользоваться ноутбуком. Стоял Windows 10.
Дадут ли дополнительное время, если возникнут проблемы с компьютером/программой?
Нет. Так получилось, что рядом со мной сидел выпускник, у которого не открывалась программа для Питона. Она была, но требовала вход в интернет. Что именно было не так, я не до конца поняла. К нему много раз подходили организаторы экзамена, звали других людей, долго пытались понять проблему. Теоретически они должны были сделать замену, тем более в нашей аудитории стоял лишний пк (одна сдающая не пришла на экзамен). В итоге потратили много времени ни на что, а ученик завершил экзамен вместе с нами. Спасибо тому, кто определял места в аудитории, у меня проблем не было.
Что там по одинаковым заданиям 24 и 25 числа?
У сдающих 24 числа были новые прототипы заданий в 26 и 27 номере, сдающие 25 числа их прорешали после экзамена у 24-ых, пришли на экзамен и увидели практически то же самое. Не думаю, что это помогло тем, кто вообще не решал 26 и 27 ни разу, но преимущество это дало.
Можно ли пользоваться компьютером до начала экзамена?
Нет, хотя было бы неплохо.
Совпали ли задания по информатике у Центра с Дальним Востоком?
Да.
Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!
В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка 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)
Отличия:
-
Выиграл Петя, соответственно, позиция 4
-
Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))
-
Убрали 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 отличия:
-
Позиции 3 или 5, а не 4, так как выиграл Ваня
-
На второй ход выигрывает Ваня и нам нужно 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 пользователей.