Прежде чем получить формальное выражение, иногда полезно подумать о том, «что остается прежним» и «что меняется» в отношении цикла . * Для написанного цикла у нас есть эти переменные, представляющие интерес:
A
- массив чисел для суммирования n
- целое число элементов в A
. t
-как написано, я предполагаю, что предполагаемая сумма положительных сумм i
- индексная переменная;иногда называют вариант
Так что меняет каждую итерацию?Массив A
не меняется.Количество элементов n
в массиве не изменяется.Как написано, сумма t
может измениться.Переменная индекса i
изменится .
Что касается цикла, то, как правило, люди говорят, что i
является вариантом .Он увеличивает каждую итерацию, и его сравнение с n
- это то, что выходит из цикла.
Инвариант, представляющий для меня интерес, заключается в том, что t
всегда будет представлять вычисленную на данный момент сумму позитивов,Например, на первой итерации:
- До итерации
i == 0
и t
также правильно 0 - После итерации
i == 1
и t
будутбыть корректным по отношению к первому элементу.
Однако, как написано, оператор return исключает любую обработку за пределами первого элемента массива.Переходя от теории к практике, как тогда вы могли бы исправить реализацию?
* Для педантика важен классификатор, поскольку, строго говоря, «инвариант» - это то, что не меняется - не меняетсяили всегда выполняется - для каждой итерации цикла.Так? Множество операторов инвариантны относительно цикла!Например, имя моей матери инвариантно для цикла!