Відмінності у роботі циклів на перед- та післяумовою
Питання для вивчення
1. Цикл з передумовою WHILE … DO.
2. Цикл з післяумовою REPEAT… UNTIL.
3. Відмінності у роботі циклів на перед- та післяумовою.
Теоретичні відомості
Цикл з передумовою WHILE … DO
Розглянемо третю форму оператора циклу - WHILE…DO.
While умова do
Begin
Оператор 1;
Оператор 2;
…
оператор N;
end;
Приклад 6_1. Підрахувати суму чисел від 1 до 50.
Program summing_1;
Var
i,sum:integer;
Begin
Sum:=0;
I:=0;
while i <50 do
begin
i:=i+1;
Sum:=sum+i;
end;
Writeln (‘Сума чисел від 1 до 50 дорівнює :’,sum);
End.
В рамках прикладу 6 умова виконання циклу формулюється по іншому( необхідно додати всі числа від 1 до 50 (включно), тобто додати всі цілі числа які <= 50 ). Необхідно в кожному циклі збільшувати число i на одиницю і додавати його до вже відомої суми, тобто можна сказати: ” До тих пір, поки значення змінної не перебільшить визначенної величини, виконувати слідуючі операції.
Цикл з післяумовою REPEAT… UNTIL
При використанні в програмі циклічної конструкції REPEAT … UNTILпослідовність операторів (тіло циклу) обрамляється зарезервованими словамиREPEATіUNTIL. В будь-якому випадку послідовність операторів, що входять в тіло циклу, виконується один раз, після чого перевіряється умова завершення циклу, що записується після зарезервованого слова UNTIL. Якщо ця умова виконується, цикл завершується. В іншому випадку – тіло циклу повторюється ще раз, після чого знову перевіряється умова завершення циклу. Загальна форма запису оператора REPEAT … UNTILпоказана нище:
REPEAT
Оператор 1;
Оператор 2;
…
Оператор N;
UNTIL умова;
Приклад 6_2. Підрахувати суму чисел від 1 до 50.
Якщо ми повернемся до нашого прикладу підрахунку суми від 1 до 50 і перетворимо програму так, щоб в ній використовувався цикл REPEAT … UNTIL, то ми отримаємо слідуючу програму:
Program summing_up_2;
Var
i,sum: integer;
Begin
Sum:=0;
i:=0;
Repeat
i:=i+1;
Sum:=sum+i;
Untili=50
Writeln (‘Сума чисел від 1 до 50 дорівнює :’,sum);
End.
Тут необхідно врахувати, що для збільшення на 1 значення змінної і на кожному кроці циклу потрібен окремий оператор. Це пов’язано з тим, що цикл REPEAT … UNTIL не робить це автоматично( зверніть увагу на те, що змінна і, як і змінна Sum, ініціалізується на початку програми. Це необхідно для того, щоб лічба чисел в циклі REPEAT … UNTILпочиналася з відповідної величини). При кожному виконанні циклу в прикладі змінна і буде збільшуватися на 1. Коли до змінної Sum додається перший доданок, змінна імає значення 1. При останьому виконанні циклу зміннаі збільшується з 49 до 50 і додається до суми. В результаті змінна Sum містить суму всих чисел від 1 до 50 включно.
Відмінності у роботі циклів на перед- та післяумовою
Між конструкціями REPEAT … UNTIL і WHILE … DOмаються три істотні відміни:
· в конструкції WHILE … DO перевірка умови виходу виконується на початку, а не на початку циклу, тому, якщо умова не задовольняється до початку виконання циклу, то тіло циклу ігнорується і виконується оператор, що стоїть зразу ж після закінчення тілу циклу;
· в конструкції WHILE … DO умова виходу задовольняється, якщо вираз, що визначає умову виходу, хибний, а в конструкції REPEAT … UNTIL - якщо цей вираз істинний;
· між за резервованими словами REPEAT … UNTIL може розміщуватися декілька інструкцій, в той час як конструкція WHILE … DO може мати максимум одну конструкцію.
Приклад 7. Підрахувати нескінченну суму з заданою точністю e (e>0).
Вважати, що потрібна точність досягнута, якщо розрахована сума деяких перших доданків і наступний доданок став по модулю меншим за e, - цей і всі інші доданки можна не враховувати.
Підрахувати: .
Виберемо оператор циклу з післяумовою. Він характеризюється тим, що перевірка умови відбувається після проходження циклу, а послідовність операторів, що знаходятись між службовими словами repeatіuntil, виконується один або більше разів. Процес завершується, коли логічний вираз вперше прийме значення True. Іншими словами, цикл виконується до тих пір, поки умова хибна.
Program pruklad;
var a,s,add,eps:real;
begin
write(‘введіть потрібну точність exp=?’,#8);
readln(eps);
a:=1;add:=1;
s:=0;
repeat
s:=s+add;
a:=a*4;
add:=1/a;
until add<eps;
writeln(‘s=‘,s);
readln
end.
Ділення поточного доданка на слідуючий з метою знайти правило, по якому одне отримується з іншого, в цьому випадку нічого не дає. В знаменнику поточного доданку –сума степенів, розпишемо дану суму:
І представимо її поточний доданок add у вигляді. Тоді i=0,1,2,3,…a=1,4,16,64,…; очевидні початкові присваювання a:=1, add:=1 те, що ці велечини змінюються в тілі циклу a:=a*4, add:=1/a. Cумування в циклі виконується до тих пір, поки поточний доданок не менший заданої точності ( всі доданки додатні, тому модуль в умові опускаємо ).
Завдання
Скласти програму для розв’язання задачі. Зробити два варіанти задачі через цикли While та repeat
1. Знайти и–перший від’ємний член послідовності cos(ctg n ), n=1,2,3, …
2. Знайти член послідовності натуральних чисел 1,2,3,…, добуток яких D=1*2*3* …*n перевищує 1000
3. Знайти член послідовності натуральних чисел 1,2,3,…, сума яких S=1+2+3+ …+n перевищує 100
4. Дано дійсні C та e (e>0, X¹0 Підрахувати наближене значення нескінченної суми з точністю до e
5. Дано дійсні Х та e (X¹0,e>0). Підрахувати наближене значення нескінченної суми з точністю до e
6. Дано додатнє дійсне число a (a<1). Знайти серед чисел виду перше таке, що менше за а.
7. Знайти найменше n (в градусах), при якому сума sin1°+ sin2°+ sin3°+ … + sinN° перевищить задане число а.
8. Дано число n, 1<n<3 Знайти член послідовності натуральних чисел 1,2,3,…, сума яких … перевищує n.
9. Дано натуральне число n Обчисліть суму квадратів натуральних членів послідовності від 1 до n.
10. Дано натуральне число n, n<10 Обчисліть добуток натуральних членів послідовності від 1 до n.
Контрольні запитання
1. В яких випадках використовують умовні цикли?
2. Записати загальний вигляд циклу з передумовою. Як він працює?
3. Записати загальний вигляд циклу з післяумовою. Як він працює?