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

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

#include <iostream>
#include <string>

using namespace std;

int main()

{
    const int SIZE = 12;
    int numbers[12] = { 0 };
    int value = 0;
    int counter = 0;
    int total = 0;
    int average = 0;
    int diffFromAvg = 0;
    int SENTINEL = -1;

    cout << "Please enter a positive number: " << endl;
    cin >> value;

    while ((counter < SIZE) && (value != SENTINEL))
    {
        total = total + value;
        numbers[counter] = value;
        counter = counter + 1;

        if (counter != SIZE) {
            cout << "Please enter a positive number: " << endl;
            cin >> value;
        }
        if (counter > 0) {
            average = total / counter;
            for (int i = 0; i <= SIZE; i--)
            {
                diffFromAvg = numbers[i] - average;
                cout << "Number[i]: " << numbers[i] << " Difference from Average is " <<
                    diffFromAvg << endl;
            }
        }
        else {
            cout << "Processing incomplete. No values in the array." << endl;
        }
    }

    system("Pause");
    return 0;
}
0
hal 24 Окт 2018 в 02:21

2 ответа

Лучший ответ

Другой ответ тоже хорош. Я сохранил ваш цикл while (), но внес несколько изменений. Целесообразно еще немного отделить вашу обработку. Это может быть разбито на более мелкие функции

   #include <iostream>
#include <string>

using namespace std;

int main() {
    const int SIZE = 12;
    int numbers[12];
    int value = 0;
    int index;
    int SENTINEL = -1;

    index = 0;  // initialize here so you keep track of it
    while ((index < SIZE) && (value != SENTINEL)) {

        cout << "Please enter a positive number: " << endl;
        cin >> value;

        numbers[index] = value;

        index++; // increment index after assigning the array value
    }

    // Calculate the average
    int total = 0;
    for (int i = 0; i < SIZE; i++) {
        total += numbers[i];
    };
    int average = total / SIZE;

    cout << "Average is: " << average << endl;
    for (int i = 0; i < SIZE; i++) {
        int diffFromAvg = numbers[i] - average;
        cout << "Number[i]: " << numbers[i]
             << " Difference from Average is "
             << diffFromAvg << endl;
    }

    system("Pause");
    return 0;
}
0
Gardener 30 Окт 2018 в 02:11

Я предлагаю вам следовать модели IPO:

#include <cstdlib>
#include <iostream>
#include <iomanip>

int main()
{
    constexpr std::size_t max_numbers{ 20 };
    constexpr int sentinel{ -1 };

    int numbers[max_numbers];
    std::size_t num_count{};

    int sum{};

    // input:
    for (int current_value;
         num_count < max_numbers && std::cout << "Please enter a positive number: " &&
         (std::cin >> current_value) && current_value != sentinel;
         ++num_count)
    {
        numbers[num_count] = current_value;
        sum += current_value;
    }

    // proccess:
    if (!num_count) {
        std::cerr << "No input.\n\n";
        return EXIT_FAILURE;
    }

    auto mean{ sum / static_cast<double>(num_count) };

    // output:
    std::cout.put('\n');
    for (std::size_t i{}; i < num_count; ++i)
    {
        auto distance_to_mean{ numbers[i] - mean };
        std::cout << "Number " << std::setw(2) << i + 1 << ": " << std::setw(5) << numbers[i]
                  << '\t' << std::setw(5) << std::fixed << distance_to_mean << '\n';
    }
    std::cout.put('\n');
}
0
user10543939user10543939 23 Окт 2018 в 23:54
52959042