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

Я разработал <b><i>программу для перевода чисел из десятичной системы счисления в двоичную</i></b>. Проведя тестирование на нескольких числах, я получил удовлетворительные результаты. Однако у меня есть сомнения: <b>могут ли существовать числа, для которых перевод будет выполнен неправильно?</b><br/><br/> Кроме того, если у вас есть <b>замечания</b> по написанному коду, буду признателен за ваши комментарии.<br/><br/><pre><code class="cs">using System;

namespace ConsoleApp
{
    class Class
    {
        static void Main(string[] args)
        {
            BinaryTranslation(10);
        }

        static void BinaryTranslation(int number)
        {
            List&lt;int&gt; binar = new List&lt;int&gt;();

            int quotient = 1;

            while(quotient != 0)
            {
                if(number % 2 == 1)
                {
                    number -= 1;

                    binar.Add(1);
                }
                else
                {
                    binar.Add(0);
                }

                quotient = number / 2;
                number = number / 2;
            }

            binar.Reverse();
            Console.WriteLine(string.Join("", binar));
        }
    }
}</code></pre>
  • 10 февраля 2025 г. 20:34
Ответы на вопрос 4
Ваш код для перевода числа из десятичной системы счисления в двоичную содержит несколько аспектов, которые можно улучшить. Давайте разберём основные моменты:

1. **Корректность перевода**:
   Ваш алгоритм должен корректно переводить десятичные числа в двоичную систему, но код немного усложнён. Обычно используется более простой и понятный подход.

2. **Использование списка**:
   У вас используется `List<int>` для хранения двоичных цифр, и вы используете реверс, чтобы получить правильный порядок. Это может быть эффективно, но применение других подходов уменьшит сложность кода.

3. **Проблемы с переменными**:
   Переменная `quotient` не является обязательной для данного алгоритма. Ваша функция может быть упрощена.

4. **Улучшение кода**:
   Можно использовать строку для построения двоичного представления, что избавит от необходимости реверса.

Вот пример исправленного кода:

```csharp
using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryTranslation(10);
        }

        static void BinaryTranslation(int number)
        {
            if (number == 0) // Обработайте случай нуля
            {
                Console.WriteLine(0);
                return;
            }

            string binary = "";

            while (number > 0)
            {
                binary = (number % 2) + binary; // Обращаем порядок
                number /= 2;
            }

            Console.WriteLine(binary);
        }
    }
}
```

### Основные изменения:
- Убрана ненужная переменная `quotient`.
- Вместо списка используется строка для сборки двоичного представления.
- Добавлена обработка случая, когда передано число 0 (вывод 0).

### Заключение:
Ваш код может корректно выполнять перевод, однако краткость и элегантность важны. С несущим подходом, случаем нуля и более простым составлением строки ваши функции будут работать быстрее и понятнее.
На отрицательных числах будет ошибка. 
Ну и проще можно сделать.
static void BinaryTranslation(int number)
{
    List<int> binar = new List<int>();
    do
    {
        binar.Add(number % 2);
        number /= 2;
    }
    while (number > 0);

    binar.Reverse();
    Console.WriteLine(string.Join("", binar));
}
Отрицательные числа
Учитывая, что метод не принимает отрицательные значения

Нет, согласно объявлению метода - расчитан. Но это можно все предусмотреть. Как и в объявлении метода, так и в обрабоке метода. И это бы как раз стоило переделать - т.е. или ограничить входные данные типом, или обработать ошибку.

Дальше. По красоте - метод должен возвращать бинарное представление, а дальше уже выводить в консоль или еще куда - это задача не метода.

Дальше. Честно я не понял зачем нужна переменная quotient. По моему можно без нее.

Ну и еще метод должен называться глаголом в идеале )
Похожие вопросы