П`ятниця, 19.04.2024, 03:04
Головна Реєстрація RSS
Вітаю Вас, Гість
Наше опитування
Оцініть мій сайт
Всього відповідей: 68
http://hozki-school.ucoz.ua/index/31-149-0-1-2

 « попередня

ЗМIСТ

наступна » 

Урок 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.

 « попередня

ЗМIСТ

наступна » 

Наверх