Найти в Дзене
Просто решаем всё

Системы счисления просто (ЕГЭ тема 14)

Оглавление

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

Этот способ подойдет для решения вообще всех задач ЕГЭ, где так или иначе встречается перевод чисел, в частности мы решим пару задач из раздела 14 (Кодирование чисел. Системы счисления. Прямое сложение в системах счисления).

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

Допустим, нужно перевести число 123 в двоичную, восьмеричную, шестнадцатеричную и, например, еще и в 5-ричную системы счисления.

123(10) = ? (2)

123(10) = ? (8)

123(10) = ? (16)

123(10) = ? (5)

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

так вот, программа будет универсальной и почти одинаковой для всех этих случаев, но сначала двоичная

Двоичная система счисления

Быстрый перевод в двоичную систему счисления на Python
Быстрый перевод в двоичную систему счисления на Python

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

Результат в терминале, запись в столбик в обратном порядке
Результат в терминале, запись в столбик в обратном порядке

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

Ответ: 123(10) = 1111011(2)

Другие системы счисления

123(10) = ?(8)

123(10) = ?(16)

123(10) = ?(5)

А здесь даже и рассказывать нечего, потому что, как вы уже наверняка догадались, все то же самое только нужно заменить 2 на 8 или 16 или 5 (делим на основание системы, основание - это количество цифр, используемых в системе, например, двоичная - две цифры, восьмеричная - восемь, пятеричная - пять).

Восьмеричная

Перевод в восьмеричную систему счисления на Python
Перевод в восьмеричную систему счисления на Python
Результат в терминале
Результат в терминале

Ответ: 123(10) = 173(8)

Шестнадцатеричная

Перевод в шестнадцатеричную систему счисления на Python
Перевод в шестнадцатеричную систему счисления на Python
Результат в терминале
Результат в терминале

Здесь необходимо вспомнить, что двухразрядные числа (с двумя циферками) заменяются на буквы, 10 - А, 11 - В, 12 - С и так далее. Это используется во всех системах, основание которых больше 10, не только в шестнадцатеричной. Словом - видим двузначное число, заменяем буквой.

Ответ: 123(10) = 7B(16)

Пятеричная система

Перевод в пятеричную систему счисления на Python
Перевод в пятеричную систему счисления на Python
Результат в терминале
Результат в терминале

Ответ: 123(10) = 443(5)

И вот эти 4 строчки на Python уже можно использовать для решения задач, например:

Пример 1

Значение выражения 2 * 216^6 + 3 * 36^9 − 432 записали в системе счисления с основанием 6. Сколько цифр 5 содержится в этой записи?

-9
-10

Посчитаем количество цифр 5, их 14. Неудобно считать, правда? Давайте избавимся от ручного подсчета, но уже в примере 2

Пример 2

Сколько единиц содержится в двоичной записи значения выражения: 4^2020 + 2^2017 – 15?

-11

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

-12

Тем не менее, без сомнений добавляем все тот же наш универсальный перевод (само число в десятичной выводить больше не нужно, закомментируем эту строку с print(n))

-13

получили:

-14

обратите внимание на прокрутку, посчитать вручную при таком количестве строк не получится. Что же делать? Вариантов 2:

  1. Организовать удобный вывод в строку и автоматический подсчет (мы пока не знаем как и насколько долго это делается)
  2. Оставить все как есть и направить вывод консоли в текстовый файл (одна строчка)

выбор за вами, я начну со второго способа

просто пишу в терминале python 1.py > out.txt

-15

Важно!!! Мы должны находиться в рабочей папке нашей программы, у меня она называется 1.py и лежит в папке numeration. Перед началом работы в Python ВСЕГДА открывайте рабочую папку в редакторе кода (команда File -> Open Folder), а уж затем и файлы из нее. В редакторе VS Code при открытой папке полоса внизу редактора будет синей - это как раз и означает, что мы находимся в рабочей папке программы.

После выполнения команды в рабочей папке я получил файл out.txt с результатом работы программы, открою его в VS Code, нажму CTRL+F (поиск), введу единичку и сразу увижу ответ - 2015, готово!

-16

Ответ: 2015

(попробуйте проделать то же самое с примером 1)

А что если ну очень хочется выводить красиво и считать автоматически?

вот эта программка все сделает как нужно:

-17

ну и очевидно, она будет работать и для других задач - подставьте нужное основание m, нужное число (или выражение) n, замените в последних строках цифры, которые вам нужно подсчитать .

В заключение добавим, что существуют также функции, позволяющие в одну строку выполнить перевод в двоичную, восьмеричную и 16-ричную системы (но не другие!):

-18

Обратите внимание на префиксы 0b, 0o и 0x в результате (префикс - начало строки или переменной, обычно указывающее ее тип, здесь "0b" - binary - двоичная, 0o - octal - восьмеричная, 0x - hexadecimal - шестнадцатеричная система).

Их можно убрать:

-19

Конструкция [2:] в Python указывает (это называется "срез"), что первые два символа выводиться не будут, строка будет показана начиная с третьего символа.

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

Ну и наконец, обратный перевод:

-20

Думаю, здесь все понятно и без слов, обязательно используйте кавычки, а также только те цифры, которые есть в вашей системе! Помните, что в восьмеричной системе нет восьмерки! (только 0-7), в шестнадцатеричной нет шестнадцати (0-15) и даже в нашей родной десятичной нет цифры десять - цифры 0-9, а "10" - это число, записанное с помощью цифр 0 и 1! В пятеричной нет 5 и так далее.

Префиксы использовать можно (если вдруг ранее ответ получился с префиксом, избавляться от него необязательно):

-21

Скучное видео:

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

Всего доброго!

Наука
7 млн интересуются