ЗАВДАННЯ Цілочисельна арифметика
Командою повторення чи циклом називається така форма організації дій, при якій одна і та ж послідовність дій повторюється до тих пір, поки зберігається значення деякого логічного виразу. При зміні значення логічного виразу на протилежне повторення припиняються (цикл завершується).
Для організації циклу необхідно виконати наступні дії:
перед початком циклу задати початкове значення параметра;
всередині циклу змінювати параметр циклу за допомогою оператора привласнення;
перевіряти умова повторення або закінчення циклу;
управляти циклом, тобто переходити до його початку, якщо він не закінчений, або виходити з циклу в іншому випадку.
Розрізняють цикли з відомим числом повторень (цикл з параметром) і ітераційні (з перед-і постусловіем).
У циклі з відомим числом повторень параметр змінюється в заданому діапазоні.
Якщо в циклі змінюється проста змінна, то вона є параметром циклу, якщо в циклі змінюється змінна з індексом, то індекс цієї змінної є параметром циклу.
Для організації циклу з відомим числом повторень в Pascal використовується оператор for.
Структура циклу, організованого за допомогою цього оператора, має вигляд:
For I: = A To B Do Begin End;
або
For I: = A DownTo B Do Begin End;
Тут I - параметр, що змінюється в циклі; A, B - вирази порядкового типу, що позначають початкове, кінцеве значення параметра циклу. Крок зміни номера параметра циклу дорівнює 1, якщо в заголовку циклу варто To (тобто реально таке значення параметра циклу обчислюється за допомогою функції succ); і -1 - при DownTo (обчислення проводиться за допомогою функції divd).
Порядок виконання циклу з кроком 1 наступний: обчислюються значення початкового та кінцевого значень параметра циклу; параметр якщо I приймає початкове значення; якщо I менше або дорівнює кінцевому значенню, виповнюється тіло циклу; значення параметра циклу збільшується, тобто I: = succ (I); перевіряється умова I = B) і при його виконанні цикл повторюється. Вихід з циклу здійснюється, якщо I> B (I B (або A Sum_Max Then Begin Sum_Max: = Sum; Ch: = I End;
End;
WriteLn ('Максимальну суму дільників', Sum_Max, 'має число', Ch)
End.
Завдання 4. Дано натуральне число n. Отримати всі прості дільники цього числа.
{Програма відшукання простих дільників даного числа}
Program Pr_Del;
Var N, I, Vsp: Integer;
Log_Per, Priznak: Boolean;
Begin
Write ('Введіть натуральне число:');
ReadLn (N);
Priznak: = True; {Ознака того, чи не є введене число простим}
{Поки параметр циклу не перевищив квадратного кореня з даного числа,
продовжуємо пошук простих дільників}
For I: = 2 To Round (Sqrt (N)) Do
If N Mod I = 0 Then
Begin
Priznak: = False; {Введене число не є простим}
Log_Per: = False; {Логічна змінна, приймаюча значення True,
якщо знайшлися дільники I, відмінні від 1 і I}
Vsp: = 2;
Repeat
If (I Mod Vsp = 0) And (I Vsp) Then Log_Per: = True;
Vsp: = Vsp + 1
Until (Vsp> I Div 2 + 1) Or Log_Per;
If Not (Log_Per) Then WriteLn (I) {Якщо число I просте, друкуємо його}
End;
If Priznak Then WriteLn (N)
End.
Пропонуємо читачеві самостійно розібратися з представленим рішенням.
Контрольні питання і завдання
Назвіть відмінності ітераційних циклів та циклу з параметром.
Яка структура оператора циклу з параметром? Як виконується цикл з парметр?
Якого типу повинні бути пареметр циклу, його початкове і кінцеве значення в циклі з параметром в мові Pascal?
Чи можуть параметр циклу, його початкове і кінцеве значення в циклі з параметром в мові Pascal бути різних типів? Обгрунтуйте відповідь.
Чи може один цикл бути вкладений всередину іншого? Якщо так, то яка глибина цієї вкладеності?
Яка структура циклів з перед-і постусловіем? як виконуються ці цикли?
Яке мінімальне та максимальне кількість виконань циклів з перед-і постусловіем? З чим це пов'язано?
Скільки разів виповниться фрагмент програми?
For i: = 1 to -1 Do k: = k * i;
Скільки разів виповниться фрагмент програми?
For i: = -1 to 1 Do k: = k * i;
Скільки разів виповниться фрагмент програми?
For i: = 1 downto -1 Do k: = k * i;
Скільки разів виповниться фрагмент програми?
M: = 123; While M 0 Do M: = M Mod 10;
Для циклу з параметром запишіть його повний еквівалент за допомогою циклів з перед-та постусловіем.
Для циклу з передумовою запишіть його повний еквівалент за допомогою циклу з постусловіем.
Для циклу з постусловіем запишіть його повний еквівалент за допомогою циклу з передумовою.