- Зачем постигать тайны посимвольного двоичного преобразования?
— Чтобы научиться решать задание №5 ЕГЭ Информатика
Задание №5 — это упражнение базового уровня сложности. Оно нацелено на проверку навыков экзаменуемого в выполнении и анализе простых алгоритмов.
🕒Время на выполнение задания = 4 минуты. Правильный ответ приносит 1 балл.
🔥Если вы готовитесь к ЕГЭ по информатике и ищете эффективные способы решения заданий, эта статья для вас!
Условие задачи →
Рассмотрим подробно все пункты, указанные в условии ⤵
➀ На вход алгоритма подаётся натуральное число N
Натуральные числа — это числа, которые используются для счета предметов или вещей.
Натуральные числа начинаются с 1, 2, 3, ... и до бесконечности (+∞).
- Как получить натуральные числа в Python?
— Использовать цикл for()
Цикл for() предназначен для перебора значений из заданного диапазона. Цикл for() предоставляет возможность получить все необходимые варианты и выбрать подходящий.
→ Ручной поиск решений займет много времени, поскольку натуральные числа бесконечны. Поэтому необходимо написать программу, которая сможет автоматически подбирать необходимые значения.
- Создание цикла for() в Python
Для написания алгоритма вы можете использовать любую удобную среду (IDLE, PyCharm или Visual Studio). Для начинающих программистов рекомендую использовать именно IDLE.
Более детально с принципами работы цикла for() вы можете ознакомиться в данном материале ⤵
📈 Первый этап программы пройден. Запущен цикл for() для перебора натуральных значений переменной N.
→ Запишем первую строчку кода в итоговое решение ⤵
📍Основная программа:
⚠ Почему диапазон значений для range() начинается с 1?
— По условию задачи, на вход алгоритма поступает натуральное число. Натуральные числа начинаются с 1, значит и range() тоже должен начинаться с 1.
⚠ Почему второе число из диапазона равно 100?
Вторая граница для range() подбирается интуитивно. Если программа написано верно, ошибок нет, а ответ не выводится, то необходимо увеличивать диапазон:
range(1, 100) → range(1, 1000) → range(1, 10000) и так далее.
Переходим к следующему этапу →
➁ Строится двоичная запись числа N
Двоичная запись числа — это способ представления чисел, используя только две цифры: 0 и 1
- Как перевести в двоичную систему счисления (2 СС) в Python?
— Использовать встроенную функцию bin()
— Использовать f - строки
📥Как работает функция bin()?
- Вы задаёте целое число. Это число будет преобразовано в двоичный формат.
- Python применяет функцию bin() к этому числу. Функция возвращает строку, которая начинается с префикса '0b'.
- Как убрать '0b' перед числом после перевода в 2 СС?
— Использовать срезы в Python
Срезы — это удобный способ работы с последовательностями (строками). Они позволяют разбивать строки на необходимую длину и извлекать нужные символы. Пример работы срезов в Python ⤵
📥Как работают f - строки для перевода в 2СС?
Необходимо перед строкой поставить букву f или F. Внутри строки используются фигурные скобки {} для вставки значений переменных или выражений.
Пример использования f - строк в Python ⤵
При переводе в другие системы счисления с помощью f - строк, перед строкой не появляются префиксы '0b', '0o' или '0x'. Использование срезов не требуется. Вы сразу получаете готовый ответ.
📍Основная программа:
В решении будет использоваться метод bin(). Вы можете использовать f - строки, вместо bin(). При правильном переводе в 2 СС на результат это не повлияет.
- 2 способа перевода в 2 СС bin() ➕ f - строки ⤵
⚠ Для чего вводится новая переменная (х)?
— Для упрощения работы и лучшего понимания кода.
Результат перевод в двоичную СС сохранится в переменной (x). В дальнейшем все операции будут выполняться с использованием переменной (x). Без участия переменной (n).
❗ПРОВЕРКА КОДА
Каждая новая строка в программе должна быть логически обоснованной и обязательно пройти проверку.
В алгоритме появился новый метод — bin(). Для проверки его корректности запустите программу на ограниченном диапазоне чисел, например, от 9 до 16.
Обязательно выводите все промежуточные результаты с помощью функции print() →
⚠ Что делать с функцией print() после проверки кода?
— Функцию print() не обязательно удалять из программы. Можно просто закомментировать эту строку и дальше продолжить создавать код
- Что значит (#) в Python?
— "Хэштег" закрывает код. Python просто проигнорирует данную строку.
☑ На данном этапе программа работает верно
Следующий этап →
➂ Складываются все цифры двоичной записи числа
— необходимо найти сумму всех цифр цифр числа
Например, дано число х = 1010, сумма всех его цифр будет равна: 1 + 0 + 1 + 0 = 2
Перед созданием алгоритма на Python важно ответить на некоторые вопросы:
- Какой тип данных у переменной (n)?
— После запуска цикла for() переменная (n) будет принимать натуральные значения
n = 1, 2, 3, 4, 5 ... 100 →
Все указанные значения — целые числа с типом (int)
Каждый проход цикла for() переменная (n) будет принимать новое значение. Каждое новое значение будет иметь целый тип данных (int) ⤵
- Что такое int()?
— Тип данных в Python. Используется для работы с целыми числами.
Тип переменной определяется автоматически при присваивании ей определенного значения
- Какой будет тип переменной (n) после перевода в 2 СС?
- Переменная (n) останется целого типа (int).
- Переменная (х) будет строчного типа. Так как функция bin() возвращает результат в виде строки.
На следующем этапе программы число (n) переводится в 2 СС с помощью встроенной функции bin(). Результат этого перевода записывается в переменную (х)
n = (1 .. 100) → x = bin(n) → x = ('1', '10', '11' ... )
❗Результат перевода переменной (n) был записан в переменную (x)
➡ значит, нужно НАЙТИ СУММУ ЦИФР ПЕРЕМЕННОЙ Х
- Как подсчитать сумму цифр в переменной (х)?
— Использовать метод count()
- Почему удобно использовать именно метод count()?
— Переменная (х) имеет строчный тип (str) и состоит только из 0 и 1
Метод count в Python помогает узнать, сколько раз встречается какой-либо символ внутри строки или другого набора данных.
- Как подсчитать сумму цифр с помощью метода count()?
— Чтобы подсчитать сумму цифр строки с помощью метода count(), нужно количество символов умножить на сам символ.
Чтобы понять как использовать count() для подсчёта суммы цифр в строке, рассмотрим следующий пример:
📍Теперь необходимо добавить метод count() в основную программу:
⚠ Зачем в программе новая переменная sum1?
— Для сохранения результата в отдельной переменной и последующей работы с этой переменной (sum1)
❗ПРОВЕРКА
На экран необходимо вывести результаты всех предыдущих действий:
- Перебор натуральных значений для переменной (n)
- Перевод (n) в 2 СС и последующая запись в переменную (x)
- Подсчет суммы цифр в переменной (x) и запись в переменную (sum1)
☑ Программа работает верно
Переходим к следующему этапу →
➃ Остаток от деления суммы на 2
Как определить остаток от деления?
→ Необходимо взять натуральное число и разделить его на другое число. Если число разделилось полностью (без остатка), то остаток будет равен 0. Если число полностью не делится (с остатком), то необходимо выписать остаток.
- 4 : 2 = 2 (остаток 0)
- 5 : 2 = 2 (остаток 1)
- 8 : 3 = 2 (остаток 2)
Для получения остатка от деления в Python нужно использовать данный оператор:
- % — остаток от деления в Python
Пример кода для понимания работы оператора (%) в Python ⤵
На данном этапе никаких изменений в основную программу вноситься не будет. Так как 4 этап — промежуточный, поэтому переходим к следующему этапу →
➄ Остаток от деления суммы на 2 дописывается в конец числа
Остаток от деления получен в пункте 4 с помощью оператора (%)
Теперь необходимо этот остаток записать в конец числа.
- Как записать выражение в конец числа?
— Использовать операцию конкатенации для строк
Конкатенация — это процесс соединения или объединения двух или более строк (или других элементов) в одну единую строку.
'+' – операция в Python, используется для конкатенации (объединения, склеивания) строк.
→ Представьте себе, что у вас есть две бумажки. На первой написано "Привет", а на второй – "мир". Если взять обе бумажки и склеить их вместе, то получится "Приветмир". Это и есть конкатенация: соединение двух строк в одну.
Теперь необходимо с помощью конкатенации приписать остаток от деления в конец числа ⤵
❗При попытке записать остаток от деления в конец числа, Python выдал ошибку
- Что означает данная ошибка?
- TypeError — Ошибка типа (в переводе с английского) или ошибка в типах переменных
- can only concatenate str (not "int") to str — можно только объединять str (не "int") в str (в переводе с английского)
Это значит, что вы пытаетесь выполнить действие не применимое для данных типов переменных. В Python нельзя складывать числа со строками. Это называется строгая типизация!
Складывать можно отдельно числа с числами (int) + (int) или строки со строками (str) + (str)
❗Увидели такую ошибку — обязательно проверьте тип каждой переменной
- Как исправить ошибку "TypeError"?
— Изменить тип переменной с (int) на (str)
Для изменения типа переменной с (int) на (str) нужно перед переменной записать служебное слово str() →
- str(имя_переменной)
Исправленный код программы:
❗Важные моменты ⤵
- Чтобы приписать (приклеить) цифру к другому числу необходимо использовать операцию конкатенации (+)
- Конкатенация работает только со строчным типом данных (str). Поэтому обе переменные должны быть строчного типа.
- Для добавления цифры справа следует сначала написать строку (переменную), затем использовать знак '+' и в конце записать ту цифру (переменную), которую вы собираетесь приписать.
📍Основная программа:
❗ПРОВЕРКА
Нужно удостовериться, правильно ли к числу добавляется остаток от деления суммы цифр на 2. Для этого на экран выводится значение переменной (х) сначала до добавления остатка, а затем после ⤵
☑ Программа работает верно
Переходим к следующему этапу →
➅ Над этой записью производятся те же действия
— справа дописывается остаток от деления суммы цифр на 2
- Над какой записью производятся действия?
— Над текущим значением переменной (х). Так как именно это переменная отображает текущий результат программы
- Какие действия?
— Вычислить сумму цифр переменной (х). Дописать справа к (х) остаток от деления суммы цифр на 2
- Как записать данный алгоритм на Python?
Рассмотрим пример → Пусть дана начальная строка: s = '11010'. В переменную (sm1) записывается сумма цифр строки (s): 1 + 1 + 0 + 1 + 0 = 3 →
→ Далее, к текущему значению переменной s = '11010' справа дописывается остаток от деления суммы (sm1 = 3) на 2:
s = '11010' + str(3 % 2) → s = '110101'
→ К текущему значению (s = '110101') применяются те же действия, только без создания дополнительной переменной для суммы цифр →
→ s = '110101' + str(s.count('1') % 2) → s = '110101' + '0' → s = '1101010'
📍Теперь необходимо реализовать данную идею и в основной программе:
- I этап
— Вычисление суммы цифр текущего значения (х) и запись в переменную (sum1)
- II этап
— Справа дописывается остаток от деления (%) суммы цифр (sum1) на 2
❗ПРОВЕРКА
Вывод на экран результатов всех ранее выполненных операций после 6 этапа ⤵
☑ Программа работает верно
Следующий этап →
➆ Полученная таким образом запись является двоичной записью искомого числа R
На данном этапе изменений в решении не будет. Только анализ текущей ситуации.
Как написано в условии 🆚 Как записать в Python
❗Важный момент ⤵
Необходимо ввести новую переменную (r) — десятичная запись числа (n)
Следующий этап →
➇ Укажите минимальное число R, которое превышает 43 и может являться результатом работы алгоритма
Пояснение к данному пункту условия ↓
- Что представляет собой число R?
— Десятичная запись числа (n)
После выполнения всех операций с числом (n) его следует преобразовать в десятичную систему счисления, что и будет соответствовать числу R.
- Минимальное число?
— Необходимо подобрать наименьшее значение для числа R
- Что значит "может являться результатом работы алгоритма"?
— Значение R обязательно должно быть получено путем преобразования переменной (n) в десятичную систему счисления
- Как перевести число в 10 СС?
— Использовать встроенный метод int()
- Как работает метод int() в Python?
Синтаксис: int(x, base)
- x — значение, которое нужно преобразовать в целое число (str)
- base — основание системы счисления (от 2 до 36)
📥Пример перевода из 2 СС в 10 СС с помощью метода int() ⤵
❗Важное правило:
Для корректного перевода в 10 СС с помощью встроенной функции int(), число должно быть строчного типа (str)
📍Теперь необходимо реализовать данный алгоритм в основной программе:
Следующий этап →
➈ Которое превышает 43
Что нужно написать в Python, чтобы определить, что число превышает 43?
Прежде чем ответить на данный вопрос ↑, необходимо вспомнить предыдущие моменты в решении:
- В начале программы был получен диапазон натуральных чисел: range()
- Далее эти числа переводятся в 2 СС: bin()
- Потом считается сумма цифр каждого числа и остаток от деления на 2 этой суммы записывается в конец числа: count() + %
- Затем эти действия повторяются еще раз (сумма цифр + остаток от деления на 2 в конец числа): count() + %
- Наконец, данное число переводится в 10 СС: int()
❗ И именно ЭТО число (в 10 СС) должно быть больше, чем 43 →
Что нужно написать в Python, чтобы определить, что число превышает 43?
— Использовать условие (if)
С помощью условия (if) можно написать код, который сам бы отсеивал не нужные варианты.
- Что значит if в Python?
— Это оператор, позволяющий выполнить определённый участок кода только при соблюдении условий.
✔ Если условие истинно (True), то программа выполнит код, находящийся внутри блока if.
✖ Если условие не выполняется (False), код внутри блока if будет пропущен
❗Если текущее число больше, чем 43, то оно подходит. Если нет — алгоритм продолжит дальше искать необходимое число
📍Остается добавить проверку на условие в основной алгоритм и решение готово →
🔥Итоговая программа
Решение Задание №5 ЕГЭ "Посимвольное двоичное преобразование" ⤵
👏 Поздравляю! Получен верный ответ и программа работает без ошибок.
Удачи!