Тема уроку: Створення програм з циклами
Мета уроку: навчити використовувати цикли для розв'язування типових задач.
Тип уроку: формування вмінь і навичок
Хід уроку
І. Організаційний момент
Перевіряю готовність учнів до уроку.
ІІ. Актуалізація опорних знань
Гра „Лото”. Учні на ігровому полі вибирають фішку певного кольору, відкривають її і отримують номер запитання, на яке повинні дати відповідь. • Вказівка розгалуження
• Цикл з параметром
• Цикл з передумовою
• Цикл з післяумовою
ІІІ. Розв’язування задач
Задача № 177
Умова: Ненажера Стецько пробрався перед обідом – у шкільну їдальню, де вже були накриті столи, і почав швиденько з'їдати ще тепленькі булочки, що були на столах. 3 першого столу він з'їв х1; було-чок, з другого - х2 і, відповідно, з останнього - хп булочок. Але за ним стежив черговий по їдальні Андрійко та ретельно все фіксував на своєму кальку¬ляторі: до булочок, з’їдених з першого столу, додав кількість булочок, що зникли з другого столу, і т.д. Допоможіть крок за кроком відтворити інформа¬цію, яку дістав Андрійко на своєму калькуляторі.
Розв'язання: Отже, нам відома кількість повто¬рень, тому що ми знаємо, скільки столів у їдальні. Окрім того, зауважимо, що для зберігання кількості булочок, що знаходяться на кожному столі, не треба мати N змінних. Достатньо мати одну, назвемо її, наприклад, X, в якій тимчасово будемо зберігати відповідну кількість булочок з чергового столу. I, врешті-решт, нам необхідна ще одна змінна, в якій ми будемо зберігати проміжні обчислення Андрій¬ка (наприклад, Sum). Таким чином, програма роз¬в'язання даної задачі, буде мати такий вигляд:
Program Example_177;
Uses crt;
Var I,N:word; {I - параметр циклу, N - кількість столів у їдальні, тобто кількість повторень}
Sum,X:word; {X - кількість булочок на черговому столі їдальні, Sum - загальна кількість було¬чок , що s'їв Стецько}
Begin
Clrscr;
Sum:=0; {Ha початку роботи програми Стецько ще нічого не З'їв}
Write(‘ введіть кількість столів У їдальні: '); Readln{N);
For I: =1 to N do Begin
Write( 'Введіть кількість булочок на черговому столі:');Readln(X);
Sum:=Sum+X;
Writeln('Ha даний момент Стецько з' їв ',Sum,' булочок.');
End;
Readkey;{затримка зображення на екрані}
End.
Задача № 189 (2)
Умова: Знайти значення (1 + 0.1)(2 + 0.2)...(9 + 0.9)
Розв'язання: В даному випадку кількість по¬вторів буде дорівнювати 9, тобто програма буде мати вигляд:
Program Example_189_2;
Uses crt;
Var I:word; {I - параметр циклу}
Rez:real; {Rez - результат обчислень}
Begin
Clrscr;
Rez:=l; {Початкове Значення дорівнює 1, тому що результат є накопиченням добутку}
For I:=1 to 9 do Rez:=Rez*(I+0.1*I);
Writeln('Rez= ',Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
ІГРОВА ПАУЗА. Вправа „Австралійський дощ”
Задача № 197 (2)
Умова: Дано натуральне число n. Визначити суму цифр у числі.
Для розв'язку цієї задачі використаємо такий штучний прийом: щоб знайти суму цифр, ми по¬винні «брати» цифри по одній і додавати їх одна до одної, а потім використану цифру «відкидати». Це нам дозволять зробити операції ділення націло та знаходження залишку від цілочисельного ділен¬ня. Так, при діленні числа націло на 10 остання цифра числа буде «відкидатися», а при знаходженні залишку від ділення націло ми виділяємо останню цифру числа. Тобто: 123 div 10 = 12 3928 mod 10 = 8.
Процес буде повторюватись, доки від числа «нічого не залишиться», тобто, доки воно не пе¬ретвориться на нуль. Програма, що реалізує описаний алгоритм, має такий вигляд:
Program ExampIe_197_2;
Uses crt;
Var n:longint; {N - дане число}
Sum:byte; {Sum - сума цифр числа}
Begin
Clrscr; Sum:=O; {сума цифр числа спочатку дорів¬нює 0}
Write(‘ введіть ціле число: '); Readln (N) ; H:=abs(N) ;
While N>0 do
Begin
Stm:=Sum+N mod 10; {Знаходження суми цифр}
N:=N div 10; {«Відкидання» останньої цифри числа}
End;
Writeln('Sum= ',Sum); Readkey; {Затримка зображення на екрані}
End.
Задача №197(1)
Умова: Дано натуральне число n. Визначити кількість цифр у цьому числі.
Розв'язання: Для розв'язання цієї задачі можна використати як цикл з передумовою, так і цикл з післяумовою. Однак другий варіант кращий, тому що навіть число «0» має у своєму складі одну циф¬ру, а цикл з передумовою цей випадок пропус¬тить. Справа в тому, що умовою виходу з циклу і в першому, і в другому випадку буде «зникнення» числа, тобто перетворення його на нуль після відкидання чергової цифри, а якщо число з само¬го початку дорівнює «0», то цикл з передумовою не виконається жодного разу, а цикл з післяумо¬вою виконається обов'язково і підрахує одну циф¬ру. Програма для розв'язання цієї задачі має та¬кий вигляд:
Program Example_197_l;
Uses crt;
Var N:longint; {N - задане число}
Count:byte; {Count - кількість цифр в числі}
Begin
Clrscr; Write('Введіть натуральне число: '); Readln(N);
N:=abs(N); {Знаходження модулю числа для позбавлення від помилкового введення ненатурального числа}
Count:=0; {Початкове значення кількості цифр)
Repeat
Count:=Count+l;
N:=N div 10; {«Відкидання» останньої цифри числа після підрахунку}
Until N = 0;
Writeln ( ' кількість цифр в числі = ',Count);
Readkey; {Затримка зображення на екрані)
End.
Задача № 180
Умова: Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив одружи¬тися з нею. Василина запитала Чахлика, скільки у нього скринь із золотом. Чахлик відповів, що за¬раз у нього n скринь і щороку додається ще по m скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чахлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?
Розв 'язання:
Program Example_180;
Uses crt;
Var m,n,k:word; {n - початкова кількість скринь is золо¬том, m - щорічний «прибуток» Чахлика Невмирущого, k - «потреби» Василини Премудрої}
Sum,Years:word; {Sum - щорічне накопи¬чення Чахлика Невмирущого, Years - вік Василини Премудрої.)
Begin
Clrscr;
Write('Введіть початкову кількість скринь s золотом:');
Readln{n);
Write('Введіть щорічний прибуток Чахли¬ка: ');
Readln(m);
Write('Введіть «потреби» Василини Премудрої: '); Readln (k) ;
sum:=п;{Початковий «капітал» Чахлика} Years:=18;{Початковий вік Василини}
While Sum<=k do
Begin Sum:=Sum+m; Years:=Years+l; End;
Writeln('Василині вже виповнилося ',Years,' років.');
Readkey; {Затримка зображення на екрані)
End.
Задача №179
Умова: На дверях ліфта висіло загрозливе попередження про те, що двері самі зачиняються в той самий момент, коли зайвий за вагою пасажир переступить поріг ліфта. Котрий пасажир постраж¬дає, якщо ліфт витримує вагу не більше S кг, а вага пасажирів, що стоять у черзі до ліфта, дорів¬нює відповідно а1 а2, а3, ... ап?
Розв'язання:
У цій задачі зручніше використовувати цикл з післяумовою, тому що спочатку необхідно дати можливість «ввійти» пасажиру в ліфт, а потім пе-ревіряти, чи витримає його ліфт. Умовою виходу з циклу буде перевищення сумарної ваги пасажирів, що увійшли в ліфт, деякого заданого критичного значення. Для зберігання ваги чергового пасажи¬ра в цій задачі ми будемо використовувати одну й ту саму змінну (А), оскільки після перевірки вага пасажира нас уже не цікавить. Програма має ви¬гляд:
Program Example_179;
Uses crt;
Var N:word; {I - номер пасажира, що увійшов у ліфт}
Sum,A,S:real; {Sum - сумарна вага пасажирів, що знаходяться в ліфті, А -вага чергового пасажира, що увійшов до ліфта, S - критична вага, що може бути піднята ліфтом}
Begin
Clrscr; Sum:=0; N:=0; {Ha початку роботи програми в ліфті немає пасажирів}
Write('введіть критичну вагу, що піднімає ліфт: '); Readln(S);
Repeat
Write('Введіть вагу чергового пасажиpa: ');
Readln(A); Sum:=Sum+A; N:=N+1;
Until Sum>S;
Writeln ('Постраждає ',N,'-й пасажир.'); Readkey; {Затримка зображення на ек¬рані)
End.
IV. Підведення підсумків. Домашнє завдання:
• Повторити теоретичний матеріал
Задача №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:=O; Sum:=N; S:=1; {Початкова кількість волосся, що буде висмикнуте капосним папугою}
Repeat
Sum:=Sum-S; {Зменшення дідусевого волосся} S:=S*2;
Day:=Day+l; {Підрахунок номеру дня}
Until Sum<=0;
Writeln(' nanyra знущався над діду¬сем ',day,' днів.');
End;
Readkey; {Затримка зображення на екрані}
End.