gpt4 book ai didi

c++ - 场景输出在第二次循环时给出错误答案

转载 作者:行者123 更新时间:2023-11-28 04:53:37 25 4
gpt4 key购买 nike

除了这个小问题,我几乎完成了这个程序。

问题是,当我第一次使用 20.0 36.0 72.0 2.0 10.0 18.0 10.0 循环遍历程序时,我的输出结果是 232.59 sec哪个是对的。

第二次循环时,我输入了 25.0 72.0 200.0 1.5 8.0 30.0 20.0 我的输出结果是 800.41 应该是 但这是错误的>1141.63

现在,如果我颠倒输入并将输入的内容用于第一个循环的第二个循环和第二个循环的第一个。我确实在第一个循环中得到了 1141.63 的输出,但是在第二个循环中,我的答案是 1141.63 。我对这是怎么发生的感到非常困惑。我早期的解决方案之一是在每次循环后使用另一个函数将所有变量重置回 0,但这似乎不起作用,现在我在这里。

编辑:问题解决了。必须在每个循环结束时将时间和 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++;
}
}

最佳答案

虽然这可能无法完全解决您的问题,但您至少需要在不同场景之间将您的 volFilled 值重新初始化为 0.0。否则,您只是从前一个场景的 volFilled 继续,这就解释了为什么您在切换场景时进行的第二次测试产生了相同的输出。第一个场景volFilled达到20.0后,不会执行considion while (volFilled < V)里面的逻辑在第二种情况下,因为此时 volFilled = 20 而 V = 10。

关于c++ - 场景输出在第二次循环时给出错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com