Как я могу найти самые высокие и самые низкие значения в этом массиве?

0

Какой код можно использовать для печати самых высоких и самых низких значений, которые пользователь вводит в этот массив? Эта программа должна принимать среднее значение ввода пользователя (что я уже сделал). Теперь все, что мне нужно сделать, это заставить программу распечатать самые высокие и самые низкие значения, которые вводит пользователь.

#include <iostream>
using namespace std;
int main()
{
float days = 0;
float temperatures [50];
float temptotal = 0;
float average = 0; 
cout << "Enter the number of days: ";
cin >> days;
if (days > 50)
{
    cout << "You may only enter temperatures for 50 days." << endl;
    return 0;
}
for (int i = 1; i <= days; i++)
{
    cout << "Enter the temperature for day number " << i << ": "; 
    cin >> temperatures[50];
    temptotal += temperatures[50]; 
}
average = (temptotal / days);
cout << "The temperature average is: " << average << endl;
return 0;
}
  • 0
    Итак, что бы ВЫ сделали, если бы вас попросили найти наибольшее или наименьшее число из 50 чисел?
Теги:
arrays
input

3 ответа

1
Лучший ответ

Существует множество способов сделать это. Но простой способ сделать это - проверить, является ли текущее значение, добавленное в массив, самым низким/самым высоким. Во-первых, вам нужно предположить, что min соответствует очень большому числу, а max соответствует очень низкому числу.

float min = 9999999999999;
float max = -9999999999999;

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

if(temperatures[i] > max)
    max = temperatures[i];
if(temperatures[i] < min)
    min = temperatures[i];

Если вы заметили, я использовал temparatures[i]. Если вы всегда добавляете значение, введенное пользователем в индекс 50, вы всегда перезаписываете последнее введенное значение. Кроме того, индексы массива обычно начинаются с 0, а не на 1, поэтому цикл for будет выглядеть так: for (int я = 0; я < days; i++).

Я отредактировал ваш код, и это то, с чем я столкнулся:

#include <iostream>
using namespace std;
int main()
{
    float days = 0;
    float temperatures [50];
    float temptotal = 0;
    float average = 0;
    cout << "Enter the number of days: ";
    cin >> days;
    if (days > 50)
    {
        cout << "You may only enter temperatures for 50 days max." << endl;
        return 0;
    }
    float min = 9999999999999;
    float max = -9999999999999;
    for (int i = 0; i < days; i++)
    {
        cout << "Enter the temperature for day number " << i << ": ";
        cin >> temperatures[i];
        temptotal += temperatures[i];

        if(temperatures[i] > max)
            max = temperatures[i];
        if(temperatures[i] < min)
            min = temperatures[i];
    }

    average = (temptotal / days);
    cout << "The temperature average is: " << average << endl;
    cout << "The highest temperature is: " << max << endl;
    cout << "The lowest temperature is: " << min << endl;


    return 0;
}

Надеюсь это поможет !

0

Посмотрите здесь: C++ функция, чтобы найти максимальное значение в массиве двойников? По существу, вы делаете:

1) добавить

    #include <algorithm>

в верхней части кода

2) используйте std::max_element и std::min_element в вашем коде, например, как это

    double highest = *std::max_element(temperatures, temperatures + days);
    double lowest = *std::min_element(temperatures, temperatures + days);

Вы можете найти эти методы здесь: http://www.cplusplus.com/reference/algorithm/max_element/ и http://www.cplusplus.com/reference/algorithm/min_element/ (хотя, пожалуйста, имейте в виду, что многие люди смотрят сверху вниз на cplusplus.com, считая это не лучшим источником информации на C++, но я думаю, в этом случае это прекрасно)

Альтернативно, как Евгений Ш. и Бретт показал, что вы можете сделать это сами, сохранив текущее наивысшее (низкое) значение и сравнив его с каждым новым значением ввода.

Кроме того, как заметил Бретт, вы хотите изменить temperatures[50] на temperatures[i] в вашем цикле считывания. Но есть и другая коррекция: этот цикл должен начинаться от 0 до менее days:

for (int i=0; i < days; i++)

поскольку массивы индексируются начиная с 0, а в случае максимального количества значений (50) вы заполняете элементы массива от 0 до 49 (который составляет days-1) включительно, а не от 1 до 50.

  • 1
    Вы также можете получить оба значения одним вызовом std::minmax_element .
  • 0
    @Blastfurnace: Спасибо, не знал этого! Хотел бы я еще проголосовать за ваш комментарий :(
Показать ещё 1 комментарий
0

Разве вы не сохранили бы локальную переменную с максимальным и минимальным значением? Вы все равно проходите через все предметы?
'

float max=0;
float min=999;
for (int i = 1; i <= days; i++)
{
    cout << "Enter the temperature for day number " << i << ": "; 
    cin >> temperatures[50];
    temptotal += temperatures[50]; 
    if temperatures[50] > max
        max = temperatures[50];
    if temperatures[50] < min
        min = temperatures[50];
}

Пожалуйста, простите мое кодирование, поскольку это не мой язык. Также я не полностью понимаю ваш код. Возможно, вы не собираетесь постоянно использовать температуру [50]. Может быть, вы имеете в виду температуры [i]?

Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню