1. Как решать задание ЕГЭ
7. Задание проверяет умение исполнить алгоритм для конкретного исполнителя с фиксированным набором команд.
Пример задания
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах \(v\) и \(w\) обозначают цепочки цифр;
А) заменить (\(v\), \(w\)).
Эта команда заменяет в строке первое слева вхождение цепочки \(v\) на цепочку \(w\). Например, выполнение команды
заменить (\(111\), \(27\))
преобразует строку \(05111150\) в строку \(0527150\).
Если в строке нет вхождений цепочки \(v\), то выполнение команды заменить (\(v\), \(w\)) не меняет эту строку;
Б) нашлось (\(v\)).
Эта команда проверяет, встречается ли цепочка \(v\) в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда \(1\)
ИНАЧЕ команда \(2\)
КОНЕЦ ЕСЛИ
выполняется команда \(1\) (если условие истинно) или команда \(2\) (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из \(70\) идущих подряд цифр \(8\)? В ответе запиши полученную строку.
НАЧАЛО
ПОКА нашлось (\(2222\)) ИЛИ нашлось (\(8888\))
ЕСЛИ нашлось (\(2222\))
ТО заменить (\(2222\), \(88\))
ИНАЧЕ заменить (\(8888\), \(22\))
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Как решать задание?
Данное задание можно решать несколькими способами: с помощью логических рассуждений или при помощи языка программирования.
Мы рассмотрим вариант решения с помощью языка программирования Python.
Вспомнить, что такое процедуры и функции, можно тут.
Вспомнить, что такое алгоритмы ветвления, можно тут.
Вспомним алгоритмы ветвления в Python
ЕСЛИ (условие \(1\))
ТО (действие \(1\))
ИНАЧЕ (действие \(2\))
На Python выглядит следующим образом.
if (условие):
(действие \(1\))
else:
(действие \(2\))
Также вспомним метод replace в Python.
Данный метод возвращает копию строки, в которой все вхождения подстроки заменяются другой подстрокой.
Реализуем данный метод в ходе решения задания № \(12\). Проанализируем условие и определимся, какие операторы нам понадобятся.
ЕСЛИ (if) подстрока \(‘2222’\) встречается в строке \(s\), то (ставим двоеточие) заменяем четыре двойки на две восьмёрки — методом replace следующим образом:
\(s = s.replace (‘2222′, ’88’, 1)\).
Единица указывает на то, что такая замена будет произведена один раз
Иначе (else) заменим ‘\(8888\)’ на ‘\(22\)’ также методом replace.
\(s=s.replace(‘8888′, ’22’,1)\)
Нам необходимо узнать, какая строка останется в результате работы данной программы, поэтому в выводе запишем: print(\(s\)).
1. Как решать задание ЕГЭ
7. Задание проверяет умение работать с логическими переменными, выполнять логические операции, строить таблицы истинности.
Пример задания
Николай заполнял таблицу истинности логической функции \(F\)
¬ ( y → ( x ≡ w ) ) ∧ ( z → x ) ,
но успел заполнить только фрагмент из трёх различных её строк, не указав, какому столбцу таблицы принадлежит каждая из переменных \(w\), \(x\), \(y\), \(z\).
Определи, какому столбцу таблицы принадлежит каждая из переменных \(w\), \(x\), \(y\), \(z\).
В ответе напиши буквы \(w\), \(x\), \(y\), \(z\) в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пиши подряд, никаких разделителей между буквами ставить не нужно.
Как решать задание?
Данное задание можно решать несколькими способами: путём логических рассуждений; использовать электронные таблицы \(+\) логические рассуждения; с помощью программирования.
Мы рассмотрим вариант решения с помощью языка программирования Python.
Вспомнить основные логические операции можно тут.
Правила построения таблиц истинности можно вспомнить тут.
Законы алгебры логики можно вспомнить тут.
Вспомним управляющие конструкции в Python:
цикл с параметром
тело цикла
for \(y\) in \(0\), \(1\):
тело цикла
if условие then:
действия, если условие истинно
else:
действия, если условие ложно
if \(C>D\):
print (‘ истина ‘)
else:
print (‘ ложь ‘)
Запись логических операций на Python
Название операции
Запись на Python
конъюнкция
дизъюнкция
импликация
Напишем программу
Для каждой переменной сформируем вложенный цикл, где будем перебирать все возможные значения (\(0\) и \(1\)) для каждой переменной;
in range (\(2\)): перебор значений \(0\) и \(1\), можно записать по другому: in range (\(0\),\(2\))
Запуск программы
| Полученный результат необходимо сравнить с таблицей из условия |
Сопоставим полученную таблицу истинности с таблицей из условия. Нам необходимо сравнивать условие с результатами, как по строкам, так и по столбцам, отыскивая некоторые закономерности и невозможности. Заметим, что столбец \(y\) содержит в себе три единицы, что может быть только в третьем столбце таблицы из условия. Четвёртый столбик таблицы из условия также можем дополнить единицей, и к этому столбику подходят как \(z\), так и \(w\).
Теперь проанализируем строки. В первой строке получилось три единицы, что соответствует четвёртой строке результата программирования, дополняем нулём первую строку. В третьей строке у нас два нуля, поэтому добавляем единицу. Проверяем, чтобы сошлось по строке. Заполним второй столбец, допишем единицу. Этот столбец как раз и будет являться \(x\). Остаётся проанализировать столбцы \(1\) и \(4\).
Рассмотрим первую строку: \(x = 0\), \(y = 1\), \(z = 0\), следовательно, \(z\) — это четвёртый столбик, а \(w\) — первый.
РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON Текст научной статьи по специальности «Компьютерные и информационные науки»
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ильченко Олег Юрьевич, Сырицына Валентина Николаевна, Кадеева Оксана Евгеньевна
Рассматриваются предметные и методические аспекты единого государственного экзамена по информатике. Анализируются особенности решения сложной части заданий единого государственного экзамена по программированию на языке Python, приводятся примеры решения таких заданий.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Ильченко Олег Юрьевич, Сырицына Валентина Николаевна, Кадеева Оксана Евгеньевна
ПОДГОТОВКА К ЕГЭ ПО ИНФОРМАТИКЕ И ИКТ: ОБЗОР ЗАДАНИЙ И РЕШЕНИЕ ЗАДАЧ НА ОСНОВЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON
ВОЗДЕЙСТВИЕ НА РЕЗУЛЬТАТЫ СДАЧИ ЕГЭ ПО ИНФОРМАТИКЕ В УСЛОВИЯХ ИЗМЕНЕНИЯ ФОРМАТА ЭКЗАМЕНА: НА ПРИМЕРЕ РЕСПУБЛИКИ БУРЯТИЯ
Выбор программного средства для обучения программированию будущих бакалавров педагогического образования
ОСОБЕННОСТИ РЕШЕНИЯ ЗАДАЧ НА ИГРОВЫЕ СТРАТЕГИИ СРЕДСТВАМИ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ В ШКОЛЬНОМ КУРСЕ ИНФОРМАТИКИ
ОСОБЕННОСТИ РЕШЕНИЯ НЕКОТОРЫХ ЗАДАЧ КОМПЬЮТЕРНОГО ЕГЭ ПО ИНФОРМАТИКЕ
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
SOLVING THE PROBLEMS OF THE UNIFIED STATE EXAM IN COMPUTER SCIENCE BY MEANS OF THE PYTHON LANGUAGE
Subject and methodological aspects of the unified state examination in informatics are considered. The peculiarities of solving a complex part of the exam tasks in Python programming are analyzed, examples of solving such tasks are given.
Текст научной работы на тему «РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON»
Ильченко О.Ю., Сырицына В.Н., Кадеева О.Е.,
Дальневосточный федеральный университет, Школа педагогики
Решение задач ЕГЭ по информатике средствами языка Python
В настоящее время актуальна проблема изучения языков программирования, поскольку на них написано все программное обеспечение компьютера. Их изучение начинается со школьной скамьи на уроках информатики для каждого школьника [3]. В 2021 году экзамен по информатике включал в себя 27 заданий, из них восемь задач направлены на проверку знания обучающимися одного из языков программирования: Pascal, C++, Python. Каждый из языков программирования по-своему интересен и сложен в изучении. Поэтому ученику необходимо сделать выбор и остановиться на изучении одного из них. Для начинающих очень удобен язык Pascal. Но стоит отметить, что этот язык создали в конце прошлого столетия.
Соответственно, в наше время он считается уже устаревшим. Чтобы сдать единый государственный экзамен (далее — ЕГЭ), знания этого языка будет достаточно, но, чтобы в будущем стать востребованным специалистом, одного Pascal будет мало.
Язык Python в рейтинге TIOBE на май 2021 года занимает 2-ое место, обходя Pascal и C++, оставляя выше себя только язык C. Главными плюсами Python специалисты считают простоту, большое количество встроенных библиотек, читабельность и удобство кода, легкий синтаксис, а также большое сообщество программистов-единомышленников, использующих его. Это позволит решить любую проблему на форуме за считанные часы. Для новичков этот язык про-
сто находка. Чтобы начать его изучение, от человека потребуется средний уровень знания английского языка. Поэтому для школьника путь в IT-сферу лучше всего начинать именно с языка программирования Python [7; 8].
Python — язык программирования, который упрощен за счет ориентира не на синтаксис и структуру, как это происходит в C++ или Pascal, а на конкретное решение самой задачи. Не тратится лишнее время на размышления о том, в каком месте поставить операторные скобки и так далее. Существует множество различных программ, редакторов, с помощью которых можно начинать учиться писать код на Python. При установке языка программирования автоматически устанавливается редактор IDLE, но более продуктивными и функциональными при решении задач ЕГЭ по информатике являются такие среды разработки как Py-Charm, SublimeText, Jupiter Notebook. Поэтому при рассмотрении сложных заданий ЕГЭ по программированию мы будем ориентироваться на использование среды разработки Jupiter Notebook. Ее главное преимущество заключается в том, что она объединяет код и выводит текст, математические уравнения, визуализацию в виде единого документа [1].
Программирование — самая сложная часть ЕГЭ по информатике, но при этом самая интересная. Когда теория применяется на практике,
© Ильченко О.Ю., Сырицына В.Н., Кадеева О.Е., 2021
РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON
КАДЕЕВА ОКСАНА ЕВГЕНЬЕВНА Российская Федерация, город Владивосток
кандидат философских наук, доцент Департамента теории и практики преподавания математики, информатики, естественных наук, Школа педагогики, Дальневосточный федеральный университет. Сфера научных интересов: инновационное творчество преподавателя, интерактивные методы проведения учебных занятий, математическое моделирование и программирование. Автор более 70 опубликованных научных и методических работ. Электронная почта: kadeeva.oe@dvfu.ru
OKSANA E. KADEEVA Vladivostok, Russian Federation
Ph.D. of Philosophical Sciences, Associate Professor at the Department of the Theory and Practice of Teaching Mathematics, Computer Science, Natural Sciences, School of Pedagogics, Far Eastern Federal University. Research interests: innovative creativity of the teacher, interactive methods of conducting training sessions, mathematical modeling and programming. Author of more than 70 published scientific and methodological papers. E-mail address: kadeeva.oe@dvfu.ru
СЫРИЦЫНА ВАЛЕНТИНА НИКОЛАЕВНА Российская Федерация, город Владивосток
старший преподаватель Департамента теории и практики преподавания математики, информатики, естественных наук, Школа педагогики, Дальневосточный федеральный университет. Сфера научных интересов: электронное обучение в высшей школе, инновационная деятельность преподавателя, математическое моделирование и программирование. Автор более 50 опубликованных научных и методических работ. Электронная почта: versia_2000@mail.ru
VALENTINA N. SYRITSYNA Vladivostok, Russian Federation
Senior Lecturer at the Department of the Theory and Practice of Teaching Mathematics, Informatics, Natural Sciences, School of Pedagogy, Far Eastern Federal University. Research interests: e-learning in higher education, teacher innovation, mathematical modeling and programming. Author of more than 50 published scientific and methodological papers. E-mail address: versia_2000@mail.ru
ИЛЬЧЕНКО ОЛЕГ ЮРЬЕВИЧ
Российская Федерация, город Владивосток
студент Школы педагогики, Дальневосточный федеральный университет. Сфера научных интересов: единый государственный экзамен по физике и информатике, математическое моделирование и программирование. Электронная почта: ilchenkoleg01@gmail.com
I OLEG Yu. ILCHENKO
Vladivostok, Russian Federation
Student of the School of Pedagogy, Far Eastern Federal University. Research interests: unified state exam in physics and informatics, mathematical modeling and programming. E-mail address: ilchenkoleg01@gmail.com
Аннотация. Рассматриваются предметные и методические аспекты единого государственного экзамена по информатике. Анализируются особенности решения сложной части заданий единого государственного экзамена по программированию на языке Python, приводятся примеры решения таких заданий.
Ключевые слова: единый государственный экзамен, программирование на языке Python, среда Jupiter Notebook, методический подход к заданиям единого государственного экзамена, программирование.
Abstract. Subject and methodological aspects of the unified state examination in informatics are considered. The peculiarities of solving a complex part of the exam tasks in Python programming are analyzed, examples of solving such tasks are given.
Keywords: unified state exam, Python programming, Jupiter Notebook environment, methodical approach to tasks USE, programming.
это всегда способствует развитию творчества и самостоятельности. Главное для обучающегося — научиться читать программный код, «прогонять» первые итерации цикла у себя в голове, чтобы понимать, как работает программа, как меняются переменные в ней. Понимание работы программы — это залог успешной сдачи экзамена. Задачи 6, 16, 17, 22 ЕГЭ не требуют углубленного знания языка програм-
мирования, в этих программах не содержится много ступеней ветвлений, не нужно работать с файлами. Умение работать со строками, массивами, понимание условного оператора и циклов — это тот багаж знаний, которым должен владеть обучающийся, чтобы успешно справиться с такими задачами. Задания, которые мы рассмотрим в данной статье, требуют от обучающегося знания алгоритмов
сортировки, нескольких языков программирования, высокого уровня владения навыками программирования, развитого логического мышления [2; 4].
Рассмотрим подходы к решению задач ЕГЭ по информатике при помощи языка программирования Python. В качестве примеров взяты задания из официальной демовер-сии ЕГЭ по информатике за 2021 год на сайте Федерального инсти-
тута педагогических измерений (ФИПИ) и пособия К.Ю. Полякова [5; 6].
Тема: Анализ работы программы с циклом.
Требования к обучающимся:
• знать основные конструкции языка Python: объявление переменных; оператор присваивания; оператор вывода; циклы;
• уметь читать программу, выполнять программу; определять переменную, от преобразования которой зависит количество шагов цикла; уметь определять по программе количество требуемых шагов цикла; различать входные и выходные данные.
Определите, при каком наибольшем введенном значении переменной $ программа выведет число 64. Для Вашего удобства программа представлена на четырех языках программирования (см. Рисунок 1).
Решение (теоретическое рассуждение):
1. Переменная $ получает свое значение путем ввода пользователем.
2. Далее переменная $ переопределяется. Как было рассмотрено ранее, операция «//» является целочисленным делением, в нашем случае $ нацело делится на число 10.
3. Переменная n получает значение 1.
5. На вывод подается переменная n.
По условию задачи, переменная n в конце работы программы имеет значение 64, из этого следует: 64 = 26, для того чтобы получить n = 64, необходимо выполнить тело цикла 6 раз. Максимальное число, при котором цикл выполнится
последний раз — 50. А следующий шаг — 55 — уже не пройдет. Тогда ответ — 55 — 5 • 6 = 25. Так как на первом шаге берется целое от деления на 10, то третью цифру нужно взять максимально возможную — 9. Путем теоретического исследования получили ответ: наибольшее значение переменной s=259.
Решение с помощью программы на Python:
Запустим среду программирования на Python Jupyter Notebook и наберем код программы. Величину переменной s получить можно подбором, но лучше всего найти закономерность, для этого:
1. Вводим сначала 1 — на выводе получаем 2048, затем вводим 100 -на выводе получим 512, исходя из этого, можно увидеть, что при увеличении s значение n уменьшается (см. Рисунок 2).
2. Пробуем увеличить s еще в 2,5 раза, на выходе получаем 64, то есть искомое значение. Но задача состоит в том, чтобы найти наибольшее значение s, поэтому увеличивая вводимое значение на 1, выясним, что при 259 программа выводит значение 64, а при 260 -32 (см. Рисунок 3).
3. Ответ найден. Наибольшее значение переменной $, при котором n = 64, равно 259.
Тема: Рекурсия. Рекурсивные процедуры и функции
Требования к обучающимся:
• знать: условие окончания рекурсии, то есть значения параметров функции, для которых значение функции известно или вычисляется без рекурсивных вызовов; рекуррентную формулу (или формулы), с помощью которых значение функции для заданных значений параметров вычисляется через значение (или значения) функции для других значений параметров (то есть, с помощью рекурсивных вызовов);
• уметь реализовать рекуррентную функцию на Python^, например,
F(n) = n + 1 + F(n-1), при n> 1
На языке программирования это будет выглядеть так (см. Рисунок 4): Пример задачи: Алгоритм вычисления функции F(n) задан следующими соотношениями: F( n) = 1 при n = 1 F(n) = n + F(n-1), если n четно, F(n) = 2-F(n~2), если n> 1 и n нечетно.
Чему равно значение функции F (26)? Решение задачи:
Пусть известно значение n. Построим массив а, так чтобы значение элемента a[n] совпадало со значением F(n). Учитывая, что в Python нумерация элементов массива начинается с нуля, будем использовать фиктивный нулевой элемент. Согласно условию, в первый элемент нужно записать число 1 («F(n) = 1 при n = 1»): а = [0,1], затем перебираем в цикле все значения индексов элементов, начиная с 2 и до n включительно, вычисляя для каждого значение функции. Фактически сначала вычисляется F(2) и записывается в элемент массива а[2], затем находим F(3) и записываем в элемент массива а[3] и так далее (см. Рисунок 5).
Стоит заметить, что вместо рекурсивных вызовов здесь используются уже готовые значения F(n) для меньших значений n, ранее записанные в массив а. Теперь можно построить функцию, которая возвращает значение a[n], и вызвать print(F(26)) (см. Рисунок 6): Получили ответ. Задача решена.
Задача 17 Тема: Перебор целых чисел на заданном отрезке. Проверка делимости
Требования к обучающимся:
• знать основные принципы построения программы на языке программирования;
• уметь использовать простой перебор без оптимизации; уметь пользоваться электронными таблицами.
РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON
Паскаль Python Алгоритмический язык
Рисунок 1. Пример программы с циклом [6]
s = int(inputQ) s = int
S = S // 10 S = 5 // 10
5 = 5 + 5 s = s + 5
n = n * 2 n = n * 2
Рисунок 2. Подбор значений
s = int(input()) S = S // 10 n = 1
s = s + 5 n = n * 2 print(n)
s — int(input()) s = s // 10 n = 1
s = s + 5 л = n * 2 print(n)
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
Рисунок 3. Решение задачи 6
if n == 1: return 1
Рисунок 4. Рекуррентная функция
a.append( i + a[i-l] ) else:
for i in rarige(2, n+1):
Рисунок 5. Начало программы Рисунок 6. Решение задачи
Рассмотрим задачу в общем виде. Пусть необходимо перебрать все целые числа на отрезке [а; Ъ] и определить, для скольких из них выполняется некоторое условие. Общая структура цикла перебора на языке Python записывается так, как показано на Рисунке 7.
Проверка делимости числа n на число x осуществляется при помощи операции взятия остатка от деления n на x: если остаток равен 0, число n делится на x нацело. Данная проверка в Python осуществляется так, как показано на Рисунке 8. Пример задачи: Рассматривается множество целых чисел, принадлежащих числовому отрезку(1016; 7937), которые делятся на 3 и не делятся на 7, 17, 19, 27. Найдите количество таких чисел и максимальное из них. В ответе запишите два целых числа: сначала количество, затем максимальное число. Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц. Решение задачи: Проанализируем условие: интересующие нас числа делятся на 3 и не делятся на такие числа, как 7, 17, 19 и 27 (это будет являться условием проверки). Перебор чисел выгоднее осуществлять в порядке возрастания, так как последнее найденное число будет являть максимальным из перебранного количества. (Это также требуется найти в задаче. В случае, когда требуется найти наименьшее число, перебор начинается в порядке убывания).
Составим программу на Python (см. Рисунок 9):
Решение найдено. 1568 — такое количество чисел удовлетворяет критерию поиска (в условном операторе if), 7935 — максимальное число из количества удовлетворяющих условию чисел. Ответ указан в Рисунке 8.
Задача 22 Тема: Анализ программы, содержащей подпрограммы, циклы и ветвления.
Требования к обучающимся:
• знать операции деления с остатком (%) и целочисленного деления (//);
• уметь выполнять работу операторов присваивания, циклов в языке программирования Python.
Ниже на четырех языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4, а потом 5 (см. Рисунок 10).
Проанализируем программу. Переменная x получает значение путем ввода пользователем. Переменным Q и L присваиваются значения 9 и 0 соответственно. Далее идет цикл While, рассмотрим его (см. Рисунок 11).
Так как переменная L изначально равна нулю, а затем с каждой итерацией в цикле увеличивается на 1, она несет функцию счетчика повторения цикла. На каждой итерации цикла из переменной Q вычитается x до тех пор, пока x не станет меньше Q. Фактически определяется, сколько раз «поместится» Q в x. Из данных рассуждений можно понять, что данный цикл — это операция деления, при этом, как только цикл завершится, переменная L будет нести значение частного, а переменная x -остаток от деления введенного значения Q.
как делили на 9, то искомое число будет равно 5 x 9 + 4 = 49. Получили ответ: при вводе числа 49 этот алгоритм печатает два числа: 4 и 5. Пробуем запустить программу (см. Рисунок 12).
Логика приведенных выше рассуждений оказалась верной, при вводе пользователем числа 49, выводятся числа 4 и 5.
Если не удалось провести анализ программы, можно найти альтернативное решение. В данном случае найдем подходящее значение перебором (или как говорят программисты «bruteforce» — методом «грубой силы»). Для этого осуществим следующее:
1. Строку, где вводится x, удаляем [x = int (input ())].
2. Введем переменную x0 и основную часть программы заключим в цикл (можно использовать цикл с параметром, если есть уверенность, что максимальное значение точно не больше, например, 500). Результат представлен на Рисунке 13.
Далее строки, в которых выводятся результаты заменяем на проверку нужного нам случая. По условию задачи должны получиться числа 4 и 5, поэтому, если должны быть выведены числа 4 и 5, выводим на экран переменную x0 (см. Рисунок 14).
В итоге получим полностью переделанную программу (см. Рисунок 15).
Если запустить данную программу, она даст результат 41 и 49, что соответствует минимальному и максимальному подходящему числу. В условиях данной задачи ответ будет 49. Задача решена.
Тема: Обработка символьных строк
Требования к обучающимся:
• знать конструкции языка Python; знать несколько способов решения подобных задач;
• уметь читать строку из файла (программно); уметь работать с конструкцией with — as. (см. Рисунок 16).
РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON
for л in range (a, b+1): if условие выполнено: value+= 1 print (value)
# переменная, которая запоминает количество чисел
# цикл с параметром, для перебора заданного диапазона
# условный оператор, для отбора значений
# или же уа1ие^а1ие+1
# вывод количества чисел
Рисунок 7. Общая структура перебора
print («Не делится»)
#операция «%» — взятие остатка от деления п на х #если п нацело делится на х>получаем ответ
# если п нацело не делится на х, получаем ответ
Рисунок 8. Проверка делимости числа n на число x
value_sum = 0 ^переменная, служащая для записи кол-ва чисел удовлетворяющих условию
value^max = 0 ^переменная, служащая для записи максимального значения числа в диапазоне
for n in range(1016, 7937+1): #цикл с параметром, где способ range задает нужный диапазон
valuersurn += 1 # аналогично, что и vaLue_sum=vaLue_$um+l
print(value_sum, value_max) # вывод переменных, являющихся решением задачи
Рисунок 9. Решение задачи 17
#include usingnamespacestd; x=int(input())
ЗаPython’ил ЕГЭ на сотку или почему 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 - позиция. Позиция рассчитывается по таблице:
