2015-04-13 2 views
0

Недавно я закончил работу над программой, которая вычисляет общий, средний, самый высокий и самый низкий уровень осадков в течение года. Программа требует, чтобы пользователь вводил количество осадков каждый месяц, а затем выполнял вычисления. Когда я получаю самые низкие и самые высокие цифры, программа должна отображать месяц, соответствующий этим номерам, а не самому числу.Почему эта программа иногда не отображает вывод, а иногда и делает? (Программа осадков)

Моя программа работает нормально, и я вообще не ошибаюсь. Тем не менее, я замечаю, что иногда, в зависимости от выхода, я получаю один из этих трех случаев:

  • Программа отображает месяц с наибольшим номером, но на нем не отображается месяц с самым низким номером.
  • Программа отображает месяц с самым низким номером, но на нем не отображается месяц с наибольшим номером.
  • Программа отображает все без каких-либо проблем

Код следующее:

#include<iostream> 
#include<string> 
using namespace std; 

int main() 
{ 
    //array containing the months 
    string months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 
    //variables 
    double data[12]; 
    double sum = 0; 
    double avg, max1, min1; 
    string max2, min2; 
    for (int i = 0; i < 12; i++)//asks the user for input for each month 
    { 
     cout << "Enter rainfall for " << months[i] << ": "; 
     cin >> data[i]; 
     while (data[i] < 0) //input validation 
     { 
      cout << "invalid data (negative rainfall) -- retry"; 
      cin >> data[i]; 
     } 
    } 


    for (int j = 0; j < 12; j++) //the sum of all of the numbers 
    { 
     sum += data[j]; 
    } 

    max1 = data[0]; 
    for (int k = 0; k < 12; k++) //calculates the biggest number and its month 
    { 
     if (data[k] > max1) 
     { 
      max1 = data[k]; 
      max2 = months[k]; 
     } 

    } 
    min1 = data[0]; 
    for (int l = 0; l < 12; l++) //calculates the least number and its month 
    { 
     if (data[l] < min1) 
     { 
      min1 = data[l]; 
      min2 = months[l]; 
     } 

    } 
    avg = sum/12; 
    //output 
    cout << "Total rainfall: " << sum << endl; 
    cout << "Average rainfall: " << avg << endl; 
    cout << "Least rainfall in " << min2 << endl; 
    cout << "Most rainfall in " << max2 << endl; 

    return 0; 
} 

Пример вывода: code example

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

Если вам нужен исходный текст проблемы, я бы оставил его здесь. Спасибо!


Осадков Статистика

Напишите программу, которая позволяет пользователю ввести общее количество осадков для каждого из 12 месяцев (начиная с января) в массив удваивается. Программа должна рассчитать и отобразить (в указанном порядке):

общее количество осадков за год, Среднемесячные осадки, и месяцы с самыми высокими и самыми низкими уровнями.

В григорианском календаре месяцы должны выражаться в виде английских имен в месяцах, то есть в январе, феврале, марте, апреле, мае, июне, июле, августе, сентябре, октябре, ноябре, декабре.

Подтверждение ввода: не принимайте отрицательные числа для месячных осадков. Когда вводится отрицательное значение, программа выводит «недопустимые данные (отрицательные осадки) - повторить попытку» и пытается перечитать значение.

Подсказки и метки вывода: Десятичные значения должны отображаться с использованием точности по умолчанию, т. Е. Не указывать точность. Для каждого прочитанного элемента должна быть указана строка формы «Введите количество осадков за месяц:», где MONTH - «январь» или «февраль» или ... или «декабрь». Выходные данные должны быть следующими:

Total rainfall: 12.36 

    Total rainfall: 1.03 

    Least rainfall in August 

    Most rainfall in April 

, где определенное количество осадков или определенных определенных месяцев зависит от фактического ввода.

+0

10 Похоже, вы не устанавливаете max2, если max происходит в первый месяц, потому что 'if (data [k]> max1)' Никогда не будет true. – drescherjm

+1

'if (data [k]> max1)' Что делать, если данные [k] никогда не превышают 'max1'? – PaulMcKenzie

ответ

0

Проблема заключается в том, что вы никогда не установить строки в максимальных или минимальных месяцев, если выполняются следующие условия никогда не встречались:

if (data[k] > max1) 
    //... 
    if (data[l] < min1) 

Вы можете либо установить max2 и min2 к первому элементу перед тем вы вводите или просто найдите индекс из самых больших и наименьших значений и используйте индекс, чтобы рассказать вам, какой месяц выбрать в вашем месячном массиве.

int maxIndex = 0; 
max1 = data[0]; 

for (int k = 0; k < 12; k++) 
{ 
    if (data[k] > max1) 
     maxIndex = k; 
} 

int minIndex = 0; 
min1 = data[0]; 

for (int l = 0; l < 12; l++) 
{ 
    if (data[l] < min1) 
     minIndex = l; 
} 

max2 = months[maxIndex]; 
min2 = months[minIndex]; 
+0

Спасибо, Пол !!! Теперь я вижу ошибку лучше. Надеюсь, я больше не сделаю эту ошибку. – user3451338

0

Вам нужно установить min2 и max2везде установить min1 и max1 соответственно.

Смежные вопросы