Лабораторная работа по C#. Перевод числа из десятичной системы в двоичную

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Задача: написать рекурсивный метод перевода любого целого десятичного числа в двоичную систему, например, 78 = 01001110.

Теоретическая часть

Чтобы перевести число из десятичной системы в двоичную необходимо последовательно делить число на 2 до тех пор, пока частное от деления не станет равным нулю и, затем, переписать остатки от деления в обратном порядке. Например, возьмем число 78. Производим последовательное деление:

  • 78÷ 2 = 39 (в остатке 0);
  • 39 ÷ 2 = 19 (в остатке 1);
  • 19 ÷ 2 = 9 (в остатке 1);
  • 9 ÷ 2 = 4 (в остатке 1);
  • 4 ÷ 2 = 2 (в остатке 0);
  • 2 ÷ 2 =1 (в остатке 0);
  • 1 ÷ 2 = 0 (в остатке 1).

Записываем остатки от деления на 2 в обратном порядке и получаем следующую последовательность: 1001110. Это и будет двоичное представление числа 78.

Так как все промежуточные вычисления в рекурсивных методах сохраняются в стеке, то это позволяет нам без лишних действий по перестановке местами чисел 0 и 1 написать рекурсивный метод (в стеке действует правило «LIFO — Last In First Out» — последний пришел — первый вышел).

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

Развернутый вариант метода перевода десятичного числа в двоичную систему с использованием рекурсии:

static string DecToBin(int n)
{
    if (n == 0)    //базовый сценарий - выход из рекурсии 
        return "0";

    if (n / 2 > 0)
        return DecToBin(n / 2) + (char)(n % 2 + '0');
    else
        return ""+ (char)(n % 2 + '0');
}

Этот же метод можно записать с использованием тернарной операции (сокращенной проверкой) следующим образом:

static string DecToBin(int n)
{
    return (n / 2 > 0 ? DecToBin(n / 2) : "") + (char)(n % 2 + '0');
}

Проверим работу метода. Для этого мы можем воспользоваться обычным калькулятором. Переведем число 50 в двоичную систему:

50 в двоичной системе

Проведем теперь операцию перевода в двоичную систему, используя нашу программу:

static void Main(string[] args)
{
    Console.WriteLine(DecToBin(50));
}

Результат в консоли:

110010

Ведущие нули роли не играют, так как при переводе из двоичной систему в десятичную они никак не повлияют на результат.

Решение лабораторной работы (исходный код)

Ниже представлен исходный код программы для перевода любого числа из десятичной системы в двоичную:

namespace ConsoleApp1
{
    internal class Program
    {

        static string DecToBin(int n)
        {
            return (n / 2 > 0 ? DecToBin(n / 2) : "") + (char)(n % 2 + '0');
        }

        static void Main(string[] args)
        {
            Console.Write("Введите число. N = ");
            string str = Console.ReadLine();
            int n;
            if (int.TryParse(str, out n))
                Console.WriteLine(DecToBin(n));
            else
                Console.WriteLine("Ошибка ввода");
        }
    }
}

Результат работы программы:

Введите число. N = 50
110010

Итого

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

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии