Как можно улучшить код на с++?

253
09 июля 2022, 12:20

Входные данные: 2 3 12 6 7 4 1 1 5 0 Нужно найти: Количество четных чисел в этой последовательности. сумму нечетных чисел и максимальное число.

Проверьте код, пожалуйста. Что можно изменить?

#include <iostream>
using namespace std;
int
main ()
{
  int a, k = 0, n = 0, max = 0;
  while (a != 0)
    {
      cin >> a;
      if (a % 2 == 0 && a > 0)
    {
      k++;
    }
      else
    {
      n = n + a;
    }
      if (a > max && a != 0)
    {
      max = a;
    }
    }
    cout << k << "\n";
    cout << n << "\n";
    cout << max;
}
Answer 1
  1. Имена переменных не несут никакого смысла и чтобы понять что какая буква обозначает нужно прочесть что с этой переменной делаются. Имена типа evenAmount, oddSum, nextNumber были бы лучше

  2. Отрицательные числа тоже могут быть четными и нечетными, в первом if'е второе условие нарушает условие задачи

  3. a != 0 в третьем условии не соответствует условию задачи. Так же все введенные числа могут быть отрицательными, что выдаст неправильный ответ на наибольшее число (так как стартовое значение, ноль, останется значением переменной max). Лучшим решением было бы инициализировать max наименьшим числом которое int может принимать: max = INT_MIN;, но для этого нужно будет подключить дополнительный заголовочный файл в начале программы #include <limits.h>

Answer 2

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

int number,
    ecount = 0,
    sum_of_odd = 0,
    // пока не известно какие числа будут
    max = std::numeric_limits<int>::min(); 
while (cin >> number  && number) {        
    if (max < number)
        max = number;
    if (number & 1)
        sum_of_odd += number;
    else
        ++ecount;
}
cout << ecount << '\n' << sum_of_odd << '\n' << max;
Answer 3
#include <iostream>
using std::cin, std::cout;
int main()
{
    int evenCount = 0, oddSum = 0, max = INT_MIN;
    for(int n; cin >> n && n;)
    {
        if (n%2 == 0) ++evenCount;
        else oddSum += n;
        if (n > max) max = n;
    }
    cout << evenCount << "\n";
    cout << oddSum << "\n";
    cout << max << "\n";
}
READ ALSO
Как это сделать в qt QTcpSocket и отдельный поток

Как это сделать в qt QTcpSocket и отдельный поток

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

285
Ошибка Floating point exception (core dumped)

Ошибка Floating point exception (core dumped)

Есть код для деления чисел на наибольший общий множитель:

333
Не могу перегрузить оператор +

Не могу перегрузить оператор +

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

231