Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5.DOC
Скачиваний:
0
Добавлен:
09.11.2018
Размер:
102.4 Кб
Скачать

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

Этот оператор имеет вид:

REPEAT S1;S2;...Sn UNTIL B ,

где S1,S2,...Sn - операторы (любые);

B - выражение булевского типа.

Цикл заканчивается, когда булевское выражение B принимает значение TRUE.

В этом цикле тело цикла (группа операторов S1,S2,...Sn ) выпол-няется как минимум один раз.

Пример 5.2.12. Вводить целые числа до тех пор, пока не встретится число, равное нулю, но не более 20 штук. Вычислить сумму введенных чисел и их количество.

PROGRAM KolSum;

CONST n=20;

VAR a,sum,kol : integer;

BEGIN

kol:=0;

sum:=0;

REPEAT

Write('Число= '); ReadLn(a);

kol:=kol+1;

sum:=sum+a

UNTIL (a=0) OR (kol=n);

WriteLn('Сумма= ', sum, ' количество= ', kol) END.

kol = 0

sum = 0

ввод числа(a)

kol = kol+1

sum = sum+a

до (a=0) или (kol=20)

печать (kol,sum)

Рис.5.9. Схема к примеру 5.2.12

Пример 5.2.13. Ввести число целого типа. Определить, из скольких цифр оно состоит. PROGRAM Knum;

VAR a,kc : integer;

BEGIN

Write('Число=? '); ReadLn(a);

kc:=0;

REPEAT

a:=a DIV 10;

kc:=kc+1

UNTIL a=0;

WriteLn('Количество цифр= ',kc)

END.

.

Пример 5.2.14. Вычислить с абсолютной погрешностью e.

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

Вторая проблема: как вычислить очередной член ряда. Не вникая в недостатки независимого вычисления каждого члена ряда, предложим так называемый рекуррентный способ:

т.е. очередной член (с номером k) получается из предшествующего (с номе-ром k-1) простым алгебраическим действием. Такой способ следует исполь-зовать при вычислениях элементов последовательностей во всех случаях, где это возможно.

ввод (e)

s=1; k=0; ak=1;

k = k+1;

ak = ak/k;

s = s+ak;

до ak < e

печать (e)

Рис.5.10. Схема к примеру 5.2.14

PROGRAM Neper;

VAR s,ak,k,eps : real;

BEGIN

Write('Погрешность= '); ReadLn(eps);

s:=1;

k:=0;

ak:=1;

REPEAT

k:=k+1;

ak:=ak/k;

s:=s+ak

UNTIL ak < eps ;

WriteLn('Сумма= ', s)

END.

Задачи

5.2.14. Вводить по два символа до тех пор, пока оба символа не будут одинаковыми. Подсчитать количество пар, в которых оба символа: а) соседствуют в таблице ASCII; б) не являются буквами латинского алфавита; в) являются цифрами.

5.2.15. По заданным n,e вычислить

(точный результат для справки: S = n2/ (n2 +1 )).

5.2.16. По заданным n,e вычислить

(результат для справки: S=sinx).

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