« попередня |
наступна » |
Урок 20
Тема уроку: "Використання циклу з параметром для розв'язування задач."
Мета уроку: Навчити використовувати цикл з параметром для розв'язування типових задач.
Тип уроку: Практичний.
На початку уроку рекомендується провести письмове опитування (можна у вигляді
диктанту) по матеріалах попереднього уроку. Далі можна розглянути деякі типові
задачі з використанням циклу з параметром.
Нагадуємо, що в усіх цих задачах кількість повторень буде відома заздалегідь.
Задача №177.
Умова: Ненажера Стецько пробрався перед обідом у шкільну їдальню, де
вже були накриті столи, і почав швиденько з'їдати ще тепленьки булочки, що стояли
на столах. З першого столу він з'їв x1 булочок, з другого - х2,
і, відповідно, з останнього - xn булочок. Але за ним стежив черговий
по їдальні Андрійко та ретельно все фіксував на своєму калькуляторі: до булочок,
з'їдених з першого столу, додав кількість булочок, що зникли з другого столу,
і т.д. Допоможіть крок за кроком відтворити інформацію, яку дістав Андрійко
на своєму калькуляторі.
Очевидно, що при розв'язанні даної задачі нам на початку роботи програми відома
кількість повторів, тому що ми зразу ж знаємо, скільки столів в їдальні. Крім
того, зауважимо, що для зберігання кількості булочок, що знаходяться на кожному
столі, не треба мати N змінних. Достатньо мати одну, назвемо її, наприклад,
X, в якій тимчасово будемо зберігати відповідну кількість булочок з чергового
столу. І, врешті решт, нам необхідна ще одна змінна, в якій ми будемо одержувати
проміжні обчислення чергового Андрійка (наприклад, Sum). Таким чином,
програма, що розв'язує дану задачу, буде мати наступний вигляд:
Program Example_177;
Uses crt;
Var I,N:word; {I – параметр циклу, N –
кількість столів в їдальні,
тобто кількість повторень}
Sum,X:word; {X – кількість булочок на
черговому столі їдальні, Sum –
загальна кількість булочок, що
з’їв Стецько}
Begin
Clrscr;
Sum:=0; {На початку роботи програми Стецько
ще нічого не з’їв}
Write(‘Введіть кількість столів в їдальні: ’);
Readln(N);
For I:=1 to N do
Begin
Write(‘Введіть кількість булочок на
черговому столі: ’);
Readln(X);
Sum:=Sum+X;
Writeln(‘На даний момент Стецько з”їв
’,Sum,’ булочок.’);
End;
Readkey; {Затримка зображення на екрані}
End.
Задача №183.
Умова: Компанія бабусь поїхала на мотоциклах на курси комп'ютерної грамотності.
Попереду на мотоциклі без глушника їхала одна бабуся, за нею - дві, потім -
три і т.д. Скільки бабусь їхало на заняття, якщо приголомшені пішоходи всього
нарахували N рядів? Чи змогли бабусі зайняти всі місця у класі, якщо
там стояло k рядів по l комп'ютерів в кожному? Скільки вільних місць
залишилося?
Зверніть увагу на те, що фактично ця задача зводиться до знаходження суми всіх
натуральних чисел від 1 до N. В кінці задачі для повторення команди розгалуження
учням пропонується визначити кількість зайнятих бабусями та вільних місць.
Program Example_183;
Uses crt;
Var I,N,Sum:word; {I – параметр циклу, N –
кількість рядів мотоциклів,
тобто кількість повторень, Sum –
загальна кількість бабусь, що
приїхали на курси}
Place,k,l:word; {k – кількість рядів в
комп’ютерному класі, l –
кількість комп’ютерів в
кожному ряду, Place – кількість
місць, що вистачила для бабусь}
Begin
Clrscr;
Sum:=0;
Write(‘Введіть кількість рядів мотоциклів, що
нарахували пішоходи: ’);
Readln(N);
For I:=1 to N do Sum:=Sum+I;
Writeln(‘Кількість бабусь, що приїхала на курси ’,Sum);
Writeln(‘Кількість комп”ютерів на курсах ’,k*l);
If Sum < k*l Then writeln(‘Бабусі не змогли зайняти всі місця.’)
Else writeln(‘Бабусі зайняли всі місця.’);
Place:=Sum – k*l;
If Place>0
Then writeln(‘Бабусям не вистачило ’,Place,’місць.’);
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:=1; {Початкове значення дорівнює 1, тому що
результат являється накопиченням
добутку}
For I:=1 to 9 do Rez:=Rez*(I+0.1*I);
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(1).
Умова: Дано ціле n. Визначити n!
Відомо, що n! (вимовляється, як н-факторіал) - це добуток всіх натуральних
чисел від 1 до n. Тому вихідна програма має вигляд:
Program Example_190_1;
Uses crt;
Var I,n:word; {I – параметр циклу}
Factorial:longint; {Factorial – результат
обчислень}
Begin
Clrscr;
Factorial:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do Factorial:=Factorial*I;
Writeln(‘Factorial= ’,Factorial:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(3).
Умова: Дано ціле n. Визначити
1*3*5*7*…*(2n+1).
Очевидно, що дана програма відрізняється від попередньої тільки тим, що необхідно
знайти добуток тільки непарних натуральних чисел від 1 до n.
Program Example_190_3;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez:longint; {Rez – результат обчислень}
Begin
Clrscr;
Rez:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=0 to n do Rez:=rez*(2*I+1);
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №190(6).
Умова: Дано ціле n. Визначити
Sin(1)*sin(1+2)*…*sin(1+2+…+n).
Відміна даної програми від всіх попередніх полягає в тому, що в даному випадку
ми маємо два накопичення: по-перше, відбувається накопичення суми, що знаходиться
під знаком sin, а, по-друге, сам результат являється накопиченням добутку
сінусів. Тому для зберігання цих двох накопичень необхідно мати дві змінні.
Результуюча програма має наступний вигляд:
Program Example_190_6;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez,Sum:longint; {Rez – результат обчислень,
Sum – проміжне накопичення}
Begin
Clrscr;
Rez:=1; {Початкове значення дорівнює 1, тому
що результат являється накопиченням
добутку}
Sum:=0; {Початкове значення дорівнює 0, тому
що результат являється накопиченням
суми}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do
Begin
Sum:=Sum+I; {Накопичення суми}
Rez:=Rez*sin(Sum); {Накопичення добутку}
End;
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №191(6).
Умова: За даним натуральним значенням змінної n обчислити:
Для розв'язку цієї задачі необхідно виконати обчислення, починаючи з самого
вкладеного кореня. Кожен наступний крок обчислюється наступним чином: до попереднього
результату додається двійка і з отриманої суми береться квадратний корінь.
Програма, що виконує описані обчислення, наведена нижче:
Program Example_191_6;
Uses crt;
Var I,n:word; {I – параметр циклу}
Rez:real; {Rez – результат обчислень}
Begin
Clrscr;
Rez:=0; {Початкове значення дорівнює 0, тому
що результат являється накопиченням
суми}
Write(‘Введіть значення n: ’);
Readln(n);
For I:=1 to n do
Begin
Rez:=sqrt(Rez+2);
End;
Writeln(‘Rez= ’,Rez:8:2);
Readkey; {Затримка зображення на екрані}
End.
Задача №210.
Умова: Дано ціле число n, яке набуває значень шкільних оцінок.
Визначити відповідною кількістю звукових сигналів, яка саме оцінка була задана
("1" - один звуковий сигнал, "2" - два звукових сигнали
і т.д.). Якщо ж задане число не відповідає значенню шкільної оцінки - подати
довгий звуковий сигнал.
Звуковий сигнал в цій програмі можна подавати за допомогою процедур керування
вбудованим динаміком Sound та nosound. Нагадуємо, що перша з них
викликає звучання ноти заданої частоти (частота вказується в дужках після процедури),
а друга виключає динамік. Тривалість звучання та паузи між звуками можна задавати
процедурою delay, в якості параметра до якої задається змінна time
(значення цієї змінної можна задати командою присвоєння або введенням з клавіатури).
Program Example_210;
Uses crt;
Var I,n:word; {I – параметр циклу, n – оцінка учня}
Time:word;
Begin
Clrscr;
Write(‘Введіть Вашу оцінку: ’);
Readln(n);
Time:=10000; {Значення цієї змінної залежить
від характеристик комп’ютера, за
яким працює учень, і може бути
підібрана практичним шляхом}
If (n<1) or (n>12)
Then
begin
writeln(‘Ви помилились, такої оцінки не
існує’);
sound(200);
end
Else
For I:=1 to n do
Begin
Sound(200);
Delay(time);
Nousound;
Delay(time);
End;
Readkey; {Затримка зображення на екрані}
End.
Домашнє завдання:
- Повторити теоретичний матеріал, пов'язаний з роботою циклу з параметром;
- Задачі №189 (4), №190(3), №191(1), №191(7), №211, №178, №188.
« попередня |
наступна » |





