Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 5 демо.doc
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
96.77 Кб
Скачать

1 Вариант: умножение и сравнение

2 Вариант: 3 логических операции. Сложность 2-го варианта меньше

Cледующие вычисления эквивалентны:

If x < 0

then If y < 0 <==> If (x < 0) And (Y < 0)

then z := 1 then z := 1

If x < 0

then Flag := False <==> Flag := (x >= 0)

else Flag := True

Операторы повторения

Циклы - основное средство в программировании, позволяющее коротко записывать алгоритм, осуществляющий большое количество действий.

  • оператор цикла с параметром;

  • оператор цикла с предусловием;

  • оператор цикла с постусловием.

Оператор цикла с параметром

For <параметр> := <нач. значение> to <кон. значение> do <оператор>

или

For <параметр> := <нач. значение> downto <кон значение> do <оператор>

Пример. Табулирование функции вещественного переменного.

Рrogram Tabulation;

Var MinX, MaxX, Step: Real;

X, y : Real; Coef : Real;

I, n : Integer;

Begin

Write(‘Введите пределы табулирования ‘); Readln(MinX, MaxX);

Write(‘Введите шаг табулирования ‘); Readln(Step);

Coef := 1/Sqrt(Pi);

x := MinX;

n := Round((MinX – MaxX)/Step);

For i := 0 to n do begin

y := Coef * exp(-Sqr(x)/2);

writeln(‘ x = ‘,x,’ y = ‘,y);

x := x + Step

end;

End.

Пример: Суммирование последовательности.

S = a0 + a1 + … + an; ai = xi/i!

{Ввод х}

S := 0; a := 1; {Инициализация цикла}

For i := 0 to n do begin

S := S + a; {Суммирование накоплением}

a := a*x/(i+1) {Следующее значение слагаемого}

end;

{Вывод S}

S := 0; a := 1; {Инициализация цикла}

For i := 1 to n+1 do begin

S := S + a; {Суммирование накоплением}

a := a*x/i {Следующее значение слагаемого}

end;

Операторы повторения While и Repeat

Когда количество повторений заранее неизвестно, а задано некоторое условие окончания (или продолжения) цикла, в языке Паскаль используют операторы повторения: оператор цикла с предусловием While и оператор цикла с постусловием Repeat.

Оператор цикла

с предусловием

Семантика Оператор (тело цикла) выполняется до тех пор, пока условие истинно. Если при первой проверке условие оказалось ложным, оператор не выполняется ни разу. Пример:

Найти наименьшее натуральное решение неравенства x3 + ax2 + bx + c > 0 с целыми коэффициентами.

Очевидный алгоритм поиска решения заключается в последовательном вычислении значений Y = x3 + ax2 + bx + c для x = 1, 2, 3, ... до тех пор, пока Y 0.

Program UneqvSolution;

Var a, b, c : Integer;

X : Integer; y : Real;

Begin

Write(‘ введите коэффициенты a, b, c : ‘); Readln(a, b, c);

X := 1; Y := a + b + c + 1; { Инициализация цикла }

While Y <= 0 do begin

X := Succ(X); { Следующее значение X }

Y := ((X + a)*X + b)*X + c { Следующее значение Y }

end;

Writeln(‘X = ‘, X, ‘ Y = ‘, Y )

End.

Д

При некотором значении Х значение кубического выражения станет положительным

ля обоснования этого метода требуется единственное: убедиться в том, что цикл когда-нибудь завершится, т.е. что решение неравенства существует! Заметим, что

lim (x3 + ax2 + bx + c) = +

x -> +

Оператор цикла Repeat (с постусловием)

Оператор Repeat

Семантика

Тело цикла Repeat выполняется до тех пор, пока условие принимает значение False. Тело цикла будет выполнено по крайней мере один раз. Таким образом, условие является условием окончания цикла.

Пример. Найти номер наименьшего числа Фибоначчи, делящегося на 10. Последо­ва­тель­ность Фибоначчи { F(n) } определяется рекуррентно:

F(1) = F(2) = 1, F(n+2) = F(n+1) + F(n)

Первые несколько членов: 1, 1, 2, 3, 5, 8, 13, …..

Алгоритм и программа

Как и в предыдущем примере, вычисляем Fn для n = 3, 4, ... до тех пор, пока не найдем элемент последовательности, делящийся на 10. Проблема обоснования метода остается прежней: существует ли искомый элемент?

Program Fibbonachy;