Гарантирует ли этот инвариант цикла, что переменная никогда не меняется?

cs.stackexchange https://cs.stackexchange.com/questions/11269

Вопрос

Предположим, у вас есть несколько петли и и целое число 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, но не по всей программе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top