c – 此循环中的先前值是多少?
发布时间:2020-12-16 07:32:55 所属栏目:百科 来源:网络整理
导读:这是我的代码的一部分.其余的只是函数定义.我有一个20 x 20的数组记录板的温度.我需要通过一个循环重复,直到数组中的单元格没有变化超过0.1度(我每次迭代刷新值)你如何监视数组中任何单元格的最大变化,以确定何时停止迭代?现在我已经尝试过这个,但输出不正
|
这是我的代码的一部分.其余的只是函数定义.我有一个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,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;
}
}
解决方法
问题是当单元格的更改较小时,您会覆盖更新.在这种情况下,任何具有较小更改的单元格都将停止迭代.
像这样构造你的循环: 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);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
