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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |