Тема Вкладені цикли. Мета Дати поняття про вкладені цикли, виробляти вміння складати програми на вкладені цикли. Хід уроку І. Аналіз виконання практичної роботи. Повідомити результати, дати якісну оцінку і при потребі роз’яснити. ІІ. Актуалізація опорних знань. 1. Що таке цикл? 2. У яких випадках можна використовувати цикл з параметром? 3. Коли перевіряється умова в циклі repeat? 4. У яких випадках у циклах записується begin … end? 5. Якого типу може бути змінна-параметр у циклі for? 6. Що таке табуляція функції? 7. Який порядок виконання заданих команд і перевірки умови в циклі while? 8. Коли задається початкове значення лічильника і де воно змінюється в циклах while і repeat? 9. Запишіть числа у вигляді суми розрядних доданків числа: а) 245; б) xy; в) 3xy. ІІІ. Засвоєння поняття вкладених циклів. Всі знають таблицю множення: 1 ∙ 1 2 ∙ 1 … 9 ∙ 1 10 ∙ 1 1 ∙ 2 2 ∙ 2 9 ∙ 2 10 ∙ 2 1 ∙ 3 2 ∙ 3 9 ∙ 3 10 ∙ 3 1 ∙ 4 2 ∙ 4 9 ∙ 4 10 ∙ 4 1 ∙ 5 2 ∙ 5 9 ∙ 5 10 ∙ 5 1 ∙ 6 2 ∙ 6 9 ∙ 6 10 ∙ 6 1 ∙ 7 2 ∙ 7 9 ∙ 7 10 ∙ 7 1 ∙ 8 2 ∙ 8 9 ∙ 8 10 ∙ 8 1 ∙ 9 2 ∙ 9 9 ∙ 9 10 ∙ 9 1 ∙ 10 2 ∙ 10 9 ∙ 10 10 ∙10 Зверніть увагу, що перший множник змінюється від 1 до 10 і для кожного значення першого множника другий множник змінюється від 1 до 10. Ставимо задачу: Скласти програму, яка виводить на екран таблицю множення. Розробляємо алгоритм: Оскільки число зміни значень першого множника відоме (змінюється від 1 до 10), то його можна змінювати в циклі for, наприклад, так: for i:=1 to 10 do;. Для кожного і другий множник змінюється від 1 до 10, тобто в даному циклі треба виконувати цикл, який змінює другий множник, нехай j, тобто for j:=1 to 10 do;. У таких випадках говорять: вкладені цикли. Складаємо програму (добавивши виведення результатів множення): Program tablica;{Скласти програму виведення таблиці множення від 1 до 3} Var i,j :integer; Begin For i:=1 to 3 do begin For j:=1 to 9 do WriteLn( i,'*',j,'=',i*j ); WriteLn;{Ця команда для вставки рядка між стовпчиками } end end. Ця задача на вкладені цикли. Цикл з параметром і – зовнішній, а з j – внутрішній. У Паскалі кількість вкладень не обмежується. ІV. Закріплення вивченого. Задача 1. Протабулювати функцію двох аргументів z=sin(x+y), де х змінюється на відрізку [0;1] з кроком 0.2, а у – на відрізку [0;2] з кроком 0.5. Program tabulacia; Var z,x,y :real; Begin x:=0; While x<=1 do begin y:=0;{Саме тут задаємо поч. знач.} While y<=2 do begin z:=sin(x+y); WriteLn( x:6:1,y:6:1,z:6:1 ); y:=y+0.5; end; x:=x+0.2{Саме тут задаємо зміну лічильника х} end end. Задача 2. У числі 222** дописати замість зірочок дві цифри так, щоб дане число ділилося на 15. Program podilnist; Var x,y,m :integer; Begin For x:=0 to 9 do For y:=0 to 9 do Begin m:=22200+10*x+y; If m mod 15=0 then WriteLn( 'x=',x,' y=',y,' тобто 222',x,y ); end end. Результати виконання: х=0 у=0 тобто 22200 х=1 у=5 тобто 22215 х=3 у=0 тобто 22230 х=4 у=5 тобто 22245 х=6 у=0 тобто 22260 х=7 у=5 тобто 22275 х=9 у=0 тобто 22290 Задача 3. (З районної олімпіади 2007 р) Знайдіть перші десять натуральних чисел К і N таких, щоб сума натуральних чисел менших К була рівна сумі чисел більших К і менших або рівних N. Наприклад, 6 і 8: 1+2+3+4+5=7+8. Ось програма для пошуку 5 перших пар чисел. Program poshuk_fedoruk; Var i,j,k :integer; s1,s2: integer; Begin k:=0; Repeat For i:=1 to 10000 do For j:=i+1 to 10000 do Begin s1:=(i*(i-1)) div 2; s2:=((i+1+j)*(j-i))div 2; If s1=s2 then Begin WriteLn( i,',',j ); k:=k+1 end end until k>4 end. Результат виконання: 6,8 35,49 204,288 1189,1681 6930,9800 Задача 4. Скласти програму пошуку всіх натуральних чисел n<=100 000, сума цифр яких дорівнює заданому натуральному числу а. Program poshuk_suma; Var a,p,s,n,b :integer; Begin Write( 'Введіть нат число' ); ReadLn( a ); If a>45 then WriteLn( 'Таких чисел не існує' ) else Begin b:=1; WriteLn( 'шукані числа такі:' ); While b<100000 do Begin s:=0; n:=b; While n<>0 do Begin p:=n mod 10; s:=s+p; n:=n div 10 end; If s=a then Write( b,',' ); b:=b+1 end end end. V. Підсумок уроку VІ. Завдання додому Задача 1. Протабулювати функцію z=2cos(x-y), де x належить відрізку [4;7], а y належить відрізку [1;3] і змінюються з кроком 1. Program tab_dom_zavd; Var x,y : integer; z:real; Begin For x:=4 to 7 do For y:=1 to 3 do Begin z:=2*cos(x-y); WriteLn( x:5,y:5,z:6:1 ); end end. Задача 2. У числі 6*5*4 дописати замість зірочок дві цифри так, щоб дане число ділилося на 12. Знайти ці цифри і відповідні числа. Program podilnis_dom_zavd; Var x,y,m :integer; Begin For x:=0 to 9 do For y:=0 to 9 do Begin m:=60000+1000*x+500+10*y+4; If m mod 12=0 then WriteLn( 'x=',x,' y=',y,' тобто 6',x,'5',y,'4' ); end end. Практична робота Тема Створення і реалізація програм на вкладені цикли. Мета Навчитись складати і виконувати програми на вкладені цикли. Хід роботи 1. Скласти і записати в зошит програму розв’язування задачі (свій варіант). 2. Набрати програму в середовищі АЛГО. 3. Виконати програму і записати результат виконання з екрана в зошит. Завдання для пр «Створення і реалізація програм на вкладені цикли» В-1. Знайти всі трицифрові числа, при цілочисельному діленні кожного з яких на 11 одержуємо частку, що дорівнює сумі квадратів цифр числа. В- 2. Трицифрове число закінчується цифрою 3. Якщо цю цифру перемістити через два знаки вліво, то нове число буде на 1 більше від потроєного вихідного числа. Знайти це число. В-3. Знайти усі трицифрові числа, що дорівнюють сумі кубів своїх цифр. В-4. Шестицифрове число починається зліва цифрою 1. Якщо цю цифру перенести зі свого місця на останнє місце справа, то утворене число буде втроє більше за вихідне. Знайти вихідне число. В-5. Дане натуральне число n>=10. Написати програму одержання m останніх цифр запису числа n. В-6. Знайти чотирицифрове число, що дорівнює квадрату числа, вираженого двома останніми цифрами цього чотирицифрового числа. В-7. Натуральне число називається досконалим, якщо воно дорівнює сумі усіх своїх дільників, за винятком самого себе. Наприклад, 6=1+2+3 – досконале; 8≠1+2+4 – не є досконалим. Написати програму виведення всіх досконалиї чисел, менших заданого числа n. В-8. Знайти чотирицифрові числа, кожне з яких ділиться націло на 11 і сума цифр яких дорівнює 11. В-9. Знайти чотирицифрові числа, які, якщо приписати справа число 400, дають повний квадрат. В-10. У магазині є тільки монети 2 коп, 5 коп, 10 коп. Скількома способами продавець може дати здачу n коп.? В-11. Чи існує таке двоцифрове число, що коли до нього приписати спереду 1, то одержане число було б в 2 рази більше за вихідне? В-12. Чи існує таке двоцифрове число, що коли до нього приписати спереду 1, то одержане число було б в 3 рази більше за вихідне? В-13. У яке двоцифрове число і яку цифру треба вставити посередині запису, щоб одержане число було в 6 раз більше за вихідне? В-14. Знайдіть усі пари двоцифрових чисел, які є дзеркальним відображенням одне одного і сума яких – трьохцифрове число. Наприклад: 57 і 75; їх сума 132. В-15. Знайдіть усі пари двоцифрових чисел, які є дзеркальним відображенням одне одного і різниця яких - число 36. Наприклад: 37 і 73; їх різниця 36. В-16. Знайдіть усі чотирицифрові числа, які з обох боків читаються однаково і кратні числу 4. Наприклад: 4224. В-17. Свідок дорожньої пригоди (вчитель математики) розказав: Номер автомобіля чотирицифровий. Остання цифра 1. Сума перших двох цифр дорівнює сумі двох останніх. Число-номер кратне числу 3. Автомобілі з якими номерами треба буде перевірити міліції? Розв’язки задач для ПР «Вкладені цикли» В-1. Знайти всі трицифрові числа, при цілочисельному діленні кожного з яких на 11 одержуємо частку, що дорівнює сумі квадратів цифр числа. Program zad_1; Var x,y,z :integer; Begin For x:=1 to 9 do For y:=0 to 9 do For z:=0 to 9 do If (100*x+10*y+z) div 11 =sqr(x)+sqr(y)+sqr(z) then WriteLn(x,y,z ) end. В-2. Трицифрове число закінчується цифрою 3. Якщо цю цифру перемістити через два знаки вліво, то нове число буде на 1 більше від потроєного вихідного числа. Знайти це число. Program zad_2; Var x,y :integer; Begin For x:=1 to 9 do For y:=0 to 9 do If 10*x+y-10=0 then WriteLn( 'Це число ',x,y,'3' ) end. Примітка. ху3-дане число; 3ху-одержане. Тоді 3ху=3*ху3+1, тобто 300+10х+у=3(100х+10у+3)=1. Звідси 10х+у-10=0. В-3. Знайти усі трицифрові числа, що дорівнюють сумі кубів своїх цифр. Program zad_3; Var x,y,z :integer; Begin For x:=1 to 9 do For y:=0 to 9 do For z:=0 to 9 do If 100*x+10*y+z=sqr(x)*x+sqr(y)*y+sqr(z)*z then WriteLn(x,y,z ); end. В-4. Шестицифрове число починається зліва цифрою 1. Якщо цю цифру перенести зі свого місця на останнє місце справа, то утворене число буде втроє більше за вихідне. Знайти вихідне число. Program zad_4; Var m,n,x,y,z :integer; Begin For m:=1 to 9 do For n:=0 to 9 do For x:=0 to 9 do For y:=0 to 9 do For z:=0 to 9 do If 100000*m+10000*n+1000*x+100*y+10*z+1=3*(100000+10000*m+1000*n+100*x+10*y+z) then WriteLn('1',m,n,x,y,z ); end. В-5. Дане натуральне число n>=10. Написати програму одержання m останніх цифр запису числа n. Program os_cifri; Var i,n,m : integer; Begin WriteLn('Введіть число n' ); ReadLn( n ); WriteLn( 'введіть m' ); ReadLn( m ); WriteLn( ' останні ',m,' цифр такі:' ); For i:=1 to m do Begin WriteLn( n mod 10 ); n:=n div 10 end end. В-6. Знайти чотирицифрове число, що дорівнює квадрату числа, вираженого двома останніми цифрами цього чотирицифрового числа. Program zad_6; Var p,x,y,z :integer; Begin For p:=1 to 9 do For x:=0 to 9 do For y:=0 to 9 do For z:=0 to 9 do If 1000*p+100*x+10*y+z=sqr(10*y+z) then WriteLn(p,x,y,z ); end. В-7. Натуральне число називається досконалим, якщо воно дорівнює сумі усіх своїх дільників, за винятком самого себе. Наприклад, 6=1+2+3 – досконале; 8≠1+2+4 – не є досконалим. Написати програму виведення всіх досконалиї чисел, менших заданого числа n. Program doskonale; Var n,i,j,s :integer; Begin WriteLn( 'Введіть n' ); ReadLn( n ); WriteLn( 'Досконалі:' ); For i:=2 to n-1 do Begin s:=0; For j:=1 to (i div 2) do If i mod j=0 then s:=s+j; If i=s then WriteLn( i ); end end. В-8. Знайти чотирицифрові числа, кожне з яких ділиться націло на 11 і сума цифр яких дорівнює 11. Міркування: pxyz – шукане число; pxyz mod 11=0; p+x+y+z=11. Program zad_8; Var p,x,y,z :integer; Begin For p:=1 to 9 do For x:=0 to 9 do For y:=0 to 9 do For z:=0 to 9 do If (p+x+y+z=11) and ((1000*p+100*x+10*y+z) mod 11=0) then WriteLn( p,x,y,z ); end. В-9. Знайти чотирицифрові числа, які, якщо приписати справа число 400, дають повний квадрат. Міркування: pxyz – шукане число; pxyz 400 – повний квадрат якогось числа. Program zad_9; Var p,x,y,z,i :integer; Begin For p:=1 to 9 do For x:=0 to 9 do For y:=0 to 9 do For z:=0 to 9 do Begin For i:=1000 to 4000 do If i*i=1000000*p+100000*x+10000*y+1000*z+400 then WriteLn( p,x,y,z ); end end. В-10. У магазині є тільки монети 2 коп, 5 коп, 10коп. Скількома способами продавець може дати здачу n коп.? Program NoName; Var p,n,x,y,z :integer; Begin WriteLn( 'введіть суму здачі' ); ReadLn( n ); p:=0; WriteLn( '2':2,'5':3,'10':3,' Всього монет' ); WriteLn( '_ _ _ _ _ _ _ _ _ _ ' ); For x:=0 to (n div 2) do For y:=0 to (n div 5) do For z:=0 to (n div 10) do If 2*x+5*y+10*z=n then begin WriteLn( x:2,y:3,z:3,(x+y+z):5 ); p:=p+1 end; WriteLn; If p=0 then WriteLn( 'немає варіантів здачі' ) else WriteLn( 'Усіх способів ',p ); end. Примітка. n div 2, n div 5, n div 10 – найбільші кількості монет однієї вартості, якими може бути дана здача. В-11. Чи існує таке двоцифрове число, що коли до нього приписати спереду 1, то одержане число було б в 2 рази більше за вихідне? Program NoName; Var x,y,k :integer; Begin k:=0; For x:=1 to 9 do For y:=0 to 9 do If 100+10*x+y=2*(10*x+y) then Begin WriteLn( x,y ); k:=k+1 end; If k=0 then WriteLn( 'не існує' ); end. В-12. Чи існує таке двоцифрове число, що коли до нього приписати спереду 1, то одержане число було б в 3 рази більше за вихідне? Program zad_12; Var x,y,k :integer; Begin k:=0; For x:=1 to 9 do For y:=0 to 9 do If 100+10*x+y=3*(10*x+y) then Begin WriteLn( x,y ); k:=k+1 end; If k=0 then WriteLn( 'не існує' ); end. В-13. У яке двоцифрове число і яку цифру треба вставити посередині запису, щоб одержане число було в 6 раз більше за вихідне? Program zad_13; Var x,y,k,i :integer; Begin k:=0; For x:=1 to 9 do For y:=0 to 9 do For i:=0 to 9 do If 100*x+10*i+y=6*(10*x+y) then Begin WriteLn('У ', x,y,' цифру ',i ); k:=k+1 end; If k=0 then WriteLn( 'не існує' ); end. Результат виконання: У 18 цифру 0 В-14. Знайдіть усі пари двоцифрових чисел, які є дзеркальним відображенням одне одного і сума яких – трьохцифрове число. Наприклад: 57 і 75; їх сума 132. І спосіб Program zad_14; Var x,y,a,b,c :integer; Begin For x:=1 to 9 do For y:=1 to 9 do For a:=1 to 9 do For b:=0 to 9 do For c:=0 to 9 do If 10*x+y+10*y+x=100*a+10*b+c then WriteLn( x,y,' i ',y,x ); end. ІІ спосіб Program zad_14; Var x,y,a,b,c :integer; Begin For x:=1 to 9 do For y:=1 to 9 do For a:=100 to 999 do If 10*x+y+10*y+x=a then WriteLn( x,y,' i ',y,x ); end. В-15. Знайдіть усі пари двоцифрових чисел, які є дзеркальним відображенням одне одного і різниця яких - число 36. Наприклад: 37 і 73; їх різниця 36. Program zad_15; Var x,y :integer; Begin For x:=1 to 9 do For y:=1 to 9 do If ((10*x+y)-(10*y+x)=36) or ((10*y+x)-(10*x+y)=36) then WriteLn( x,y,' i ',y,x ); end. В-16. Знайдіть усі чотирицифрові числа, які з обох боків читаються однаково і кратні числу 4. Наприклад: 4224. Program zad_16; Var x,y :integer; Begin For x:=1 to 9 do For y:=0 to 9 do If (1000*x+100*y+10*y+x) mod 4=0 then WriteLn( x,y,y,x ); end. В-17. Свідок дорожньої пригоди (вчитель математики) розказав: Номер автомобіля чотирицифровий. Остання цифра 1. Сума перших двох цифр дорівнює сумі двох останніх. Число-номер кратне числу 3. Автомобілі з якими номерами треба буде перевірити міліції? Program zad_17; Var x,y,z :integer; Begin For x:=0 to 9 do For y:=0 to 9 do For z:=0 to 9 do If ((x+y+z+1) mod 3=0) and (x+y=z+1) then WriteLn( x,y,z,'1' ); end.
|