Гарантирует ли этот инвариант цикла, что переменная никогда не меняется?
-
16-10-2019 - |
Вопрос
Предположим, у вас есть несколько петли и и целое число k:
int k = 5;
for (int i = 0 ; i < N; i++)
{
//(*)
//do something
}
Инвариант цикла AT (*): $ {k = k } $
Это гарантирует, что $ k $ не меняется между итерациями? Если нет, есть ли другие, чтобы гарантировать это?
Решение
Инвариант петли ничего не «гарантирует» ничего. Это краткое изложение соответствующей информации, которую вы знаете о состоянии программы, когда она достигает этой точки. Если ваша петля, например:
k = 5;
...
for(int i = 0; i < N; i++) {
/* Invariant: k = 5 */
...
k = 207;
...
frob_very_hard(&k);
...
k *= 3;
...
k = 5;
}
в отмеченной точке k == 5, но не по всей программе.
Не связан с cs.stackexchange