52841.fb2 Я готуюсь до курсу інформатики. Алгоритмізація та програмування - читать онлайн бесплатно полную версию книги . Страница 21

Я готуюсь до курсу інформатики. Алгоритмізація та програмування - читать онлайн бесплатно полную версию книги . Страница 21

УРОК 20. Цикли з передумовою

Мета уроку: Навчити використовувати цикл з передумовою для розв’язування типових задач.

На початку уроку рекомендується провести письмове опитування (можна у вигляді диктанту) по матеріалах попереднього уроку. Далі можна розглянути деякі типові задачі з використанням циклу з передумовою. Нагадуємо, що в усіх цих задачах кількість повторень буде визначатись залежно від початкових та кінцевих умов.

ЗАДАЧА № 180

Умова: Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив одружитися з нею. Василина запитала Чахлика, скільки у нього скринь із золотом. Чахлик відповів, що зараз у нього я скринь і щороку додається ще по т скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чахлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?

Program Example_180;

Uses crt;

Var m,n,k:word;

{n - початкова кількість скринь із золотом, m - щорічний «прибуток» Чахлика, k - «потреби» Василини Премудрої}

Sum,Years:word; {Sum - щорічне накопичення Чахлика, Years -вік Василини Премудрої}

Begin

Clrscr;

Write(‘Введіть початкову кількість скринь з золотом: ‘);

Readln(n);

Write (‘ Введіть щорічний прибуток Чахлика: ‘) ;

Readln(m);

Write(‘Введіть «потреби» Василини Премудрої: ‘);

Readln(k) ;

Sum:=п;{Початковий «капітал» Чахлика}

Years:=18;{Початковий вік Василини}

While Sum<=k do

Begin

Sum:=Sum+m;

Years:=Years+1;

End;

Writeln(‘Василиях вже виповнилося ‘,Years,’ років.’);

Readkey;

End.

ЗАДАЧА № 197

Умова: Дано натуральне число п. Визначити суму цифр у числі. Для розв’язку цієї задачі використаємо такий штучний прийом: щоб знайти суму цифр, ми повинні «брати» цифри по одній і додавати їх однадо одної, а потім використану цифру «відкидати». Це нам дозволять зробитиоперації ділення націло та знаходження залишку від цілочисельногоділення. Так, при діленні числа націло на 10 остання цифра числа буде«відкидатися», а при знаходженні залишку від ділення націло ми виділяємоостанню цифру числа. Тобто: 123 div 10 = 12 3928 mod 10 = 8.

Процес буде повторюватись, доки від числа «нічого не залишиться», тобто, доки воно не перетвориться на нуль. Програма, що реалізує описаний алгоритм, має такий вигляд:

Program Example_197_2;

Uses crt;

Var n:longint; {N - дане число}

Sum:byte; {Sum - сума цифр числа}

Begin

Clrscr;

Sum:=0; {Сума цифр числа спочатку дорівнює 0}

Write(‘Введіть ціле число: ‘);

Readln(N);

N:=abs(N);

While N>0 do

Begin

Sum:=Sum+N mod 10; {Знаходження суми цифр}

N:=N div 10; {«Відкидання» останньої цифри числа}

End;

Writeln(‘Sum= ‘,Sum);

Readkey;

End.

ЗАДАЧА №204

Умова: Дано ціле число т > 1. Знайти найбільше число к, при якому виконується умова 4к < т.

Program Example_204;

Uses crt;

Var m,k,Rez:longint; {Rez - обчислення степеню 4}

Begin

Clrscr;

Write(‘Введіть значення m (m>1): ‘);

Readln(m);

Rez:=1;

k:=0;

While Rez<m do

Begin k:=k+l; Rez:=Rez*4; End;

Writeln(‘k= ‘ ,k) ;

Readkey;

End.

ЗАДАЧА № 208

Умова: Під час обчислення результатів деяких експериментів виникає необхідність отримання результату із заданою похибкою. Нехай результатом є нескінченна сума, що задається певною формулою, і відома похибка e (e > 0) для знаходження наближеного значення результату. Будемо вважати, що необхідна точність досягнута, коли додавання наступного доданку змінює суму на величину, меншу за e. Обчислити:

1

i=1

i2

Розв’язання:

У даній задачі перед обчисленням чергової суми ми порівнюємо наступний доданок з похибкою і якщо доданок менше, обмеження припиняються.

Program Example_208_1;

Uses crt;

Var і:word;

Rez,Epsilon:real; {Rez - результат обчислень, Epsilon - похибка}

Begin

Clrscr;

Rez:=0; {Початкове значення дорівнює 0, тому що результат є накопиченням суми}

Write(‘Введіть значення похибки (Е>0): ‘);

Readln(Epsilon); і:=1;

While 1/sqr(i)>Epsilon do

Begin Rez:=Rez+1/sqr(i) i:=i+1; End;

Writeln(‘Rez= ‘,Rez:8:2); Readkey;

End.

ЗАДАЧА №212

Умова: Обчислити значення числа тс, використовуючи формулу

Знайти, кількість доданків що дає значення числа тс з точністю до 3 знаків.

Розв’язання: Для організації циклу з передумовою в цій задачі необхідно мати еталон числа тс для порівняння з нескінченною сумою. Візьмемо за цей еталон значення вбудованої функції Рі. Крім того, за умовою задачі нам необхідно отримати результат із точністю до третьої цифри після коми. Пропоную для цього стандартне число π і отриману нескінченну суму помножити на число 1000 та округлити результат за допомогою функції round (отриману суму, крім того, необхідно ще помножити на 4, оскільки сама сума є чвертю числа π). Зверніть увагу також на те, що в нескінченній сумі доданки, що стоять на парних місцях, додаються зі знаком «+», а доданки на непарних місцях—віднімаються від суми. Тобто, залежно від номера доданку (парний чи непарний) ми організовуємо знакочергування у нескінченній сумі. Програма для обчислення числа тс за допомогою нескінченної суми наведена нижче:

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).