Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования / ИТ / 4_Программирование циклических алгоритмов.pps
Скачиваний:
47
Добавлен:
17.05.2015
Размер:
269.31 Кб
Скачать

Программирование

циклических алгоритмов

Инструкция цикла с предусловием

false

true

while <лог. выражение> do begin

Пример: вычислить сумму

S = 1 + 1/2 + 1/3 +… + 1/100

<инструкции>

end;

s:=0; n:=1; while n<=100 do begin

s:=s+1/n;

n:=n+1; end;

2

Инструкция цикла с постусловием

true

false

Пример: вычислить сумму

S = 1 + 1/2 + 1/3 +… + 1/100

repeat

<инструкции>

until <лог. выражение>

s:=0; n:=1; repeat

s:=s+1/n;

n:=n+1; until n>100;

3

Инструкция цикла с параметром

for параметр:=нач_знач downto кон_знач do begin

<инструкции>

end;

Пример:

s:=0;

вычислить сумму

S=1 + 1/2 + 1/3 +… + 1/100

for n:=1 to 100 do

begin

 

 

s:=s+1/n;

 

end;

4

Сравнение циклов разных типов

While

Repeat

For

универсальный

всегда выполняется хотя

пригоден только при

 

бы один раз

заданном числе

 

 

повторений

требует инициализации

требует инициализации

автоматически

и изменения

и изменения

инициализирует и

управляющих

управляющих

изменяет управляющую

переменных

переменных

переменную

может приводить к

может приводить к

зацикливание

зацикливанию

зацикливанию

исключено

5

Простейшие вычислительные методы: вычисление площадей

Один из часто встречающихся классов задач в математике – вычисление площадей различных фигур. Для простых фигур (прямоугольник, треугольник, круг) есть простые формулы.

Для более сложных используется определенный интеграл. Однако этими методами охватываются далеко не все случаи, встречающиеся на практике.

Более широкий класс задач решается с помощью приближенных методов.

Рассмотрим некоторые из них.

6

Метод прямоугольников

Задача:

найти приближенно площадь

фигуры, ограниченной осью абсцисс и кривой y = f(x) на промежутке [a;b].

 

a

b

w:=(b-a)/n;

{вычисляем ширину полоски}

 

s:=0;

{переменная для накопления площади}

 

x:=a+w/2;

{начальное значение х}

 

while x < b do

 

 

{продолжаем вычисление, пока не дошли до конца отрезка }

begin

 

 

s:=s+w*f(x); {добавляем к s площадь очередной полоски}

 

x:=x+w;

{переходим к следующей полоске}

 

end;

 

 

7

Метод Монте-Карло

 

 

 

 

 

 

 

 

 

 

Задача:

 

 

 

 

 

 

 

найти приближенно площадь фигуры,

 

 

 

 

 

ограниченной осью абсцисс и кривой y = f(x)

 

 

на промежутке [a;b].

 

 

 

 

 

 

 

 

 

 

 

Sфигуры

 

k

 

 

 

 

 

 

 

Sпрямоуг

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

k:=0;

{количество точек, попавших в фигуру}

 

 

for i:=1 to n do

{моделируем n бросаний }

 

 

begin

 

 

 

 

 

 

 

 

 

x:=random*(b-a)+a; {случайная координата x}

 

 

y:=random*h;

 

{случайная координата y}

 

 

 

 

 

 

if y<=f(x)

 

{если точка попала в фигуру}

then k:=k+1;

end;

s:=(b-a)*h*k/n;{площадь прямоугольника (b-a)*h умножаем на число попавших в фигуру точек и делим на общее число точек }

h

b

8

Решение уравнений методом деления пополам

Задача:

найти приближенно корень уравнения f(x) =0 на промежутке [a;b] с заданной точностью e.

Метод работает только в том случае,

 

 

 

 

 

 

 

 

a

 

 

 

 

b

если на указанном промежутке

 

 

 

 

 

 

 

 

уравнение имеет ровно один

 

 

 

 

 

 

 

 

корень!

 

 

 

 

 

 

 

 

 

while b-a > e do

{продолжаем вычисление до нужной точности }

 

 

begin

 

 

 

 

 

 

 

 

 

c:=(a+b)/2;

{середина промежутка [a,b]}

 

 

if f(a)*f(c)<0

 

 

 

 

 

 

 

 

 

then b:=c

 

 

 

 

 

 

 

 

 

else a:=c;

 

 

 

 

 

 

 

 

 

end;

x:=(a+b)/2;

9