ОПЕРАТОРИ
ЦИКЛУ. ЗАВДАННЯ Цілочисельне АРИФМЕТИКА h2>
Командою
повторення або циклом називається така форма організації дій, при якій
одна й та ж послідовність дій повторюється до тих пір, поки
зберігається значення деякого логічного виразу. При зміні значення
логічного виразу на протилежне повторення припиняються (цикл
завершується). p>
Для організації
циклу необхідно виконати наступні дії: p>
перед початком
циклу задати початкове значення параметра; p>
всередині циклу
змінювати параметр циклу за допомогою оператора присвоєння; p>
перевіряти
умова повторення або закінчення циклу; p>
керувати
циклом, тобто переходити до його початку, якщо він не закінчений, або виходити з
циклу в іншому випадку. p>
Розрізняють цикли
з відомим числом повторень (цикл з параметром) і ітераційні (з перед-та
постусловіем). p>
У циклі з
відомим числом повторень параметр змінюється в заданому діапазоні. p>
Якщо в циклі
змінюється проста змінна, то вона є параметром циклу; якщо в циклі
змінюється змінна з індексом, то індекс цієї змінної є параметром
циклу. p>
Для організації
циклу з відомим числом повторень в Pascal використовується оператор for. p>
Структура
циклу, організованого за допомогою цього оператора, має вигляд: p>
For I: = A To B Do
Begin <оператори>
End; p>
або p>
For
I: = A DownTo B Do Begin <оператори>
End; p>
Тут I --
параметр, що змінюється в циклі; A, B - вирази порядкового типу, що позначають
початкове, кінцеве значення параметра циклу. Крок зміни номера параметра
циклу дорівнює 1, якщо в заголовку циклу варто To (тобто реально таке значення
параметра циклу обчислюється за допомогою функції succ); і -1 - при DownTo
(обчислення проводиться за допомогою функції pred). p>
Порядок
виконання циклу з кроком 1 наступний: обчислюються значення початкового та
кінцевого значень параметра циклу; параметр якщо I приймає початкову
значення; I якщо менше або дорівнює кінцевому значенню, виконується тіло циклу;
значення параметра циклу збільшується, тобто I: = succ (I); перевіряється умова
I <= B (для негативного кроку умова I> = B) і при його виконанні цикл
повторюється. Вихід з циклу здійснюється, якщо I> B (I B (або A
Якщо в
оператора циклу з параметром початкове або кінцеве значення параметра задані
змінними або виразами, то значення цих змінних повинні бути визначені
в програмі до оператора циклу. Не слід всередині циклу змінювати параметр
циклу, його початкове і кінцеве значення за допомогою операторів присвоювання або
введення. p>
Завдання 1. Дано
натуральне n, дійсне x. Обчислити p>
Розробимо
алгоритм вирішення задачі: p>
1) ввести
дані - кількість доданків n і число x; p>
2) присвоїти
змінної, в якій будемо зберігати ступеня sin x, значення 1; S: = 0; p>
3) присвоїти
параметру циклу значення 1; p>
4) якщо
значення параметра циклу менше n, перейти до наступного пункту, інакше до п. 9; p>
5) обчислити
чергову ступінь sin x; p>
6) додати
обчислена значення до суми; p>
7) збільшити
параметр циклу на 1; p>
8) перейти до
п.4; p>
9) вивести на
друк суму S; p>
10) кінець. p>
(Програма
обчислення суми ступенів sin x) p>
Program Summa; p>
Var S, X, Pr:
Real; N, I: Integer; p>
Begin p>
Write ( 'Введіть число доданків і x:');
ReadLn (N, X); p>
Pr: = 1; (в цій змінній зберігаються
послідовні ступеня sin x) p>
S: = 0; p>
For I: = 1
To N Do p>
Begin p>
Pr: = Pr
* Sin (X); (Чергова ступінь Sin (x)) p>
S: = S +
Pr p>
End; p>
WriteLn ( 'Сума дорівнює', S: 7: 4) p>
End. p>
Досить
часто цикл з параметром використовується при розробці програм обробки
масивів. p>
Примітка. Як
видно з оповідання, наведеного вище, область застосування циклу з параметром у
мовою Pascal значно обмежена: обмеження пов'язані з кроком зміни
параметра циклу, з типом параметра циклу, його початкового і кінцевого значення.
У деяких мовах, наприклад, у Basic, таких обмежень не існує. P>
У порівнянні з
циклом з параметром ітераційні цикли є універсальними. Для організації
ітераційних циклів використовуються оператори циклу з передумовою while і циклу з
постусловіем repeat .. until. p>
Ці оператори
не задають закон зміни параметра циклу, тому необхідно перед циклом
задавати початкове значення параметра за допомогою оператора присвоєння, а
всередині циклу змінювати поточне значення цього параметра. p>
Відповідні
структури циклів: p>
while B Do Begin <оператори> End; p>
Repeat <оператори> Until C; p>
Тут B, C --
логічні вирази. p>
Для оператора
циклу з передумовою перевіряється значення логічного виразу, якщо воно має
значення True, то оператори, що входять до циклу, виконуються, у противному випадку
здійснюється виконання оператора, наступного за циклом. p>
Цикл з
постусловіем виконується хоча б один раз. Потім перевіряється значення
логічного виразу, якщо воно False, то оператори, що входять до циклу, виконуються,
в іншому випадку здійснюється вихід з циклу. p>
Входити в цикл
можна тільки через його початок, тобто не можна входити всередину циклу з допомогою
керуючого оператора, тому що в цьому випадку параметр циклу не визначений. p>
Завдання 2. Знайти
найменший номер члена послідовності, для якого виконується умова
| an-an-1 |
Оскільки за
ходу рішення задачі необхідно знати і an an-1, будемо запам'ятовувати їх
відповідно в змінних ANew і AOld. p>
Program Posled; p>
Var Eps, AOld, ANew: Real; N: Integer; p>
Begin p>
Write ( 'Введіть число Epsilon'); ReadLn (Eps); p>
AOld: = 0;
ANew: = ArcTan (AOld) + 1; p>
N: = 2; p>
WriteLn (AOld:
8: 5); WriteLn (ANew: 8: 5); p>
While
Abs (ANew - AOld)> = Eps Do p>
Begin p>
AOld: =
ANew; p>
ANew: =
ArcTan (AOld) + 1; p>
WriteLn (ANew: 8: 5); p>
N: = N + 1 p>
End; p>
WriteLn ( 'Бажаємий номер', N) p>
End. p>
Всередину одного
циклу може входити одна або декілька інших. При цьому охоплює цикл
називається зовнішнім, а вкладені цикли - внутрішніми. Правила організації як
зовнішнього, так і внутрішніх процедур такі ж, як і простого циклу. p>
Завдання 3. На
інтервалі [2; n] знайти натуральне число з максимальною сумою дільників. p>
Пропонована
завдання може бути віднесена до класу «завдання цілочисельний арифметики», де
аргументи, результати і проміжні величини відносяться до цілого типу. Слід
помітити, що в такого роду задачі досить часто використовуються операції DIV і
MOD; найбільш типовою підзадачі є визначення кількості цифр у записі
числа. p>
Алгоритм
рішення завдання: p>
1) ввести число
n; p>
2) змінної
для зберігання максимальної суми дільників привласнити p>
значення 1 (це сума дільників числа 1); p>
3) запам'ятати
число з максимальною сумою дільників; p>
4) параметру циклу
I мати значення 2; p>
5) якщо I
більше n, перейти до п. 13, інакше - до наступного пункту; p>
6) змінної
для зберігання черговий суми дільників присвоїти значення 0; p>
7) параметру
циклу K присвоїти значення 1; p>
8) якщо K
більше I/2, перейти до п. 11, інакше - до наступного пункту; p>
9) якщо I
ділиться на K без залишку, додати K до поточної сумі дільників; p>
10) збільшити K
на 1 і перейти до п. 8; p>
11) порівняти
поточну суму дільників з максимальною, якщо максимальна менше, p>
запам'ятати нове значення і число, відповідне
цієї суми; p>
12) збільшити I
на 1 і перейти до п. 5; p>
13) вивести
число з максимальною сумою дільників і цю суму; p>
14) кінець. p>
Program Sum_Del; p>
Var N, I,
Sum_Max, Sum, K, Ch: Integer; p>
Begin p>
Write ( 'Введіть число N:'); ReadLn (N); p>
Sum_Max: = 1; (Максимальна сума
дільників) p>
Ch: = 1; (Число з максимальною сумою
дільників) p>
For I: = 2 To N Do (Це цикл за кількістю чисел) p>
Begin p>
Sum: = 0; p>
For K: = 1 To I Div 2 + 1 Do (У цьому
циклі знаходимо суму дільників) p>
If I Mod K = 0 Then (Якщо I без остачі ділиться на K, то K --
дільник I) p>
Sum: = Sum + K; p>
Sum: =
Sum + I; p>
If Sum
> Sum_Max Then Begin Sum_Max: = Sum; Ch: = I End; p>
End; p>
WriteLn ( 'Максимальну суму дільників',
Sum_Max, 'має число', Ch) p>
End. p>
Завдання 4. Дано
натуральне число n. Отримати всі прості дільники цього числа. P>
(Програма
відшукання простих дільників даного числа) p>
Program Pr_Del; p>
Var N, I, Vsp
: Integer; p>
Log_Per,
Priznak: Boolean; p>
Begin p>
Write ( 'Введіть натуральне число:'); p>
ReadLn (N); p>
Priznak: = True; (Ознака того, не
чи є введене число простим) p>
(Поки параметр циклу не перевищив
квадратного кореня з даного числа, p>
продовжуємо пошук простих дільників) p>
For I: = 2 To Round (Sqrt (N)) Do p>
If N Mod
I = 0 Then p>
Begin p>
Priznak: = False; (Введене число не є простим) p>
Log_Per: = False; (Логічна змінна, що приймає
значення True, p>
якщо знайшлися подільники I, відмінні від
1 і I) p>
Vsp: = 2; p>
Repeat p>
If (I Mod Vsp = 0) And (I <> Vsp) Then Log_Per: = True; p>
Vsp: = Vsp + 1 p>
Until (Vsp> I Div 2 + 1) Or
Log_Per; p>
If
Not (Log_Per) Then WriteLn (I) (Якщо число I просте, друкуємо його) p>
End; p>
If Priznak
Then WriteLn (N) p>
End. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.comp-science.ru/
p>