2017-11-29 2 views
-5

Mein Programm liest 366 Zeilen von Daten aus einer Datei, jede Zeile hat 2 Werte; minimale Temperatur und maximale Temperatur. Ich möchte ausgeben, wenn es drei aufeinanderfolgende Tage gab, an denen die Temperatur über eine bestimmte Zahl n stieg, die der Benutzer betritt. Das ist, was ich habe:So drucken Sie 3 verschiedene Werte pro Zeile in C++

cout<<"Please enter a number to search: "; 
cin>>n; 
out<<endl; 
out<<"Occasions during the year when there were three consecutive days 
where the temperature went above "<<n<<" are:"<<endl; 
out<<"Days: "; 
for(int x=0; x<366; x=x+1){ 
      in>>minimum[x]; 
      in>>maximum[x]; 


      if(minimum[x]>n){ 
       day1=x; 
      } 

      if(maximum[x]>n){ 
       day1=x; 
      } 
      out<<"Days: "<<day1<<", "<<day2<<", "<<day3<<endl; 
      } 

} 

Ich habe Probleme zu verstehen, wie Tag 2 und Tag 3 zu einem anderen Elemente des Arrays zu aktualisieren, die die Bedingung erfüllt. Wenn die Bedingung erfüllt ist, möchte ich die Tage speichern und drucken Sie sie mögen:

Gelegenheiten im Laufe des Jahres (wenn überhaupt), wenn drei aufeinander folgenden Tagen waren, wo die Temperatur über 34 gingen, sind:

Tage: 103 , 104, 105

Tage: 107, 108, 109

Tage: 288, 289, 290

die Tage sind die Stellen in dem Array.

+0

Was passiert, wenn es passiert, 4 aufeinander folgenden Tagen sind? Sind die Tage 1,2 und 3 getrennt von 2,3 und 4? – PaulMcKenzie

Antwort

1

Probieren Sie etwas wie folgt aus:

cout << "Please enter a number to search: "; 
cin >> n; 

out << endl; 
out << "Occasions during the year when there were three consecutive days where the temperature went above " << n << " are:" << endl; 

int firstday, numdays = 0; 

for (int x = 0; x < 366; ++x) 
{ 
    in >> minimum[x]; 
    in >> maximum[x]; 

    if (maximum[x] > n) 
    { 
     ++numdays; 

     if (numdays == 1) 
      firstday = x; 
     else if (numdays == 3) 
     { 
      out << "Days: " << firstday << ", " << firstday+1 << ", " << firstday+2 << endl; 
      numdays = 0; 
     } 
    } 
    else 
     numdays = 0; 
} 

Alternativ:

cout << "Please enter a number to search: "; 
cin >> n; 

out << endl; 
out << "Occasions during the year when there were three consecutive days where the temperature went above " << n << " are:" << endl; 

for (int x = 0; x < 366; ++x) 
{ 
    in >> minimum[x]; 
    in >> maximum[x]; 
} 

for (int x = 0; x < 366-2; ++x) 
{ 
    if (maximum[x] > n) 
    { 
     int firstday = x; 
     int numdays = 1; 

     for (int y = 1; y < 3; ++y) 
     { 
      if (maximum[x+y] > n) 
       ++numdays; 
      else 
       break; 
     } 

     if (numdays == 3) 
      out << "Days: " << firstday << ", " << firstday+1 << ", " << firstday+2 << endl; 

     x += (numdays-1); 
    } 
} 
+0

Das hat funktioniert, danke. Ich bin nur an Pausen in Java gewöhnt, aber ich verstehe es jetzt. – EJay

0

Erstellen Sie eine int-Variable, die als Flag fungiert. Jedes Mal, wenn du einen "guten" Tag bekommst, füge 1 zu dieser Flagge hinzu und subtrahiere 1 wenn nicht. Fügen Sie am Ende einfach eine if-Anweisung hinzu, die prüft, ob diese Flag-Variable drei ist, und drucken Sie dann den Wert.

Hoffe, das hilft!

+0

Nicht "1" an einem "schlechten" Tag subtrahieren. Setzen Sie stattdessen auf 0 zurück. Andernfalls, sagen wir, "n" ist 100, dann würde eine Sequenz wie "101 101 98 102 101" fälschlicherweise als 3 aufeinanderfolgende Tage behandelt werden. –

+0

Ja! Verpasst das. – theBrainyGeek

1

Ich schlage vor, dass Sie dies in kleinere Teile zerlegen. Zum Beispiel könnten Sie dies in zwei großen Schritten tun:

  1. lesen in allen Daten
  2. Suche alle Gruppen von 3 Tagen, die oberhalb der angegebenen Temperatur sind

von jedem dieser separat zu tun , Sie können sich auf ein Stück nach dem anderen konzentrieren, anstatt beides zu tun.

Beachten Sie, dass Sie nur if(maximum[x] > n) benötigen.

Verwandte Themen