Выполняется ли инвариант цикла в процессе выполнениятела цикла?
(Отметьте один правильный вариант ответа.)
Варианты ответа
Не обязательно. (Верный ответ)
Да, выполняется.
утверждение: A(x)цикл пока B(x)| инвариант: A(x)| x := T(x)конец циклаЗдесь через A(x) и B(x)обозначены условия, зависящие от переменной x.Какое условие выполняется по окончании цикла?
// Программа корень функции int a, b, c; . . . // утверждение: a < b && f(a)*f(b) <= 0 // Значения функции на концах отрезка [a,b] разных знаков while (b - a > 1) { // Invariant: f(a)*f(b) <= 0 // Делим отрезок [a, b] пополам c = (a + b)/2; // c - целая часть (a+b)/2 if (f(a) * f(c) < 0) { b = c; // выбираем левую половину отрезка } else { a = c; // выбираем правую половину } } // утверждение: a == b-1 && // f(a)*f(b) <= 0
// Программа корень функции double a, b, c; double eps = 0.000001; . . . // утверждение: a < b && f(a)*f(b) <= 0.0 // Значения функции на концах отрезка [a, b] разных знаков while (b - a > eps) { // Invariant: f(a)*f(b) <= 0.0 // Делим отрезок [a, b] пополам c = (a + b)/2.0; // c - середина отрезка [a, b] if (f(a) * f(c) < 0.0) { b = c; // выбираем левую половину отрезка } else { a = c; // выбираем правую половину } } // утверждение: b - a <= eps && // f(a)*f(b) <= 0.0