Нахождение индекса массива в функции в C ++

Windows: Я полностью согласен с принятым ответом, но копаться в комментариях потребовалось некоторое время, чтобы добраться до мяса того, что мне было нужно. Я столкнулся с этой проблемой с помощью Reviewboard on Windows с помощью Bitnami. Чтобы дать ответ для окон, я использовал эту ссылку, упомянутую в комментариях:

Затем выполнили следующие команды:

easy_install pip
pip install python_ldap-2.4.20-cp27-none_win32.whl

(потому что у меня был python 2.7 и 32-битная установка)

easy_install python-ldap

-1
задан Gerarrd Urdaneta 30 March 2019 в 22:56
поделиться

2 ответа

Ваша функция searchHighestMonth () почти хороша. Но его цикл должен начинаться с 0, а не с 1, как в остальной части вашего кода. Цикл составляет от 0 до 11, если это полный год с 12 месяцами. Кроме того, это будет более читабельным, если вы сохраните текущее максимальное значение дождя в некоторой переменной.

int searchHighestMonth(double inchesofrain[], int monthcount){

    double maxrain = -1.0;
    int max = -1;

    for ( int i=0; i < monthcount; ++i) {
        if ( maxrain < inchesofrain[i] ) {
            maxrain = inchesofrain[i];
            max = i;
        }
    }
    return max;
}

Дополнительное замечание : В реальном производственном коде вы, вероятно, захотите использовать объекты std :: vector, которые сохраняют свой собственный размер, а не простые старые массивы в стиле C.

Дополнительное замечание : если вы хотите дать своему пользователю второй шанс ввести правильное неотрицательное значение количества осадков, вы должны сделать это до , включив это значение в сумму.

0
ответ дан jpmarinier 30 March 2019 в 22:56
поделиться

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

Переместить эту строку:

    int maxMonthPosition = searchHighestMonth(inchesOfRain, months);

После ввода для цикла.

Я пошел дальше и снова протестировал весь ваш код, перенаправив stdin (cin) из строки ввода, что я считаю очень полезным для тестирования, поэтому мне не нужно продолжать вводить. вот мой код:

#include <iostream>
#include <sstream>
#include <iomanip>

using namespace std;

double yearlyRainAverage(double[], const int);
double smallestRainfall(double [], const int);
double largestRainfall(double [], const int);

int searchHighestMonth(double inchesofrain[], int value) {

    int max = 0;
    for (int i = 1; i < value; ++i) {
        if (inchesofrain[max] < inchesofrain[i]) {
            max = i;
        }
    }
    return max;
}

int main() {
//#define testing  // comment this line out to use std::cin for input
#ifdef testing
    // code to get stdin input from a local buffer
    std::string input_string{"4 5 6 7 8 9 10 3 2 3 4 5"};
    std::streambuf *orig = std::cin.rdbuf();
    std::istringstream input(input_string);
    std::cin.rdbuf(input.rdbuf());

#endif

    const int months = 12;
    double inchesOfRain[months];
    double sumOfAllMonths = 0;

    for (int count = 0; count < months; count++) {
        cout << "Enter the rainfall (in inches) for month #" << count + 1 << ":  " << std::endl;
        cin >> inchesOfRain[count];

        sumOfAllMonths += inchesOfRain[count];

        while (inchesOfRain[count] < 0) {
            cout << "Rainfall must be 0 or more.\n";
            cout << "please re-enter: " << endl;
            cout << "Enter the rainfall (in inches) for month #" << count + 1 << ":  " << std::endl;
            cin >> inchesOfRain[count];
        }
    }

    int maxMonthPosition = searchHighestMonth(inchesOfRain, months);

    cout << fixed << showpoint << setprecision(2) << endl;

    cout << "the total rainfall for the year is " << sumOfAllMonths << " inches" << endl;
    cout << "the average is " << yearlyRainAverage(inchesOfRain, months) << " inches" << endl;

//    cout<<"The smallest amount of rainfall was: "<<smallestRainfall(inchesOfRain, 12)<<" inches ";
//    cout<<"in month "<<(monthPosition+1)<<endl;

    cout << "The largest amount of rainfall was: " << largestRainfall(inchesOfRain, 12) << " inches ";
    cout << "in month " << maxMonthPosition + 1 << endl;

#ifdef testing
    std::cin.rdbuf(orig);
#endif

    return 0;
}

double yearlyRainAverage(double inchesofrain[], const int months) {
    double sum = 0;
    for (int i = 0; i < months; i++) {
        sum += inchesofrain[i];
    }
    return sum / months;
}

double smallestRainfall(double inchesofrain[], const int months) {
    double smallest;
    int i;

    smallest = inchesofrain[0];
    for (i = 0; i < months; i++) {
        if (inchesofrain[i] < smallest) {
            smallest = inchesofrain[i];
        }
    }
    return smallest;
}

double largestRainfall(double inchesofrain[], const int months) {
    double largest;
    int i;

    largest = inchesofrain[0];
    for (i = 0; i < months; i++) {
        if (inchesofrain[i] > largest) {
            largest = inchesofrain[i];
        }
    }
    return largest;
}
0
ответ дан Gardener 30 March 2019 в 22:56
поделиться
Другие вопросы по тегам:

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