Anfängerprobleme - Schleife und Co

Chelikoo

Newbie
Registriert
Okt. 2014
Beiträge
1
Guten Tag.
Ich bin momentan dabei mit dem Buch "C++ Lernen und professionell anwenden" C++ zu lernen.

Die ersten Kapitel waren soweit gut verständlich und haben mir auch keine Probleme bereitet. Allerdings gelange ich so langsam an den Punkt, bei dem die ersten Fragen aufkommen und da erhoffe ich mir hier ein wenig Hilfe (bin übrigens gerade im Thema Schleifen, da werden sicherlich noch weitere Fragen kommen).

Auf S. 118 heißt es:

Zitat:
#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
long euro, maxEuro;
double kurs;

cout << "\n* * * KURSTABELLE Euro - US-$ * * *\n\n";
cout << "\nBitte den Preis von einem Euro in US-$ eingeben: ";

cin >> kurs;
cout << "\nBitte die Obergrenze für Euro eingeben: ";
cin >> maxEuro;


cout << '\n'
<< setw(12) << "Euro" << setw(20) << "US-$" << "\t\tKurs: " << kurs << endl;


cout << fixed << setprecision(2) << endl;

long lower, upper, step;


for( lower=1, step=1; lower <= maxEuro; step*= 10, lower = 2*step)
//Die innere Schleife gibt einen "Block" aus:
for( euro = lower, upper = step+10;euro <= upper && euro <= maxEuro; euro+=step)
cout << setw(12) << euro << setw(20) << euro*kurs << endl;

return 0;

}


In der Aufgabe heißt es nun diese in eine while-Schleife umzubauen. Da ich hier meine Schwierigkeiten hatte (bin nun mal ganz am Anfang und auch ohne jegliche Hilfe, lediglich das Buch), habe ich versucht diese erst einmal ganz nachzuvollziehen.
Hier werde ich z.B. aus folgender Funktion nicht schlau:
step*=10
Meines Wissens nach ist das ja nicht anderes als step = step *10
Bei den definierten Werten also 1 = 1*10
Dies würde dann für lower = 2*step gleich 20 ergeben.
Mit dem neuen Start der Funktion würde dies dann ja die 20 nehmen zum weiterrechnen und wir bewegen und schnell in einem sehr hohen Zahlenbereich, was ja nicht passt. Bei der Funktion werden ja sowieso 1-er Schritte gegangen, wieso könnte man nicht einfach bei step = 1 bleiben? (beim ausprobieren hat dies im Grunde eine Endlosschleife ergeben).
Könnte mir da jemand auf die Sprünge helfen? Vermutlich scheine ich die ganze Funktion ein wenig Missverstanden zu haben, hätte da jemand eine verständliche Erklärung für?

Bedanke mich bereits einmal für eure hilfreichen Antworten.

Gruß
 
Ich greif die for/while-Schleifen Thematik etwas von vorne auf.
Wie bestimmt in deinem Buch beschrieben, hat eine for-Schleife folgenden Aufbau: for (Initialisierung; Test; Fortsetzung) Anweisungsblock

Was jedoch eher selten erwähnt wird: Sowohl Initialisierung, Test und Fortsetzung sind optional. D.h heißt for (;;) {} ist eine völlig korrekte (und nie abbrechende) Schleife. Folglich kann die Initialisierung bereits vor der Schleife und der Test und die Fortsetzung innerhalb einer Schleife gemacht werden.

Folgende 2 Schleifen tun exakt das selbe:
#1
Code:
for (int i = 0; i <= 10; i++) {
  cout << i << endl;
}
#2
Code:
int i = 0;

for (;;) {
  if (i > 10) {
    break;
  }

  cout << i << endl;
  i++;
}
Zurück zu deiner Aufgabe eine for in eine while-Schleife umzubauen.
Eine while-Schleife hat die Form while (Test) Anweisungsblock, also eigentlich nichts anderes als for (;Test;) Anweisungsblock.

Du siehst, für diese Art Umbau braucht es nicht mal ein Verständnis über die konkrete Funktion des Programms.

Weiterhin viel Spaß beim Lernen :)
 
Zuletzt bearbeitet:
Zurück
Oben