Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава7.doc
Скачиваний:
1
Добавлен:
16.04.2019
Размер:
139.26 Кб
Скачать

X, y, dx, a, b : real;

begin

write ('введите a, b, dx - ');

readln (a, b, dx);

x := a; {присваивание параметру цикла x

его начального значения}

repeat

{вычисления, предус­мотренные телом цикла}

y := sin(x * x);

writeln ('x=', x:10:3,' y=', y:10:3);

x := x + dx

until x > b {проверка условия выхода из цикла}

end.

Применяя операторы while и repeat, необходимо позаботиться о том, чтобы значения переменных, входящих в условие окончания цик­ла, менялись в теле цикла, иначе циклический процесс будет продолжаться бесконечно («зацикливание» программы).

Подчеркнем отличия между операторами repeat и while.

1. В операторе repeat проверка условия выхода из цикла про­изводится в конце, а не в начале цикла, поэтому тело цикла выпол­няется хотя бы один раз.

2. В операторе repeat условие выхода из цикла удовлетворяет­ся, если логическое выражение L истинно, а в операторе while - если ложно.

3. Тело цикла, организованного с помощью оператора while, может содержать только один оператор (в том числе и составной), в то время как между словами repeat и until их можно разместить несколько.

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

Пример 7.3

Найти сумму членов бесконечного ряда с точностью до чле­на ряда, меньшего :

При нахождении суммы такого ряда не следует вычислять от­дельно каждый элемент. Достаточно установить зависимость, по ко­торой из предыдущего элемента ряда образуется следующий. Обозначим через an n-й член ряда, тогда an+1 = an x / (n + 1), a0 = 1. Та­кой подход позволяет сократить количество вычислительных операций и уменьшить время счета. Сумму будем накапливать в переменной S, которую предвари­тельно необходимо обнулить. Условие окончания цикла an .

Ниже приведены два варианта программы. В первом варианте ис­пользован оператор while, во втором - repeat. Схема алгоритма со­ответствует второму варианту.

Схема алгоритма

Program example73;

var

x, s, e, a : real;

begin

write ('введите х и epsilon - ');

readln (x, e);

s:=0; n:=0;

a:=1; {задание параметру цикла

его начального значения}

while a > e do { проверка условия выхода из

цикла}

begin

s := s + a; n := n + 1; a := a * x / n

end;

writeln ('сумма ряда = ', s:10:3)

end.

Program example73a;

var

x, s, e, a : real;

begin

write ('введите х и epsilon - ');

readln (x, e);

s := 0; n := 0;

a := 1; { задание параметру цикла

его начального значения}

repeat

s := s + a; n := n + 1; a := a * x / n

until a < e; { проверка условия выхода из цикла}

writeln ('сумма ряда = ', s:10:3)

end.

В общем случае параметр цикла в процессе счёта задачи может выполнять следующие функции:

1) служить счётчиком числа выполненных повторений тела цикла;

2) в обращении к элементу массива играть роль индекса этого элемента (см. раздел 7.4);

3) участвовать в вычислениях, предусмотренных телом цикла, в качестве неиндексированной переменной; именно эту функцию выпол­няет параметр цикла в четырех предыдущих программах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]