Главная » Файлы » Для вчителя » Інформатика [ Добавить материал ]

Вкладені цикли. Урок
[ · Скачать удаленно (11.5 Kb) ] 19.07.2010, 19:15
Тема Вкладені цикли.
Мета Дати поняття про вкладені цикли, виробляти вміння складати програми на вкладені цикли.
Хід уроку
І. Аналіз виконання практичної роботи.
Повідомити результати, дати якісну оцінку і при потребі роз’яснити.
ІІ. Актуалізація опорних знань.
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.

Категория: Інформатика | Добавил: referatwm
Просмотров: 594 | Загрузок: 124 | Рейтинг: 0.0/0