- •Глава 5
- •5.1. Простые операторы
- •5.1.1. Оператор присваивания
- •5.1.2. Оператор процедуры
- •5.1.3. Оператор перехода
- •5.1.4. Пустой оператор
- •5.2. Структурные операторы
- •5.2.1. Структурограммы (схемы Насси - Шнейдермана)
- •5.2.2. Составной оператор
- •5.2.3. Форматирование Паскаль-программ
- •5.2.5. Оператор варианта
- •5.2.6. Оператор цикла с параметром
- •5.2.7. Оператор цикла с постусловием
- •5.2.8. Оператор цикла с предусловием
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).