Нахождение значения, при котором имеется наибольшее и наименьшее значение в циклическом массиве C

#c

#c

Вопрос:

Хорошо, у меня есть мой код (показан ниже), который в основном получает наибольшее и наименьшее значения температуры за весь год. Теперь это работает, но у меня возникают проблемы с поиском решения для вывода увеличенного значения «j», когда в массиве найдено наибольшее значение. Мне это нужно, потому что основная цель программы — вывести месяц, в котором найдено наибольшее и наименьшее значение. И у меня уже есть функция, написанная в этом коде, которая преобразует увеличенное значение в строку month.

TLDR: Мне нужно выяснить, как узнать, при каком значении «j» моя программа находит максимальное и минимальное значения.

Итак, если бы вы, ребята, могли предложить какое-либо представление о том, как я мог бы этого добиться, это было бы фантастически!

      //Gathering Largest Temperature:
    for(int j = 0; j < size; j  )
    {
        if(yearData[j].highTemperature > highestTemperature)
           highestTemperature = yearData[j].highTemperature;
    }

    //Gathering Smallest Temperature:
    for(int j = 0; j < size; j  )
    {
        if(yearData[j].lowTemperature < lowestTemperature)
            lowestTemperature = yearData[j].lowTemperature;
    }
  

Комментарии:

1. Когда вы найдете новый максимум, сохраните текущий индекс в переменной, которая объявлена вне цикла, точно так же, как вы делаете с highestTemperature .

2. Так что да, я просто подумал об этом в тот момент, когда встал со своего места. Таким образом, это было бы что-то вроде (в соответствии с инструкцией if): month = j;

3. Справа (с фигурными скобками в операторе if).

Ответ №1:

 //Gathering Largest Temperature:
auto highestTemperature = yearData[0].highTemperature;
int highestTemperatureDate = 0;
for(int j = 0; j < size; j  )
{
    if(yearData[j].highTemperature > highestTemperature)
    {
       highestTemperature = yearData[j].highTemperature;
       highestTemperatureDate = j;
    }
}

//Gathering Smallest Temperature:
auto lowestTemperature = yearData[0].lowTemperature;
int smallestTemperatureDate = 0;
for (int j = 0; j < size; j  )
{
    if (yearData[j].lowTemperature < lowestTemperature)
    {
        lowestTemperature = yearData[j].lowTemperature;
        smallestTemperatureDate = j;
    }
}
  

Я добавил значение int для наименьших и самых высоких температур

Комментарии:

1. Джарод 42 я не понял ваш комментарий, если у меня ошибка форматирования, пожалуйста, отредактируйте его

2. Спасибо, я только что понял, что пропустил {}

3. Вы можете объединить два цикла в один цикл, который сравнивает как низкие, так и высокие темпы на каждой итерации.

4. Да, но это не вопрос

Ответ №2:

С помощью std вы могли бы сделать:

 //Gathering Largest Temperature:
auto max = std::max_element(std::begin(yearData), std::end(yearData),
                            [](const autoamp; lhs, const autoamp; rhs){
                                return lhs.highTemperature < return rhs.highTemperature;
                            });

auto max_index = std::distance(std::begin(yearData), max);

// Gathering Smallest Temperature:
auto min = std::min_element(std::begin(yearData), std::end(yearData),
                            [](const autoamp; lhs, const autoamp; rhs){
                                return lhs.lowTemperature < return rhs.lowTemperature;
                            });
auto min_index = std::distance(std::begin(yearData), min);