Тема: Вкладені цикли

Матеріал з Фізмат Вікіпедії
Перейти до: навігація, пошук

Тема уроку: „Вкладені цикли”

Мета: формування навичок використання вкладених циклів для розв’язування типових задач, формування інформаційної культури.

Хід уроку

1. Активізація опорних знань. Спробуйте виявити помилки у наведених фрагментах програм і з’ясувати, що обчислюється у цих фрагментах:

1) k:=1; f:=0; while k<n do; f:=f*k; k:=k+1;

2) s:=0; while n>=0 do begin; a:=n mod 10; s:=s+a; n:=n div 10; end;

2. Формування нових знань і умінь. При розв’язуванні задач досить часто доводиться використовувати дві й більше циклічних конструкцій, одна з яких міститься в тілі циклу іншої. Такі конструкції називаються вкладеними циклами. Внутрішній та зовнішній цикли можуть бути будь-якими з трьох розглянутих раніше. Однак, при використанні вкладених циклів слід дотримуватись наступної умови: внутрішній цикл повинен повністю „вкладатись” в циклічну частину зовнішнього циклу. Слід пам’ятати, що при роботі вкладених циклів спочатку виконується внутрішній цикл, а потім - зовнішній. Розглянемо реалізацію вкладених циклів на конкретному прикладі.

Задача1. Знайти всі тризначні числа, сума цифр яких дорівнює введеному числу n.

Розв’язування: Насамперед, слід з’ясувати, яким може бути число n. Найменше тризначне число – 100, найбільше – 999. Отже, введене число n повинно задовольняти умовам n>=1, n<=27. Для контролю вводу n використаємо цикл з післяумовою. Найпростіший спосіб розв’язування – перебирати всі тризначні числа, знаходити суму цифр кожного числа і перевіряти, чи дорівнює вона n. Якщо так, то вивести одержане число на екран, якщо ж ні – перейти до розгляду наступного числа. Кожну з цих дій окремо ми вміємо робити. Залишилось їх об’єднати в одній програмі.

program Trznach1;

var x,n,a,s,m: integer;

Begin

repeat

write(’n--->’);

readln(n);

until (n>=1) and (n<=27);

for x:=100 to 999 do {перебираємо всі тризначні числа}

begin

s:=0; {початкове значення суми}

m:=x; {створюємо копію числа}

while m>0 do {знаходимо суму цифр числа}

begin

a:=m mod 10;

s:=s+a;

m:=m div 10;

end;

if s=n then writeln(x);

end;

readln;

End.

Потрібно звернути увагу на команду m:=x. Це присвоєння створює копію тризначного числа, яке розглядається. Ця копія необхідна, оскільки при знаходженні суми цифр числа саме число зменшується до нуля і значення цього числа ми „загубимо”. Існує й інший спосіб розв’язування цієї задачі, причому бажано його знати, оскільки він в подальшому буде використовуватись. Цей спосіб полягає в тому, що ми замість розгляду тризначного числа і виділення його цифр, будемо розглядати окремо розряди цього числа, знаходити їх суму, і якщо вона дорівнюватиме n, то з цих розрядів сформуємо тризначне число, яке виведемо на екран.

program Trznach2;

var n,a,b,c: integer;

Begin

repeat

write(’n--->’);

readln(n);

until (n>=1) and (n<=27);

for a:=1 to 9 do

for b:=0 to 9 do

for c:=0 to 9 do

if a+b+c=n then writeln(100*a+10*b+c);

readln;

End.

Спробуйте пояснити, чому зовнішній цикл виконується від 1 до 9, а два внутрішніх – від 0 до 9.

3. Формування практичних навичок роботи з вкладеними циклами.

Задача 2. Обчислити значення суми , де n, k – натуральні числа, що вводяться з клавіатури. Вказівка: доцільно використати цикл з параметром і, що змінюється від 1 до n, всередині якого по-перше, будемо знаходити значення , по-друге, будемо збільшувати значення суми на знайдену величину y.

4.Домашнє завдання.

Задача 3. Знайти і вивести на екран всі тризначні числа, які діляться на кожну із своїх цифр. Примітка: не забувайте, що на нуль ділити не можна!