#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);