Я готуюсь до курсу інформатики. Алгоритмізація та програмування



Сторінка5/9
Дата конвертації19.02.2016
Розмір1.47 Mb.
1   2   3   4   5   6   7   8   9

УРОК 17. Вказівка вибору

Мета уроку Дати поняття про форми вказівки вибору


Теоретичний матеріал
Цей оператор є узагальненням оператора if і дозволяє зробити вибір із довільного числа наявних варіантів. Він складається з виразу, що називається селектором, і списку параметрів, кожному з яких передує список констант вибору (список може складатися і з однієї константи). Як і в операторі if тут може бути присутнім слово else, що має той же зміст. Формат опису
case < вираз-селектор > of
список констант вибору1 > < оператор 1 >;
список констант вибору 2 > < оператор 2 >;
. . . .
список констант вибору n > < оператор n >
else < оператор >
end;
Оператор case працює наступним чином. Спочатку обчислюється значення виразу-селектора, потім забезпечується реалізація того оператора, константа вибору якого дорівнює поточному значенню селектора. Якщо жодна з констант не дорівнює поточному значенню селектора, виконується оператор, що знаходиться за словом else. Якщо слово else відсутнє, активізується оператор, що знаходиться за словом end, тобто перший оператор за межею дії case.
Селектор повинен відноситися до одного з перелічувальних типів (цілого, булівського або літерного). Дійсні та рядкові типи використовувати в якості селектора заборонено. Список констант вибору складається з довільної кількості значень або діапазонів, відділених один від одного комами. Межі діапазону записуються двома константами через складений символ діапазону «..». Тип констант у будь-якому випадку повинен збігатися з типом селектора. Щоб краще зрозуміти використання оператора вибору, розглянемо кілька типових задач.
ЗАДАЧА №134
Умова задачі Розробити діалогову програму, яка запитує вік користувача і визначає, до якої вікової категорії він належить
1) від 1 до 10 років — дитина;
2) від 11 до 15 років - підліток;
3) відіб до 20 років - юнак (юнка);
4) від 21 до 30 років - молода людина;
5) після 31 року - доросла людина.
Особливих пояснень ця задача не потребує, адже її можна розв’язати і за допомогою команди розгалуження. Однак зробимо її за допомогою команди вибору, причому, щоб скористатися гілкою Else, будемо вважати, що людина може мати вік не більше 150 років (навіть за всіма відомими рекордами, людина не може жити більше 150 років). Якщо ж користувач введе число, що не входить у дозволений діапазон, будемо вважати, що він пожартував.
Program Example_134;
Uses crt;
Var Yearsbyte; {Years - вік користувача}
Begin
Clrscr; {Очищення екрану}
Write (‘Введіть Ваш вік ‘).;
Readln(Years);
Write(‘Ви ‘);
Case Years of
0..10 Writeln(‘- дитина.’);
11.. 15 Writeln(‘- підліток.’);
16..20 Writeln(‘- юнак (юнка).’);
21..30 Writeln(‘- молода людина.’);
31..150 Writeln(•- доросла людина.’)
Else writeln(‘, пожартували? Людина стільки не живе!’);
End;
Readkey; {Затримка зображення на екрані}
End.
ЗАДАЧА №151
Умова Розробити програму виведення інформації про день тижня, (вихідний чи робочий), якщо задано його номер від 1 до 7 (1 - понеділок).
Program Example_149;
Uses crt;
Var Daybyte; {Day - номер дня тижня}
Begin
Clrscr;
Write(‘Введіть номер дня тижня ‘);
Readln(Day);
Case Day of
1..5 Write(‘Це робочий день ‘);
6,7 Write(‘Це вихідний день ‘);
Else write(‘Це не день ‘);
End;
Writeln(‘тижня.’);
Readkey;
End.
ЗАДАЧА №160
Умова Дано ціле число N (1 > N > 3) та дійсне число X. За даним значенням змінної N, яка є номером функції, визначити
1) sin X
2) cos X
3) tg X.
Program Example_160;
Uses crt;
Var Nbyte; {N - номер функції, що обчислюється}
X,Yreal; {X - значення змінної, Y - значення функції)
Begin
Clrscr;
Write(‘Введіть значення X ‘);
Readln(X);
Write(‘Введіть номер функції, що обчислюється ‘);
Writeln(‘1 - sin’) ;
Writeln(‘2 - cos’);
Writeln( ‘3 - tg’);
Readln(N);
Writeln(‘Результат обчислень’)
Case N of
1 begin Y=sin(X); writeln(‘sin(x)=’,Y82); end;
2 begin Y=cos(X); writeln(‘cos(x)=’,Y82); end;
3 begin Y=Sin(X)/cos(X); writeln(‘tg(x)=’,Y82);
end;
Else wrіteIn(‘Помилка вхідних даних.’);
End;
Readkey;
End.
ЗАДАЧА №165
Умова Дано натуральне число N(N=< 100), яке позначає вік людини. Додати до цього числа відповідно слова «рік», «роки», «років», наприклад 1 рік, 12 років, але 43 роки.
Очевидно, що для того, щоб правильно дописати відповідне слово, необхідно виділити останню цифру числа, що позначає вік людини. Тоді, якщо це цифра «1», то дописується слово «рік», якщо цифри «2», «З» або «4» - дописується слово «роки», а в усіх останніх випадках - дописується слово «років». Виключенням являється діапазон між 10 та 20 роками в цих випадках завжди пишеться слово «років».
Program Example_165;
Uses crt;
Var Yearsbyte; {Years - вік людини}
Begin
Clrscr;
Write(‘Введіть Ваш віk ‘);
Readln(Years);
If Years>100 Then writeln(‘Помилкові вхідні дані.’)
Else
Begin
Write(‘Вам ‘,Years);
If (Years>=10) and (Years<=20) Then writeln(‘років’)
Else
Case Years mod 10 of
1 writeln(‘рік.’);
2 . . 4 writeln(‘роки.’);
0,5..9 writeln(‘років.’);
End;
End;
Readkey;
End.
Домашнє завдання
• прочитати сторінки 65 - 66 запропонованого підручника;
• завдання №147, №148, №155, №157, №161.

УРОК 18. Типи циклів

Мета уроку дати поняття про вказівку повторення та її використання при розв’язуванні задач, про типи циклів та їх оформлення мовою програмування Паскаль і мовою блок-схем.


Теоретичний матеріал
На початку уроку повторити з учнями загальні відомості про цикли. У мові програмування Паскаль існує три типи циклів for, repeat та while. Якщо кількість повторень відома заздалегідь, використовується оператор for, якщо кількість повторень невідома, застосовуються оператори repeat або while.
Оператор повторення for. Цей оператор повторення інакше називається циклом з параметром (або лічильником). Він складається із заголовку та тіла циклу і може бути поданий у двох форматах
1.for <параметр цихлу> = <S1> to <S2> do
begin
<серія>;
end;
2. for <параметр циклу> = <S1> downto <S2> do
begin
<серія>;
end;
де 51 і 52 — вирази, що визначають початкове і кінцеве значення параметру циклу; for.. do — заголовок циклу; <серія> — тіло циклу.
Тіло циклу може бути простим або складеним. Цей оператор забезпечує виконання тіла циклу доти, доки не будуть перебрані всі значення параметра циклу від початкового до кінцевого.
Параметр циклу, його початкове і кінцеве значення повинні належати до одного типу даних. При цьому можливе використання будь-якого скалярного типу цілого (integer, byte, word, longint); булівського (boolean); символьного (char). Дійсний тип даних використовувати заборонено. Значення параметру циклу послідовно збільшується при for... to або зменшується при for... downto на одиницю при кожному повторі. Кількість повторів тіла циклу в операторі for можна визначити за таблицею
Оператор
S1<S2
S1=S2
S1>S2
for... to
S2-S1+1 разів
1 раз
He виконується
for...downto
He виконується
1 раз
S1-S2+1 разів
В операторі for після do може знаходитися складений оператор, у тілі якого заборонені оператори, що змінюють значення параметру циклу. Після нормального завершення циклу значення параметру циклу дорівнює кінцевому значенню. Цикл може не виконатися зовсім (див. табл.), але ніколи не може «зациклитися», на відміну від наступних двох операторів повторення.
Приклад програми з оператором For
Умова задачі. Знайти суму всіх натуральних чисел від 1 до 100.
Program Example_1;
Uses crt;
Var Sum, i integer;
Begin
Clrscr;
Sum= 0;
For i= 1 to 10 do Sum= Sum + i;
Writeln(‘Sum = ‘ Sum); Readkey;
End.
Оператор повторення repeat. Цей оператор циклу складається із заголовку (repeat), тіла та умови закінчення (until).
Формат опису
repeat
<серія>
until < умова >;
Умова — вираз булівського типу. Про умови ми вже говорили в темі «Команда розгалуження», і всі особливості їх застосування та оформлення в цій команді нічим не відрізняються від попереднього випадку. У цьому циклі спочатку виконується серія (тіло циклу), а потім перевіряється умова виходу з циклу. Саме тому ця команда повторення інакше називається циклом із післяумовою. Якщо умова виходу з циклу хибна (false), цикл активізується ще раз, якщо результат істинний (true), відбувається вихід із циклу.
Такий оператор повторення має наступні характерні риси
• використовується коли не відома заздалегідь кількість повторень;
• тіло циклу виконується хоча б один раз;
• тіло циклу виконується, поки умова хибна (false);
• у тілі може знаходитися будь-яка кількість операторів без операторнихдужок (begin... end);
• принаймні один оператор у тілі циклу повинен змінювати значенняумови, інакше цикл буде виконуватися нескінченно.
Для передчасного виходу з циклу можна присвоїти параметру циклу значення, що виходить за діапазон дозволених значень.
Приклад програми з оператором Repeat
Умова задачі. Перевірка коректності введення. Дано три числа, що задають величини кутів трикутника. Визначити, чи можна побудувати трикутник, що має задані кути. Якщо ні, користувач повинен ввести інші дані.
Program Example_2;
Uses crt;
Var a,b,c integer;
Begin
Clrscr;
Repeat
Write(*Введіть величини кутів трикутника ‘);
Readln(а,b,с);
Until (a>0)and(b>0)and(c>0)and(a+b+c)=180;
End.
Оператор повторення while. Оператор while аналогічний оператору repeat, але перевірка умови виконання тіла циклу виконується на самому початку оператора, тому цикл інакше називається циклом із предумовою.
Формат опису
while < умова > do
begin
<серія>;
end;
Умова—булівський вираз, а серія—простий або складений оператор. Перед кожним виконанням тіла циклу обчислюється значення виразу умови. Якщо результат є істинним (true), тіло циклу виконується, а інакше відбувається вихід із циклу і перехід до першого після while оператору. Якщо перед першим виконанням циклу значення виразу було хибним (false), то тіло циклу взагалі не виконується і відбувається перехід на наступний оператор.
Як і в попередньому випадку, програміст сам повинен подбати про переприсвоєння значення змінної, що визначає умову виходу з циклу, інакше він буде нескінченним.
Приклад програми з оператором While
Умова. Дано натуральне число N. Визначити кількість цифр у числі.
Program Example_3;
Uses crt;
Var N longint; Counter integer;
Begin
Clrscr;
Write(‘Введіть число ‘);
Readln(N);
Counter= 0;
While N > 0 do
Begin
Counter=Counter+1; {Підрахунок кількості цифр}
N=N div 10; {Відкидання останньої, цифри}
End;
Writeln(«Кількість цифр у заданому числі дорівнює’, N);
Readkey;
End.
Домашнє завдання
• Прочитати сторінки 83 — 89 із запропонованого підручника;
• Вивчити означення, що прочитані на лекції.

УРОК 19. Цикли з параметром

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


На початку уроку рекомендується провести письмове опитування по матеріалах попереднього уроку. Далі можна розглянути деякі типові задачі з використанням циклу з параметром. Нагадуємо, що в усіх цих задачах кількість повторень буде відома заздалегідь.
ЗАДАЧА №183
Умова задачі Компанія бабусь поїхала на мотоциклах на курси комп’ютерної грамотності. Попереду на мотоциклі без глушника їхала одна бабуся, за нею - дві, потім - три і т.д. Скільки бабусь їхало на заняття, якщо приголомшені пішоходи всього нарахували N рядів? Чи змогли бабусі зайняти всі місця у класі, якщо там стояло k рядів по / комп’ютерів у кожному? Скільки вільних місць залишилося?
Розв’язання Зверніть увагу на те, що фактично ця задача зводиться до знаходження суми всіх натуральних чисел від 1 до N. У кінці задачі для повторення команди розгалуження учням пропонується визначити кількість зайнятих бабусями та вільних місць. Програма розв’язання даної задачі має такий вигляд
Program Example_183;
Uses crt;
Var I,N,Sumword;{I - параметр циклу, N - кількість рядів мотоциклів. Sum - кількість бабусь, що приїхали на курси} Place,k,word;{k - кількість рядів у комп’ютерному класі, 1 - кількість комп’ютерів у кожному ряду, Place - кількість місць, якої вистачило для бабусь}
Begin
Clrscr;
Sum=0;
Write(‘Введіть кількість рядів мотоциклів ‘);
Readln(N);
For I=1 to N do Sum=Sum+I;
Writeln(‘Кількість бабусь, що приїхали на курси ‘,Sum);
Writeln(‘Кількість комп’ютерів на курсах ‘,к*1) ;
If Sum<k*l
Then writeln(‘Бабусі не змогли зайняти всі місця.’)
Else writeln(‘Бабусі зайняли всі місця.’);
Place=Sum - к*1;
If Place>0
Then writeln(‘Бабусям не вистачило ‘,Place,’ місць.’);
Readkey;
End.
ЗАДАЧА № 189
Умова Знайти значення
(1 + 0.1)(2 + 0.2)...(9 + 0.9)
Розв’язання У даному випадку кількість повторів буде дорівнювати 9, тобто програма буде мати вигляд
Program Example_189_2;
Uses crt; Var Iword; {I - параметр циклу}
Rezreal; {Rez - результат обчислень}
Begin
Clrscr;
Rez=1; {Початкове значення дорівнює 1, тому що результат є накопиченням добутку}
For I=1 to 9 do Rez=Rez*(I+0.1*I);
Writeln(‘Rez= ‘,Rez82);
Readkey;
End.
ЗАДАЧА № 190
Умова задачі Дано ціле п. Визначити п!
Розв’язання Відомо, що n! (вимовляється як n-факторіал) - це добуток всіх натуральних чисел від 1 до п. Тому програма має вигляд
Program Example_190_1;
Uses crt;
Var I,nword; {I - параметр циклу}
Factorialongint; {Factorial - результат обчислень}
Begin
Clrscr;
Factoria=1;
Write(‘Введіть значення n ‘);
Readln(n);
For I=1 to n do Factoria=Factorial*I;
Writeln(‘Factorial= ‘, Factoria82); Readkey;
End.
ЗАДАЧА № 191
Умова задачі За данимнатуральним значенням змінної п обчислити

Розв’язання Для розв’язання цієї задачі необхідно виконати обчислення, починаючи з самого вкладеного кореня. Кожний наступний крок обчислюється таким чином до попереднього результату додається двійка і з отриманої суми береться квадратний корінь.


Програма, що виконує описані обчислення, наведена нижче
Program Example_191_6;
Uses crt;
Var I,nword;{I - параметр циклу}
Rezreal;{Rez - результат обчислень}
Begin
Clrscr;
Rez=0; {Початкове значення дорівнює 0,току що результат є накопиченням суми}
Write(‘Введіть значення n ‘);
Readln(n);
For I=1 to n do
Begin Rez=sqrt(Rez+2);
End;
Writeln(‘Rez= ‘,Rez82);
Readkey;
End.
ЗАДАЧА №210
Умова Дано ціле число п, яке набуває значень шкільних оцінок. Визначити відповідною кількістю звукових сигналів, яка саме оцінка була задана («1» - один звуковий сигнал, «2» - два сигнали і т.д.). Якщо ж задане число не відповідає значенню шкільної оцінки—подати довгий звуковий сигнал.
Розв ‘язання Звуковий сигнал у цій програмі можна подавати за допомогою процедур керування вбудованим динаміком sound та nosound. Перша з них викликає звучання ноти заданої частоти (частота вказується в дужках після процедури), а друга виключає динамік. Тривалість звучання та паузи між звуками можна задавати процедурою delay, параметром якої є змінна time (значення цієї змінної можна задати командою присвоєння або введенням із клавіатури). Отже, програма має вигляд
Program Example_210;
Uses crt;
Var I,nword; {I - параметр циклу, n - оцінка учня}
Timeword;
Begin
Clrscr;
Write(‘Введіть Вашу оцінку ‘);
Readln(n);
Time=10000;
{Значення цієї змінної залежить від характеристик комп’ютера, і може бути підібрана практичним шляхом}
If (n<1) or (n>12) Then
begin
writeln(‘Ви помилились, такої оцінки не існує.’);
sound(200); delay (time 5); nousound;
end
Else
For I=1 to n do
Begin
Sound(200); Delay(time);
Nousound; Delay(time);
End;
Readkey;
End.
Домашнє завдання
• Повторити теоретичний матеріал по роботі циклу з параметром;
• виконати задачі № 189 (4), № 190 (3), №191, № 211, № 178, № 188.

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

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


На початку уроку рекомендується провести письмове опитування (можна у вигляді диктанту) по матеріалах попереднього уроку. Далі можна розглянути деякі типові задачі з використанням циклу з передумовою. Нагадуємо, що в усіх цих задачах кількість повторень буде визначатись залежно від початкових та кінцевих умов.
ЗАДАЧА № 180
Умова Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив одружитися з нею. Василина запитала Чахлика, скільки у нього скринь із золотом. Чахлик відповів, що зараз у нього я скринь і щороку додається ще по т скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чахлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?
Program Example_180;
Uses crt;
Var m,n,kword;
{n - початкова кількість скринь із золотом, m - щорічний «прибуток» Чахлика, k - «потреби» Василини Премудрої}
Sum,Yearsword; {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 nlongint; {N - дане число}
Sumbyte; {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,Rezlongint; {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,Epsilonreal; {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= ‘,Rez82); Readkey;
End.
ЗАДАЧА №212
Умова Обчислити значення числа тс, використовуючи формулу

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


Розв’язання Для організації циклу з передумовою в цій задачі необхідно мати еталон числа тс для порівняння з нескінченною сумою. Візьмемо за цей еталон значення вбудованої функції Рі. Крім того, за умовою задачі нам необхідно отримати результат із точністю до третьої цифри після коми. Пропоную для цього стандартне число і отриману нескінченну суму помножити на число 1000 та округлити результат за допомогою функції round (отриману суму, крім того, необхідно ще помножити на 4, оскільки сама сума є чвертю числа ). Зверніть увагу також на те, що в нескінченній сумі доданки, що стоять на парних місцях, додаються зі знаком «+», а доданки на непарних місцях—віднімаються від суми. Тобто, залежно від номера доданку (парний чи непарний) ми організовуємо знакочергування у нескінченній сумі. Програма для обчислення числа тс за допомогою нескінченної суми наведена нижче
Program Exarople_212 ;
Uses crt;
Var і,nword;
{і - параметр циклу, п - кількість доданків}
Rez_Pireal; {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_Pi83);
Writeln(‘Вбудована функція ‘ ,Рі83) ;
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 Nword; {I - номер пасажира, що увійшов у ліфт}
Sum,A,Sreal; {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,Sumlongint; {S - кількість волосся, що буде висмикнутим, Sum - кількість волосся, що залишилося в дідуся на голові, N - початкова кількість волосся}
Dayword;
{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; {Підрахунок номеру дня}
Until Sun<=0;
Writeln(‘Папуга знущався над дідусем ‘,Day,’ днів.’);
End;
Readkey;
End.
ЗАДАЧА №209
Умова На скільки років необхідно покласти в банк суму X грошових одиниць, щоб одержати суму N грошових одиниць (N > X), якщо банк нараховує 200 % річних?
Розв’язання.Очевидно, що умовою виходу з цього циклу буде отримання заданої суми грошей. Якщо за умовою задачі N > X, то кожну перевірку ми будемо виконувати після того, як до вкладеної суми додамо щорічний банківський процент. Отже, програма має вигляд
Program Example_209;
Uses crt;
Var X,Nreal; {X - початковий внесок, N - бажана сума} Rezrreal; {Rez - результуюча сума на рахунку} Yearslongint; {Years - термін, протягом якого сума перебувала в банку}
Begin
Clrscr;
Write(‘Введіть початкову суму внеску ‘);
Readln(X);
Write(‘Введіть бажану суму внеску ‘);
Readln(N);
If N<=X
Then writeln(‘Bn вже маєте бажану суму!’)
Else
Begin
Rez=X;
Years=0;
Repeat
Rez=3*Rez;
{200% річних збільшують за рік внесок втричі}
Years=Years+l;
Until Rez>=N;
Writeln( ‘Ви отримаєте бажану суму через ‘,years,’ років’) ;
End;
Readkey;
End.
ЗАДАЧА №231
Умова Скласти програму, яка б допомогла працівникам ДАІ визначати кількість порушників перевищення швидкості на трасі, якщо відомо, що на даному проміжку траси встановлено обмеження на швидкість Vmax, a прилад фіксує швидкість автомобілів V1 V2,..., Vn.
Розв ‘язання В даній задачі ніяким чином не обумовлена умова виходу з циклу, тому є пропозиція процес підрахування порушників необхідно закінчити тоді, коли чергове введене число буде недодатнім (дійсно, з від’ємною або нульовою швидкістю автомобіль рухатися не може). Для тимчасового зберігання значення швидкості чергового автомобіля ми будемо знову використовувати одну змінну. Програма, що виконує задані обчислення, має наступний вигляд
Program Example_231;
Uses crt;
Var V,Vmaxreal; {V - швидкість автомобіля, Vmax - максимально дозволена швидкість}
Countlongint; {Count - кількість порушників}
Begin
Clrscr;
Count=0; {На початку роботи порушники відсутні}
Write(‘Значення максимально дозволеної, швидкості ‘);
Readln(Vmax);
Vmax=abs (Vmax) ; {Знаходження модуля для виключення помилки введення від’ємної максимальної швидкості}
Repeat
Write(‘Значення швидкості чергового автомобіля ‘);
Readln(V);
If V>Vmax then Count=Count+1;
Until V<=0;
Writeln(‘Кількість порушників ‘,Count);
Readkey;
End.
ЗАДАЧА №251
Умова Дано натуральне число п і дійсні числа а1 а2, .... ап. Відомо, що в заданій послідовності є хоча б одне нульове значення. Розглядаючи члени послідовності, що розташовані до першого нульового члена, визначити середнє арифметичне членів.
Розв ‘язання Для розв’язку цієї задачі значення п є зайвим, якщо серед членів послідовності буде хоча б один нульовий елемент, тому ми враховувати цю змінну не будемо (хоча дітям можна пояснити, що у випадку відсутності нульового члена послідовності змінна n може використовуватись як додаткова для виходу з циклу, щоб виключити зациклення програми).
Отже, оскільки ми не знаємо, коли зустрінеться нульовий елемент, у програмі знаходиться сума всіх чисел послідовності (змінна sum) та кількість введених чисел (змінна count), а після виходу з циклу вже знаходиться безпосередньо середнє арифметичне членів послідовності як результат ділення суми на кількість чисел, зменшену на одиницю. Зменшення на одиницю відбувається тому, що фактично в тілі циклу буде підраховано один зайвий нульовий елемент (останній).
Програма має вигляд
Program Example_251_5;
Uses crt;
Var countword; {count - кількість членів послідовності до першого нульового елемента}
a,Sumreal; {a - черговий член послідовності. Sum - сума членів послідовності до першого «0»}
SAreal; {SA - середнє арифметичне}
Begin
Clrscr;
Sum=0;
count=0; {Початкові значення дорівнюють «0»}
repeat
write(‘Введіть черговий член послідовності ‘) ;
readln(a);
Sum=Sum+a;
count=count+1;
until a=0;
SA=Sum/(count-1);
Writeln(‘Середнє арифметичне = ‘,SA82);
Readkey;
End.
Домашнє завдання
• Повторити теоретичний матеріал із роботи циклу з післяумовою;
• Виконати задачі №185, №187, №208(5), №234(4), №239(4), №251(4).
1   2   3   4   5   6   7   8   9


База даних захищена авторським правом ©refs.in.ua 2016
звернутися до адміністрації

    Головна сторінка