Тема: Вказівка повторення оператор повторення While … do….
Мета: навчитися описувати оператор повторення з передумовою на мові програмукваннята розглянути типові задачі.
Хід уроку:
Оператор повторення While … do….
Оператор повторення While використовують для програмування циклічних процесів. Він призначений для організації повторення одного довільного оператора.
Загальну схему оператора повторення While можна подати одним з двох способів:
Повторення виконання одного оператора |
Повторення виконання декількох операторів |
while Логічний Вираз do Оператор; |
while Логічний Вираз do begin оператор 1 ; оператор 2 ; … оператор N ; end; |
Оператори, виконання яких повторюється, утворюють тіло циклу. У разі повторення виконання групи операторів, використовується оператор об’єднання begin … end.
Схема виконання оператора While
Обчислюється Логічний Вираз;
Якщо результат FALSE, то виконання оператора повторення припиняється і управління передається оператору, що слідує за оператором While;
Виконується Оператор (або група операторів);
Здійснюється перехід до п.1.
Проаналізуємо дію оператора While на прикладі: Вивести в рядок N натуральних чисел a1, a2, …, aN., де a1=1, ai (2 ≤ i ≤ N) є сумою i-1 перших натуральних чисел.
|
var S, N, i : Integer; |
|
begin Write(‘N-‘); Readln(N); |
|
i := 0; S := 0; |
|
while i < N do |
|
begin i := i + 1; |
|
S := S + i; |
|
Write(S, ‘ ‘); |
|
end; |
|
end. |
Розглянемо, як буде виконуватися програма при N = 3. Ліворуч тексту проставлено нумерацію рядків.
При виконанні рядка 0 у пам’яті надається місце для збереження трьох значень цілого типу. Рядок 1: змінній N присвоюється число, введене з клавіатури (нехай це, буде число 3). Рядок 2 : початкове значення суми – 0, лічильник натуральних чисел – 0.
З третього по сьомий рядок розміщено оператор While.
Рядок 3 : обчислюється логічний вираз i<N. За схемою виконання це п.1. Підставимо значення змінних (i=0, N=3) і отримаємо 0<3 – результат TRUE, отже п.2 пропускається й виконується п.3 – Оператор, який є оператором об’єднання, тому що потрібно повторювати послідовне виконання трьох операторів : i := i + 1; S := S + i; Write(S, ‘ ‘);. Рядок 4 : значення змінної i збільшується на одиницю – перше натуральне число (i=1); рядок 5 : значення суми збільшується на значення змінної i (S = 1) – перший член шуканої послідовності a1=1; рядок 6 : виводиться на екран a1. Управління передається в рядок 3 (п.1) : логічний вираз i<N (1<3) має результат TRUE. Отже, (п.3) виконуються оператори: i := i + 1(i=2); S := S + i (S=3); Write(S, ‘ ‘);(на кран виводиться a2=3). Управління передається в рядок 3 (п.1) : логічний вираз i<N (2<3) має результат TRUE. Отже, (п.3) виконуються оператори: i := i + 1 (i=3); S := S + i (S=6); Write(S, ‘ ‘);(на кран виводиться a3=6). Управління передається в рядок 3 (п.1) : логічний вираз i<N (3<3) має результат FALSE. Отже, (п.2) виконання оператора повторення припиняється й управління передається оператору, що слідує за оператором While, тобто в рядок 8, що є ознакою закінчення виконання програми. Кроки виконання оператора While зручно оформити у вигляді таблиці:
Таблиця покрокового виконання
i < N |
Коментар |
i |
S |
Результат |
– |
початкові значення до виконання циклу, N=3 |
0 |
0 |
– |
0<3 TRUE |
i := i + 1;S := S + i ;Write(S, ‘ ‘); |
1 |
1 |
1 |
1<3 TRUE |
2 |
3 |
1 3 |
|
2<3 TRUE |
3 |
6 |
1 2 3 |
|
3<3 FALSE |
виконання оператора повторення зупинено |
|
|
|
Якщо змінна N=0, то оператор While не виконає повторення операторів i := i + 1; S := S + i ;Write(S, ‘ ‘); жодного разу. Якщо результат логічного виразу постійно не відповідає умові завершенню роботи оператора повторення, або на результат логічного виразу не впливає жоден оператор тіла циклу, то завершення виконання оператора повторення не відбудеться і в таких випадках кажуть, що має місце “зациклювання”.
ПРИКЛАДИ РОЗВ'ЯЗУВАННЯ ЗАДАЧ
Знайти суму та добуток натуральних чисел на відрізку від A до B.
Розв’язання.
Уведемо потрібні змінні з визначенням типу даних:
a,b – змінні цілого типу: задані числа A, B;
S – змінна цілого типу для накопичення суми;
P – змінна цілого типу для накопичення добутку;
i – змінна цілого типу: приймає значення чисел із проміжку від A до B.
Так, як збільшення змінної S на деяке число К здійснюється оператором S := S + K, а збільшення змінної P у К раз здійснюється оператором P:= P * K, то початкові значення змінних S та P повинні бути відповідно 0 і 1.
Алгоритм розв’язання задачі схематично запишемо так:
увести числа a, b;
задати початкові значення суми, добутку, першого числа i;
виконати повторення таких дій:
якщо число i належить проміжку [A, B],
то додати до суми S число i,
збільшити добуток P у i раз,
знайти наступне число i.
інакше перейти до виконання п.4.
вивести на екран результат – S, P.
Отже,
var a, b, i, S, P: Integer; begin Write(‘A, B -’);ReadLn(a,b); S := 0; P := 1; i := a; while i <= b do begin S := S + i; P := P * i; Inc(i); end; WriteLn(‘S – ’, S, ' P–', P) end. |
. Знайти кількість цифр натурального числа.
Розв’язання.
Уведемо потрібні змінні з визначенням типу даних:
N – змінна цілого типу, приймає значення числа, введеного з клавіатури;
K – змінна цілого типу: кількість цифр числа;
M – змінна цілого типу: для зміни значення числа N;
Для розв’язання виконаємо особливість цілочисельного ділення на 10. Нехай, наприклад, M=123. Після виконання оператора M := M Div 10; змінна M матиме значення 12. Тобто, відкинуто останню цифру. Повторюючи виконання цього оператора до тих пір, поки значення M=0, отримаємо кількість цифр числа M – 3.
Алгоритм розв’язання задачі схематично запишемо так:
якщо число M>0,
то відкинути останню цифру числа M,
збільшити кількість цифр K на 1,
інакше перейти до виконання п.4.
Отже,
var N, M : LongInt; K : Byte; begin Write(‘N -’);ReadLn(N); K := 0; M := N; while M > 0 do begin M := M Div 10; K := K + 1; end; WriteLn(‘ Число ‘, N, ‘має ’, K, ' цифр ’) end. |
Обчислити суму та середнє арифметичне дійсних чисел послідовності. Ознакою кінця послідовності чисел при введенні буде нуль, який не входить до послідовності.
Розв’язання.
Уведемо потрібні змінні з визначенням типу даних:
a – змінна дійсного типу – деяке число послідовності;
S – змінна дійсного типу: сума чисел послідовності;
Sa – змінна дійсного типу: середнє арифметичне чисел послідовності;
f – змінна логічного типу : ознака кінця послідовності; False – досягнуто;
k – змінна цілого типу: кількість чисел послідовності.
Алгоритм розв’язання задачі схематично запишемо так:
якщо не досягнуто кінця послідовності (не введено число нуль),
то ввести число a,
якщо не досягнуто кінця послідовності,
то додати до суми S число a,
збільшити кількість введених чисел k на 1,
інакше перейти до виконання п.3;
Отже,
var a, S, Sa, : Real; k : Integer; f : Boolean; begin f := True; k := 0; S := 0; while f do begin Write( ‘ a =’); ReadLn(a); if a <> 0 then begin S := S + a; Inc(k); end else f := False; end; if k = 0 then WriteLn(‘ Жодного числа не введено ’) else begin Sa := S / k; WriteLn(‘ Сума = ’, S, ‘ Середнє арифметичне = ’, Sa); end; end. |