这是我的代码的一部分。其余的只是函数定义。我有一个20 x 20的数组记录板的温度。我需要通过一个循环重复,直到数组中的单元格没有变化超过0.1度(我每次迭代刷新值)你如何监视数组中任何单元格的最大变化,以确定何时停止迭代?现在我已经尝试过这个,但输出不正确。我相信这是因为我错误地定义了我之前的那个以将当前的那个与。
进行比较while (true)
{
bool update = false;
for (int a = 1; a < array_size -1; a++)
{
for (int b = 1; b < array_size -1; b++)
{
hot_plate[a][b] = sum_cell(hot_plate, a, b);
}
}
for (int a = 1; a < array_size-1; a++)
{
for (int b = 1; b < array_size-1; b++)
{
hot_plate_next[a][b]=sum_cell(hot_plate_next, a,b);
if (abs(hot_plate_next[a][b] - hot_plate[a][b]) > 0.1)
{
update = true;
}
hot_plate_next[a][b] = hot_plate[a][b];
cout << hot_plate[a][b] << " ";
}
}
if (!update) {
break;
}
}
答案 0 :(得分:1)
当你把:
if (abs(hot_plate_next[a][b] - hot_plate[a][b]) < 0.1)
{
update = false;
}
在第二个嵌套的for循环中,你正在设置&#34;更新&#34;如果任何单元格在当前和先前的检查之间的差异小于0.1,则为false,而不是您想要的所有单元格。
按如下方式更新您的代码:
bool update = false;
和
if (abs(hot_plate_next[a][b] - hot_plate[a][b]) > 0.1)
{
update = true;
}
(我会把&gt; =,但你说&#34;直到数组中的单元格没有变化超过0.1度&#34;)
按要求编辑:要干净地输出矩阵,请添加以下行:
cout << "\n";
这里:
for (int a = 1; a < array_size-1; a++)
{
for (int b = 1; b < array_size-1; b++)
{
hot_plate_next[a][b]=sum_cell(hot_plate_next, a,b);
if (abs(hot_plate_next[a][b] - hot_plate[a][b]) > 0.1)
{
update = true;
}
hot_plate_next[a][b] = hot_plate[a][b];
cout << hot_plate[a][b] << " ";
}
cout << "\n"; // Add this line
}
答案 1 :(得分:1)
问题是,当某个单元格的较小更改时,您会覆盖update
。在这种情况下,任何具有较小变化的单元格都将停止迭代。
像这样构建你的循环:
float largest_change = 0.0f;
do {
largest_change = 0.0f;
for (...) {
float new_value = ...
float change = abs(new_value - hot_plate[a][b]);
if (change > largest_change)
largest_change = change;
hot_plate[a][b] = change;
}
} while (largestChange > 0.1f);