простая логика для цикла C ++ - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь написать простую программу, используя цикл ТОЛЬКО for (мне кажется, разрешено выражение if then). И у меня возникают проблемы с вычислением максимальной даты снегопада из набора пользовательских данных.

Эта программа записывает введенное пользователем количество снега, выпавшего за несколько дней, в текстовый файл. Я должен также перечислить наибольшее количество выпавшего снега, но не (?) Знает, как это сделать в цикле for.

for (dayNumber = 1; dayNumber <= numOfSnowDays; dayNumber++)
    {   
        mostSnowDay = dayNumber;
        cout << "Day number:  " << dayNumber << endl;
        cout << "Enter amount of snow: " << endl;
        cin >> amtOfSnow;
        totalSnow = totalSnow + amtOfSnow;
        outFile << setfill(' ') << setw(15) << dayNumber << setw(25) << setprecision(2)   << amtOfSnow << endl;

        if ( dayNumber == 1 )
        {
            mostSnowDay = dayNumber;                             
        }
        else if ( amtOfSnow < mostSnowDay )
        { 
              //dont know what to put here or even if this is right. 
        }

    };

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вам понадобятся некоторые дополнительные переменные:

 if ( dayNumber == 1 )
 {
     mostSnowDay = dayNumber;   // default - most amount of snow in first day  
     mostAmtOfSnow = amtOfSnow; // 
 }
 else if ( amtOfSnow > mostAmtOfSnow ) //if subsequent day has more snow
 { 
     mostSnowDay = dayNumber;     //mark the day
     mostAmtOfSnow = amtOfSnow;   //change largest amount of snow
 }

РЕДАКТИРОВАТЬ: Кредит Дэну Ф. Удалите инструкцию mostSnowDay = dayNumber; в начале цикла, она будет повторно инициализировать вашу переменную каждый раз, когда циклвходит.

0 голосов
/ 08 февраля 2012

Вам нужно начать с двух переменных вне цикла for, которые отслеживают maxSnowfall и maxSnowfallDate:

  int maxSnowfallDate;
  int maxSnowfall;

Попав в цикл for, вы обычно проверяете, достигнут ли новый максимальный день, и если да, вам нужно записать новый максимум и дату нового максимума.

  if( curSnowfall >  maxSnowfall ) {
    maxSnowfall = curSnowfall;
    maxSnowfallDate = dayNumber;
  }

Обычно просто инициализировать maxSnowfall равным 0 вне цикла for и каждый раз проверять, но звучит так, как будто назначение состояло в том, чтобы использовать технику, которая изначально не присваивалась произвольному (в данном случае 0) значению. Вместо этого вы просто присваиваете первый прогон цикла, а затем проверяете новый максимум при каждом последующем прогоне цикла.

if( dayNumber == 1 ) {
  maxSnowfallDate = dayNumber;
  maxSnowfall = curSnowfall;
} else {
  if( curSnowfall > maxSnowfall ) {
    maxSnowfall = curSnowfall;
    maxSnowfallDate = dayNumber;
  } 
}   
...