
- •Составной оператор
- •Примеры составных операторов :
- •Выбирающие операторы: Условный оператор
- •1 Вариант:
- •2 Вариант:
- •Выбирающие операторы: оператор варианта
- •2,3 : Writeln(‘Выходной день’);
- •4,5,6,0 : Writeln(‘Безрадостный рабочий день’);
- •1 : Writeln(‘Занятие по программированию’)
- •1 Вариант: умножение и сравнение
- •2 Вариант: 3 логических операции. Сложность 2-го варианта меньше
- •Операторы повторения
- •Оператор цикла с параметром
- •Var MinX, MaxX, Step: Real;
- •X, y : Real; Coef : Real;
- •I, n : Integer;
- •Семантика Оператор (тело цикла) выполняется до тех пор, пока условие истинно. Если при первой проверке условие оказалось ложным, оператор не выполняется ни разу. Пример:
- •Var a, b, c : Integer;
- •X : Integer; y : Real;
- •Var Fib1, Fib2 : Integer; Buf : Integer;
- •I : Integer;
- •Var u, V, Root : Real;
Var Fib1, Fib2 : Integer; Buf : Integer;
I : Integer;
Begin
Fib1 := 1; Fib2 := 1; I := 2; { Инициализация цикла }
Repeat
Buf := Fib2;
Fib2 := Fib2 + Fib1; { Следующее число Фибоначчи }
Fib1 := Buf; { Предыдущее число Фибоначчи }
I := Succ(I) { Номер числа Фибоначчи }
until Fib2 mod 10 = 0;
Writeln(‘Номер = ‘, I, ‘ Число = ‘, Fib2)
End.
Пример : Вычислить с заданной точностью значение корня уравнения x = cos(x) на отрезке [0 ; 1] методом деления отрезка пополам.
М
Уравнение
F(x)
= 0
Y2
Y1
Yср
y
= F(x)
Program TransEquation;
Const a = 0; b = 1;
Eps = 1e-5;
Var u, V, Root : Real;
Fu, Fr : Real;
Begin
u := a; v := b; { инициализация цикла }
Fu := Cos(u) - u;
Repeat
Root := (u + v)/2 ; { средняя точка отрезка }
Fr := Cos(Root) - Root;
If Fu*Fr > 0 { выбор правой или левой половины }
then begin u := Root; Fu := Fr end
else v := Root
until Abs(v - u) < Eps;
writeln (‘ корень= ‘, Root, ‘ с точностью ‘,Eps)
End.
Количество N повторений – показатель эффективности программы по времени. На k-том шаге цикла выполнено неравенство
| v - u | = (b - a)/2k.
Поэтому при наименьшем k таком, что
(b - a)/2k <
цикл завершится. Нетрудно вычислить N:
N = [ log2(b - a)/ ]
Первая основная проблема анализа программ, содержащих итерационные циклы, заключается в обосновании завершаемости цикла.
Эта проблема не является тривиальной!
Вторая основная проблема анализа программ, содержащих итерационные циклы, заключается в обосновании правильности цикла.
Эта проблема не является тривиальной!