この小さな問題を除いて、私はこのプログラムをほとんど完了しました。シナリオの出力が2番目のループで間違った答えを返します
問題は私が20.0 36.0 72.0 2.0 10.0 18.0 10.0
のputで次のプログラムをループするときです。私の出力は232.59 sec
になります。これは正しいです。 Iループの周りに二度目の
25.0 72.0 200.0 1.5 8.0 30.0 20.0
私の出力は、それは私が入力を逆ならば今
1141.63
なると私はのための第二のループに入力されたものを取るべき時に間違っているであることが出てきます最初のループ、最初は2番目のループです。最初のループでは1141.63
の出力が得られますが、2番目のループでは、私の答えは1141.63
です。私はこのことがどのように起こっているのか非常に困惑しています。私の初期の解決策の1つは、別の関数を使用して各ループの後にすべての変数を0に戻すことでしたが、それはうまくいかないように見えました。
EDIT:問題を把握しました。各ループの終わりに時間をリセットし、volFilledを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++;
}
}
すべてのメンバー変数を元に戻しますか?彼らの初期値に?私はちょうどこれをテストし、各繰り返しの後にすべての変数をループを介してリセットして、期待される結果を得ました。 – Kevin
デバッガの使い方を学び、コードをステップ実行して、それが何をしているのかを確認する必要があります。 – SoronelHaetir
@ケビン私はもう一度やり直します。 – 73memedream