Program Exarople_212 ;
Uses crt;
Var і,n:word;
{і - параметр циклу, п - кількість доданків}
Rez_Pi:real; {Rez_Pi - обчислене значення числа Рі}
Begin
Clrscr;
Rez_Pi:=0;
і: =1; {і — значення знаменника першого доданkа}
п:=0; {п - доданків ще нема}
while round(pi*1000)=round(Rez_Pi*4000) do
Begin
If n mod 2=0 Then Rez_Pi:=Rez_Pi+1/i
Else Rez_Pi:=Rez_Pi-1/i;
i:=i+2;
n:=n+1;
End;
Writeln(vКількість необхідних доданків - ‘,n);
Writeln(“Порівняйте значення Рі: ‘);
Writeln(‘Результат обчислень програми: ‘,Rez_Pi:8:3);
Writeln(‘Вбудована функція: ‘ ,Рі:8:3) ;
Readkey; {Затримка зображення на екрані}
End.
Домашнє завдання
• Виконати задачі № 185, № 198 (3), № 200 (1), № 203 (3), № 205, № 208 (2).
УРОК 21. Цикли з післяумовою
Мета уроку: навчити використовувати цикл з післяумовою для розв’язування типових задач.
На початку уроку рекомендується повторити типи циклів, формати опису та порівняльну характеристику циклів. Далі можна розглянути деякі типові задачі з використанням циклу з післяумовою. Нагадуємо, що в усіх цих задачах кількість повторень заздалегідь невідома і тому, фактично, основним длярозв ‘язку цієї задачі є правильно підібрати умову виходу з циклу.
ЗАДАЧА №179
Умова задачі: На дверях ліфта висіло загрозливе попередження про те, що двері самі зачиняються в той самий момент, коли зайвий за вагою пасажир переступить поріг ліфта. Котрий пасажир постраждає, якщо ліфт витримує вагу не більше S кг, а вага пасажирів, що стоять у черзі до ліфта, дорівнює відповідно a1, а2, а3, ... ап?
Розв’язання: У цій задачі зручніше використовувати цикл з післяумовою, тому що спочатку необхідно дати можливість «увійти» пасажиру в ліфт, а потім перевіряти, чи витримає його ліфт. Умовою виходу з циклу буде перевищення сумарної ваги пасажирів, що увійшли в ліфт, деякого заданого критичного значення. Для зберігання ваги чергового пасажира в цій задачі ми будемо використовувати одну й ту саму змінну (А), оскільки після перевірки вага пасажира нас уже не цікавить. Програма має вигляд:
Program Ехаmрlе_179;
Uses crt;
Var N:word; {I - номер пасажира, що увійшов у ліфт}
Sum,A,S:real; {Sum - сумарна вага пасажирів, що знаходяться в ліфті, А - вага чергового пасажира, що увійшов до ліфта, S - критична вага, що може бути піднята ліфтом}
Begin
Clrscr;
Sum:=0;
N:=0; {На початху роботи програми в ліфті немає пасажирів}
Write(‘Введіть критичну вагу, що піднімає ліфт: ‘);
Readln(S);
Repeat
Write(‘Введіть вагу чергового пасажира: ‘);
Readln(A);
Sum:=Sum+A;
N:=N+1;
Until Sun>S;
Writeln(‘Постраждає ‘,N,’-й пасажир.’);
Readkey;
End.
ЗАДАЧА №181
Умова: Капосний папуга навчився висмикувати у дідуся Василя волосся, яке ще залишилося у того на голові. Почавши з однієї волосини, він щодня збільшував порцію вдвічі. Через скільки днів дідусеві не знадобиться гребінець, якщо спочатку в нього на голові було аж N волосин?
Розв ‘язання: Аналогічно до попередньої задачі, аналізувати наявність волосся на голові слід після того, як папуга вже висмикнув чергову порцію волосся. А «знущання» над дідусем скінчиться тоді, коли гребінець йому стане непотрібним, тобто кількість волосся на голові дорівнюватиме нулю. Зверніть увагу, що в цій задачі змінна S використовується для підрахунку чергової порції волосся, що підлягає висмикуванню капосним папугою.
Program Example_181;
Uses crt;
Var S,N,Sum:longint; {S - кількість волосся, що буде висмикнутим, Sum - кількість волосся, що залишилося в дідуся на голові, N - початкова кількість волосся}
Day:word;
{Day — номер дня, який папуга знущається над дідусем}
Begin
Clrscr;
Write(‘Початкова кількість волосся в дідуся на голові: ‘) ;
Readln(N) ;
If N=0
Then writeln(‘Дідусь уже лисий, папузі нічого робити!’)
Else
begin
Day:=0;
Sum: =N ;
S:=1;
{Початкова кількість волосся, що буде висмикнуте папуго»}
Repeat
Sum:=Sum-S; {Зменшення дідусевого волосся}
S:=S*2;
Day:=Day+1; {Підрахунок номеру дня}
Читать дальше