Урок 57 Інформатика (АП)
Вкладені цикли
Мета.
Навчальна. повторити з учнями різновиди циклів, та вивчити вкладені цикли, формувати вміння та навички створювати і реалізовувати програми з вкладеними циклами мовою Паскаль.
Розвиваюча. Розвивати логічне мислення, самостійність, вміння застосовувати набуті знання до практичних завдань.
Виховна. Виховувати наполегливість, естетичність у оформленні, грамотно висловлювати свої думки, вміння раціонально використовувати час.
Тип уроку. Засвоєння нових знань, вмінь і навичок.
План
Пам’ятка для учня!
Хід уроку
1. Перевірка домашнього завдання.
1. Наявність.
2. Питання.
2. Актуалізація опорних знань.
У Паскалі передбачено три різновиди операторів циклу: цикл із передумовою, цикл з післяумовою, цикл із лічильником (із покроковою зміною аргументу). Також реалізована робота із вкладеними циклами.
І. Питання.
II. Вказівка повторення з передумовою (Цикл— while )
Вказівка повторення з передумовою — while призначена для організації багатократного виконання групи вказівок (тіло циклу) до тих пір, поки залишається істинною умова виконання циклу.
Значення службового слова while — поки
Синтаксис оператора while:
while <умова> do <оператор>;
де <умова> - вираз логічного типу;
<оператор> - простий або складений оператор Паскаля.
Вказівка повторення з післяумовою (Цикл-repeat-until)
Вказівка повторення з післяумовою призначена для організації багатократного виконання групи вказівок (тіло циклу) до тих пір, поки умова виконання циклу не стане істинною.
Синтаксис оператора repeat:
repeat <оператори> until <умова>;
де <умова> - вираз логічного типу;
<оператор> - послідовність операторів Паскаля, яка складає тіло циклу.
Вказівка повторення з параметром виконується таким чином:
1. Вказівка For — to — do.
Наприклад.
for і:=K to N do
begin
<вказівка1>;
<вказівка2>;
…...............
<вказівка N>;
end;
Параметру циклу і присвоюється початкове значення К. Він порівнюється з кінцевим значенням N. Якщо К<=N, то виконується тіло вказівки повторення. Значення К автоматично збільшується на 1 (тобто стає наступним елементом) і знову порівнюється зі значенням N. Якщо під час перевірки отримаємо, що К>N, то виконання вказівки повторення припиняється і виконується наступна після неї вказівка програми. Якщо під час першого порівняння К і N виявиться що К>N, то тіло вказівки не виконується жодного разу.
2. Вказівка For — downto — do.
Наприклад.
for і:=К downto to N do
begin
<вказівка1>;
<вказівка2>;
…...............
<вказівка N>;
end;
Параметру циклу і присвоюється початкове значення К. Він порівнюється з кінцевим значенням N. Якщо К>=N, то виконується тіло вказівки повторення. Значення К автоматично зменшується на 1 (тобто стає попереднім елементом) і знову порівнюється зі значенням N. Якщо під час перевірки отримаємо, що К<N, то виконання вказівки повторення припиняється і виконується наступна після неї вказівка програми. Якщо під час першого порівнення К і N виявиться, що К<N, то тіло вказівки не виконується жодного разу.
3. Вкладені цикли.
У деяких випадках важливо повторити підзадачу кілька разів усередині більш загальної задачі. Один зі способів написання такої програми - включити цикл у набір інструкцій, що повторюються всередині іншого циклу. Така структура, що складається з циклу в циклі, називається вкладеними циклами.
Вкладення циклів використовується зокрема при розв'язуванні таких задач:
Якщо в програмі використовуються вкладені цикли, то для підвищення наочності програмного коду прийнято кожний наступний рівень вкладання зміщувати відносно попереднього.
Правило вкладення циклів: внутрішній цикл цілком укладається в тіло зовнішнього циклу.
Приклад № 1.
Обчислити значення змінної Y=2*K+N при всіх значеннях змінних N=1, 2, 3 і K=2, 4, 6, 8.
Алгоритм обчислення:
1. Для початку нам потрібно задати наші змінні. Як ми бачимо, змінні N і К у нас відомі N=1, 2, 3 і K=2, 4, 6, 8, а змінна Y залежить від них.
2. Якщо перебирати всі значення N і K, ми повинні отримати 12 значень змінної Y.
Скласти програму можна в такий спосіб: для кожного значення N перебрати всі значення К від 2 до 8, тобто N використати як параметр зовнішнього циклу, К - як параметр внутрішнього циклу.
3. Тоді записуємо внутрішній цикл з умовою, поки k<=8 (тобто поки не пройшлися по всіх числах) і обраховуємо значення змінної Y.
4. Виводимо все на екран.
5. Збільшуємо значення k на 2.
6. Завершуємо програму.
Блок-схема алгоритму приведена на малюнку.
Program priklad_1;
var n, k, y: integer;
begin
for n:=1 to 3 do begin
k:=2;
while k<=8 do begin
y:=2*k+n;
writeln(‘n=’,’ k=’,’ y=’);
k:=k+2;
end;
end;
end.
Параметр N змінюється з кроком 1, тому зовнішній цикл організований з використанням оператора For; параметр К змінюється з кроком 2, тому внутрішній цикл є циклом While.
В процесі виконання вкладених циклів змінні набувають таких значень:
N  | 1  | 1  | 1  | 1  | 2  | 2  | 2  | 2  | 3  | 3  | 3  | 3  | 
K  | 2  | 4  | 6  | 8  | 2  | 4  | 6  | 8  | 2  | 4  | 6  | 8  | 
Y  | 5  | 9  | 13  | 17  | 6  | 10  | 14  | 18  | 7  | 11  | 15  | 19  | 
Приклад 2.
Програма друкує на екрані таблицю Піфагора:
Var і, j : integer;
Begin
For I := 1 To 10 Do Begin
For 3 := 1 To 10 Do
write (і*j:3);
WriteLn;
End;
End.
Приклад 3.
Програма для обчислення значень функції
Y=l+x/1!+х2/2!+х3/3!+... для х = 1..5.
Y обчислюється з точністю є=0.001, тобто обчислення членів послідовності А (A1=x/1!; А2= х2/2! і т.д.) продовжується доти, поки А>0.001.
var і, х : integer; A, Y : Real;
Begin
For X := 1 To 5 Do Begin
Y := 1;
A := 1;
і := 0;
While A > 0.001 Do Begin
і := і + 1;
A := A * X / і;
Y := Y + A
End;
WriteLn ('X-', X, ' Y=', Y:6:3)
End
End.
4. Розв’язування задач.
Задача. Вивести на екран всі прості числа на інтервалі [А; В].
1. Простими є числа (крім 1), які діляться без остачі тільки на 1 і на самого себе.
Розглянемо алгоритм перевірки, чи є число С простим:
2. Запишемо програму для визначення, чи є число С простим. Зверніть увагу: задания значення змінної С навмисно пропущене.
var А, В, С, І : Integer; Ргар : Boolean;
Begin
{ задания значення змінної С J
Ргар := False;
For I := 2 To С div 2 Do
if С Mod I = 0 Then Prap := True;
If Not Prap Then WriteLn (C, ‘- просте число’)
Else WriteLn (C,’ - складене число’);
End.
3. За умовою задачі потрібно перебрати всі числа в інтервалі [А; В], тобто С послідовно набуває значень з діапазону А..В. Для кожного С від А до В потрібно виконати алгоритм перевірки, чи є число С простим.
4. Внесемо зміни до програми. Значення А і В вводяться з клавіатури:
Var А, В, С, І : integer; Prap : Boolean;
Begin
write ('А, B =>'); ReadLn (A, B);
5. Додаємо керуючий рядок циклу For, тілом циклу якого є програмний код перевірки, чи є число С простим: в
For С := А то В Do Begin
Prap := False;
For I := 2 To С div 2 Do
If С Mod I = 0 Then Prap := True;
If Not Prap Then WriteLn (C, ' - просте число');
End;
6. Збережіть файл. Виконайте програму для різних значень А і В.
4. Підсумки уроку.
For і;=1 То 2 Do
Forj:=1 То 3 Do
Fork:=--1 То 3 Do WriteLn (і, j, к);
а) назвіть тіло циклу по i, j, к;
б) скільки разів буде виконаний цикл по і, j, к?
в) що надрукує програма ?
Program Р5;
vаr і, у, k: Integer;
Begin
For i:=1 To 3 Do Begin
j:=2;
While j<=8 Do Begin
k:=i+j;
WriteLn (i: 4, j: 4, k: 4);
j:=j+2;
End
End
End.
а) Назвіть тіло циклу по i, j.
б) Скільки разів буде виконаний зовнішній цикл? Внутрішній?
в) Заповніть таблицю зміни значень змінних і, j, k.
Program Р6;
var i,j:integer;
Begin
і:=0;
While l<10 Do Begin
{*} J:=0;
While J<0 Do Begin
{**} Write(i*10 + j: 4);
j:=j+1;
End {while J};
WriteLn;
End{while i};
End.
а) скільки разів виконається рядок {*}? рядок {**}?
б) що виведе на екран програма ?
в) перепишіть програму за допомогою FOR.
0 0
0 1
1 0
1 1
5. Домашнє завдання.
1. Вивчити конспект.
2. Знайти і вивести на екран всі тризначні числа, які діляться на кожну із своїх цифр. Примітка: памятайте, що на нуль ділити не можна!