Ich bin ziemlich mit diesem Programm außer diesem kleinen Problem fertig.Szenario-Ausgabe gibt falsche Antwort auf zweite Schleife
Das Problem ist, wenn das erste Mal, dass ich das Programm mit dem folgenden in Durchlauf von 20.0 36.0 72.0 2.0 10.0 18.0 10.0
durchlaufen meine Ausgabe kommt heraus, 232.59 sec
zu sein, die korrekt ist.
Zum zweiten Mal, wenn ich Schleife um, I-Eingang 25.0 72.0 200.0 1.5 8.0 30.0 20.0
meine Ausgabe kommt zu sein, die falsch ist, wenn es 1141.63
jetzt sein sollte, wenn ich die Eingänge umkehren und nehmen, was ich für die zweite Schleife eingegeben für die erste Schleife und zuerst für die zweite Schleife. Ich bekomme meine Ausgabe von 1141.63
für die erste Schleife, aber die zweite Schleife, meine Antwort ist 1141.63
. Ich bin sehr verwirrt darüber, wie dies geschieht. Eine meiner frühen Lösungen war, alle Variablen nach jeder Schleife mit einer anderen Funktion auf 0 zurückzusetzen, aber das schien nicht zu funktionieren und jetzt bin ich hier.
EDIT: Problem erkannt. Musste die Zeit zurücksetzen und volFilled am Ende jeder Schleife auf 0.
void Well::timeReq()
{
bool exit = false;
while (!exit)
{
std::cout << "Enter 7 digits to evaluate or type 0 now to exit." << std::endl;
std::cin >> UP;
if (UP == 0)
{
exit = true;
break;
}
std::cin >> D >> L >> B >> P >> DOWN >> V;
double WL = L;
double radius = (D/2);
while (volFilled < V)
{
time += UP;
time += sqrt(2 * (L)/(acceleration * 12.0));
time += (L)/(P);
L += (B * cuIns)/(pi*pow(radius, 2));
time += DOWN;
volFilled += B;
}
std::cout << std::endl;
std::cout << "Scenario " << scenario << ":" << std::endl;
std::cout << std::left << std::setw(25) << "\tUp Hill" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< UP << " sec" << std::endl;
std::cout << std::left << std::setw(25) << "\tWell Diamter" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< D << " in" << std::endl;
std::cout << std::left << std::setw(25) << "\tWater Level" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< WL << " in" << std::endl;
std::cout << std::left << std::setw(25) << "\tBucket Volume" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< B << " cu ft" << std::endl;
std::cout << std::left << std::setw(25) << "\tBucket Ascent Rate" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< P << " in/sec" << std::endl;
std::cout << std::left << std::setw(25) << "\tDownhill" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< DOWN << " sec" << std::endl;
std::cout << std::left << std::setw(25) << "\tRequired Volume" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< V << " cu ft" << std::endl;
std::cout << std::left << std::setw(25) << "\tTIME REQUIRED" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
<< time << " sec" << std::endl;
scenario++;
}
}
Sind Sie sicher, dass Ihre Funktion alle Mitgliedsvariablen zurücksetzt zu ihren anfänglichen Werten? Ich habe das gerade getestet, indem ich alle Variablen nach jeder Iteration durch die Schleife zurückgesetzt habe und die erwarteten Ergebnisse erhalten habe. – Kevin
Sie müssen lernen, Ihren Debugger zu verwenden, Schritt durch den Code und sehen, was es tut. – SoronelHaetir
@Kevin Ich werde es noch einmal versuchen. – 73memedream