Дано целое число в двоичной системе счисления, т.е. последовательность цифр 0 и 1. составить программу перевода этого числа в восьмеричную систему счисления.

Поляков Евгений Александрович

Учитель информатики высшей категории

Проверено учителем

Для перевода числа из двоичной системы в восьмеричную наиболее эффективным методом является группировка разрядов. Поскольку 23=82 cubed equals 8, одна восьмеричная цифра в точности соответствует трем двоичным (триадам). Ниже представлен алгоритм и пример программы на языке Python, который реализует этот перевод без использования встроенных функций трансформации систем счисления (типа oct()), чтобы продемонстрировать логику процесса. Алгоритм перевода

  1. Дополнение нулями: Если количество цифр в двоичном числе не кратно трем, слева добавляются нули.
  2. Разбиение на триады: Число разбивается на группы по 3 цифры справа налево.
  3. Замена: Каждая триада заменяется соответствующей восьмеричной цифрой согласно таблице:
Двоичная триада Восьмеричная цифра
0000
0011
0102
0113
1004
1015
1106
1117

Программа на Python python

defbinary_to_octal(binary_str): # Убираем лишние пробелы и проверяем на корректность вводаbinary_str = binary_str.strip() # Дополняем строку нулями слева, чтобы длина была кратна 3remainder = len(binary_str) % 3if remainder > 0: binary_str = "0" * (3 - remainder) + binary_str octal_result = ""# Проходим по строке с шагом 3foriin range(0, len(binary_str), 3): triad = binary_str[i:i+3] # Вычисляем десятичное значение триады: # (первая цифра * 4) + (вторая * 2) + (третья * 1)decimal_value = int(triad[0]) * 4 + int(triad[1]) * 2 + int(triad[2]) * 1 octal_result += str(decimal_value) return octal_result # Пример использованияbinary_input = input("Введите двоичное число: ") print(f"Восьмеричное представление: {binary_to_octal(binary_input)}") 
Use code with caution.Разбор работы кода

  • Дополнение: Если вы введете 1011, программа превратит это в 001011.
  • Цикл: Функция берет первую триаду 001 и вычисляет: 022+021+120=10 center dot 2 squared plus 0 center dot 2 to the first power plus 1 center dot 2 to the 0 power equals 1. Вторая итерация: Берет 011 и вычисляет: 022+121+120=30 center dot 2 squared plus 1 center dot 2 to the first power plus 1 center dot 2 to the 0 power equals 3. Результат: Строка "13".

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

binary_val = "1011"octal_val = oct(int(binary_val, 2))[2:] 
Use code with caution.Здесь int(n, 2) переводит двоичную строку в десятичное число, а oct() — в восьмеричную строку (префикс 0o отсекается срезом [2:]). Я могу составить аналогичную программу на языках C++ или Pascal, если это необходимо для вашей учебной задачи.

Форма ответа

Ваш аватар