@Relonir

Какое оформление предпочтительнее?

Нашел пару решения вот этого задания:

1. Получить с консоли значения трех целых чисел
2. Выбрать наибольшее из трех чисел c помощью if
3. Вывести на консоль
4. Сравнить на четность с помощью Switch
5. Проверить на размер < 100 с помощью быстрой проверки

Простите, что целых 5 кусков кода, но мне нужно для себя понять, как правильно оформлять код и разобрать уже код, чтобы понять все написанное там, хотя большая часть мне понятна.

1)
Console.WriteLine("Введите первое число");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите второе число");
int num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите третье число");
int num3 = Convert.ToInt32(Console.ReadLine());
int result = 0;
if (num1 > num2 && num1 > num3)
{
    result = num1;
    Console.WriteLine($"Наибольшее число {result} ");
}
else if (num2 > num1 && num2 > num3)
{
    result = num2;
    Console.WriteLine($"Наибольшее число {num2} ");
}
else
{
    result = num3;
    Console.WriteLine($"Наибольшее число {num3} ");
}
switch (result % 2)
{
    case 0:
        Console.WriteLine("Чётное число");
        break;
    default:
        Console.WriteLine("Не чётное число");
        break;
}
string FinalResult = result < 100 ? $"Число {result} меньше 100" : $"Число {result} больше 100";
Console.WriteLine("Результат: " + FinalResult);

2)
Console.WriteLine("Введите три числа:");
int num1 =
    Convert.ToInt32(Console.ReadLine());
int num2 =
    Convert.ToInt32(Console.ReadLine());
int num3 =
    Convert.ToInt32(Console.ReadLine());
int result = 0;
string MuchSmaller = " ";

if (!(num1 < num2) && (!(num1 < num3)))
{
    Console.WriteLine($"Наибольшее {num1}");
    result = num1;
}
else
{
    if (!(num2 < num1) && (!(num2 < num3)))
    {
        Console.WriteLine($"Наибольшее {num2}");
        result = num2;
    }
    else
    {
        if (!(num3 < num1) && (!(num3 < num2)))
        {
            Console.WriteLine($"Наибольшее {num3}");
            result = num3;
        }
    }
}
switch (result % 2)
{
    case 0:
        Console.WriteLine($"Число {result} четное");
        break;
    default:
        Console.WriteLine($"Число {result} не четное");
        break;
}

MuchSmaller = result < 100 ? "меньше" : "больше";
Console.WriteLine($"Число {result} {MuchSmaller} чем 100");


3)
int a, b, c, max;
Console.WriteLine("Введите первое число:");
while (!int.TryParse(Console.ReadLine(), out a)) // Проверка того, что ввели именно число
{
    Console.WriteLine("Ошибка ввода! Введите целое число");
}
Console.WriteLine("Введите второе число:");
while (!int.TryParse(Console.ReadLine(), out b))
{
    Console.WriteLine("Ошибка ввода! Введите целое число");
}
Console.WriteLine("Введите третье число:");
while (!int.TryParse(Console.ReadLine(), out c))
{
    Console.WriteLine("Ошибка ввода! Введите целое число");
}
Console.WriteLine("---------------------------");
Console.WriteLine("Вот ваши числа: {0}, {1}, {2}", a, b, c);
Console.WriteLine("---------------------------");
Console.WriteLine("Теперь ищем наибольшое из трёх чисел");
Console.WriteLine("---------------------------");

if (a > b && a > c)
{
    Console.WriteLine("The biggest number is {0}", a);
    max = a;
}
else if (b > a && a > c)
{
    Console.WriteLine("The biggest number is {0}", b);
    max = b;
}
else
{
    Console.WriteLine("The biggest number is {0}", c);
    max = c;
}

Console.WriteLine("---------------------------");
Console.WriteLine("Давайте проверим на четность");
Console.WriteLine("---------------------------");

switch (max % 2)
{
    case 0:
        Console.WriteLine("Число четное");
        break;
    default:
        Console.WriteLine("Число нечетное");
        break;
}
string Result = max < 100 ? $"Число {max} меньше 100" : $"Число {max} больше 100";
Console.WriteLine("Result: " + Result);

4)
Console.WriteLine("Введите 3 числа: ");
int q = Convert.ToInt32(Console.ReadLine());
int w = Convert.ToInt32(Console.ReadLine());
int e = Convert.ToInt32(Console.ReadLine());

if (q > e && q > w)
{
    Console.WriteLine(q + " самое большое число");
    switch (q % 2 == 0)
    {
        case (true):
            Console.WriteLine(q + " четное число");
            break;

        case (false):
            Console.WriteLine(q + " нечетное число");
            break;

    }
    Console.WriteLine(q < 100 ? "Меньше 100 " : "Больше 100");
};
if (w > e && w > q)
{
    Console.WriteLine(w + " самое большое число");
    switch (w % 2 == 0)
    {
        case (true):
            Console.WriteLine(w + " четное число");
            break;

        case (false):
            Console.WriteLine(w + " нечетное число");
            break;
    }
    Console.WriteLine(w < 100 ? "Меньше 100 " : "Больше 100");
};
if (e > q && e > w)
{
    Console.WriteLine(e + " самое большое число");

    switch (e % 2 == 0)
    {
        case (true):
            Console.WriteLine(e + " четное число");
            break;

        case (false):
            Console.WriteLine(e + " нечетное число");
            break;

    }
    Console.WriteLine(e < 100 ? "Меньше 100 " : "Больше 100");
};

5)
Console.WriteLine("Введите первое число: ");
int inputOne = int.Parse(Console.ReadLine());

Console.WriteLine("Введите второе число: ");
int inputTwo = int.Parse(Console.ReadLine());

Console.WriteLine("Введите третье число: ");
int inputThree = int.Parse(Console.ReadLine());

//Ищем максимальное значение с помощью if
if (inputOne > inputTwo && inputOne > inputThree)
{
    Console.WriteLine("Первое число оказалось больше, и его значение = " + inputOne);
}
else if (inputTwo > inputOne && inputTwo > inputThree)
{
    Console.WriteLine("Второе число оказалось больше, и его значение = " + inputTwo);
}
else if (inputThree > inputOne && inputThree > inputTwo)
{
    Console.WriteLine("Третье число оказалось больше, и его значение = " + inputThree);
}
else
{
    Console.WriteLine("Не получается найти максимальное значение");
}

Console.WriteLine("\nЛог чисел: ");
//Проверяем больше или меньше ста число
if (inputOne > 100)
{
    Console.WriteLine("Первое число больше ста");
}
else
{
    Console.WriteLine("Первое число меньше ста");
}

if (inputTwo > 100)
{
    Console.WriteLine("Второе число больше ста");
}
else
{
    Console.WriteLine("Второе число меньше ста");
}

if (inputThree > 100)
{
    Console.WriteLine("Третье число больше ста");
}
else
{
    Console.WriteLine("Третье число меньше ста");
}

//Проверяем на четность
Console.WriteLine("\nЛог четности чисел: ");
switch (inputOne % 2)
{
    case 0:
        Console.WriteLine("Первое число делится на 2");
        break;

    default:
        Console.WriteLine("Первое число не делится на два");
        break;
}
switch (inputTwo % 2)
{
    case 0:
        Console.WriteLine("Второе число делится на 2");
        break;

    default:
        Console.WriteLine("Второе число не делится на два");
        break;
}
switch (inputThree % 2)
{
    case 0:
        Console.WriteLine("Третье число делится на 2");
        break;

    default:
        Console.WriteLine("Третье число не делится на два");
        break;
}
  • Вопрос задан
  • 1023 просмотра
Решения вопроса 1
FoggyFinder
@FoggyFinder
Общие замечания (ко всем кусочкам):

Нет разделения на функции (проблема: дублирование кода, усложняет восприятие)

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

Вам будет намного понятнее что выполняет код - ваш взгляд охватит несколько вызовов и не будет отвлекаться на конкретные детали реализации.

Общие проблемы закончились, теперь сверху вниз:

1 кусок:

1. [ Критично ] Нет проверки на корректность ввода. Пользователь может случайно ввести букву и метод Convert.ToInt32 выбросит исключение. Довольно неприятно.

2. Нарушение соглашения об именовании для переменной FinalResult

3. Необязательная инициализация переменной FinalResult при объявлении.

4. [ Субъективно ] Проблемы с форматированием: тернарный оператор занимает слишком много места для одной строки

5. [ Может рассматриваться как придирка ] Копипаст подход. Вывод сообщения можно вынести из if-ов в - он одинаков для всех случаев.

2 кусок:

1. [ Критично ] Аналогично предыдущему

2. Нарушение соглашения об именования для переменной MuchSmaller

3. Объявление и лишняя инициализация переменной MuchSmaller намного впереди реального использования.

4. Слишком сложные условные выражения.

5. Аналогично п.5 предыдущего примера.

3 кусок:

Здесь, ура!, нет основной проблемы которая встречается во всех остальных примерах.

1. Нарушение соглашения об именовании для переменной Result

2. Странная смесь английского и русского языка в информационных сообщениях

3. Странная смесь использования интернирования строк ($) и старого форматирования.

4 кусок:

1. [ Критично ] Нет проверки на корректность ввода. Пользователь может случайно ввести букву и метод Convert.ToInt32 выбросит исключение. Довольно неприятно.

2. [ Существенно ] Копипаст подход для проверки на четность.

3. Избыточные скобки в switch case

5 кусок:

1. [ Критично ] Нет проверки на корректность ввода. Пользователь может случайно ввести букву и метод Parse выбросит исключение.

2. Проблемы с названием переменных. inputOne

Итого:

3-ий вариант условно нормальный. Остальные хуже.

Упражнение:

Попробуйте написать свой вариант с учетом замечаний перечисленных выше =)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Zoominger
@Zoominger
System Integrator
Да все норм, кроме второго.
А этот кусочек странный:
Console.WriteLine("Введите 3 числа: ");
            int q = Convert.ToInt32(Console.ReadLine());
            int w = Convert.ToInt32(Console.ReadLine());
            int e = Convert.ToInt32(Console.ReadLine());
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы