- While, або цикл з передумовою
- Repeat, або цикл з умовою поста
- For, або цикл з параметром
- перша форма
- друга форма
Привіт, дорогі читачі! Ось ми з вами і підійшли до вивчення циклів. Цикли в Паскаль. Що це таке? Як цим користуватися? Для чого вони потрібні? Саме на ці питання я сьогодні і відповім.
Якщо ви читали цей урок , То знаєте, що існує три види алгоритмів: лінійний, розгалужується і циклічний. Ми з вами вже знаємо, як реалізовувати лінійні і розгалужуються алгоритми на Паскалі. Приступимо до вивчення останнього типу алгоритмів.
У мові Pascal, як і в більшості мов програмування, існує три типи циклічних конструкцій.
Будь-який цикл складається з тіла і заголовка. Тіло циклу - це набір повторюваних операторів, а умова - це логічне вираз, в залежності від результату якого і відбувається повторне виконання циклу.
Візьмемо одну задачу, яку будемо вирішувати, використовуючи різні види циклів.
Завдання 1. Вивести все числа від 1 до числа, введеного з клавіатури.
While, або цикл з передумовою
Як ви, напевно, вже зрозуміли з назви, while - це цикл, в якому умова стоїть перед тілом. Причому тіло циклу виконується тоді і тільки тоді, коли умова true; як тільки умова стає false, виконання циклу припиняється.
While має формат:
while <умова> do <оператор 1>; {Поки ... роби ....}
Даний цикл підходить тільки для одного оператора, якщо ж ви хочете використовувати кілька операторів в своєму коді, вам слід зробити висновок їх в операторні дужки - begin і end; .
Рішення задачі.
program example_while; var i, N: integer; {Оголошуємо змінні} begin i: = 1; {Надаємо i значення 1} readln (N); {Прочитуємо останнє число} while i <= N do {Як тільки i стане більше N, цикл припиниться (можна було б написати просто <, але довелося б додавати 1 до N)} begin {Відкриваємо операторні дужки} write (i, '' ); {Виводимо i} Inc (i); {Збільшуємо i на один.} End; {Закриваємо дужки} end.
Repeat, або цикл з умовою поста
Repeat - повна протилежність while. Repeat - це цикл, в якому умова варто після тіла. Причому воно виконується тоді і тільки тоді, коли результат умови false; як тільки логічне вираження стає true, виконання циклу припиняється.
Repeat має формат:
repeat {повторюй ...}
<Оператор 1>;
<Оператор 2>;
...
until {до ...} <умова>
Begin і end не потрібні.
Рішення задачі.
program example_repeat; var i, N: integer; {оголошуємо змінні} begin i: = 1; {Надаємо i значення 1} readln (N); {Прочитуємо останнє число} repeat {після repeat не потрібно begin і end} write (i, ''); {Виводимо i} Inc (i); {Збільшуємо i на один.} Until i = N + 1; {Наприклад, i = 11, а N = 10. Цикл припиниться, так умова стало true.} End.
For, або цикл з параметром
For - це цикл, в якому тіло виконується задану кількість разів.
Існує дві форми запису цього циклу:
перша форма
for <счетчік1>: = <значення1> to <конечное_значеніе> do <оператор1>;
Після кожної ітерації значення <счетчік1> буде збільшуватися на 1.
<Значення1> - це початкове значення лічильника. Це може бути змінна або число.
<Конечное_значеніе>: як тільки значення <счетчік1> побільшає <конечное_значеніе>, виконання циклу припиниться.
Якщо потрібно написати кілька операторів в тілі циклу, використовуємо begin і end.
І <счетчік1>, і <конечное_значеніе>, і <значення1> - змінні цілого типу.
Найчастіше в якості лічильника використовується змінна i.
друга форма
for <счетчік2>: = <значення2> downto <конечное_значеніе> do <оператор1>;
Після кожної ітерації значення <счетчік2> буде зменшаться на 1.
<Значення2> - це початкове значення лічильника.
<Конечное_значеніе>: як тільки значення <счетчік2> стане менше <конечное_значеніе>, виконання циклу припиниться.
Два важливих примітки:
- Цикл повторюється, поки значення значення лічильника лежить в відрізку [значення; конечное_значеніе].
- Змінювати значення лічильника всередині тіла не можна! Ось що виводить компілятор:
Рішення задачі:
program example_for; var i, N: integer; begin read (N); {Припустимо, що ми ввели 10} for i: = 1 to N do write (i, ''); {Кількість ітерацій - 10 - 1 + 1 = 10} end.
Погодьтеся, цей код простіше і лаконічніше, ніж всі попередні. І цикл for - не зовсім звичайний цикл, в ньому немає логічного умови. Тому цикл з параметром в програмуванні називають синтаксичним цукром. Синтаксичний цукор - це доповнення синтаксису мови програмування, які не додають нових можливостей, а роблять використання мови більш зручним для людини.
Давайте вирішимо пару завдань.
For1. Дано цілі числа K і N (N> 0). Вивести N раз число K.
Організовуємо простий цикл від 1 до необхідного числа.
program for1; var K, N, i: integer; begin read (K, N); for i: = 1 to N do write (K, ''); {Пишемо До через пробіл} end.
For2. Дано два цілих числа A і B (A <B). Вивести в порядку зростання всі цілі числа, розташовані між A і B (включаючи самі числа A і B), а також кількість N цих чисел.
Так як A <B, то цикл повинен буде виводити все числа від А до B. Щоб порахувати кількість чисел, використовуємо формулу: <конечное_значеніе> - <початкове_значення> + 1.
program for2; var A, B, i, count: integer; begin read (A, B); for i: = A to B do write (i, ''); {Виписуємо числа від меншого до більшого} count: = B - A + 1; {Вважаємо кількість чисел} writeln; write ( 'Кількість чисел -', count); end.
For9. Дано два цілих числа A і B (A <B). Знайти суму квадратів всіх цілих чисел від A до B включно.
Організовуємо такий же цикл, як і в попередній задачі, але одночасно підсумовуємо квадрати всіх чисел. Щоб вирахувати квадрат, використовуємо функцію Sqr .
program for9; var A, B, i, S: integer; begin read (A, B); S: = 0; {PascalABC робить це автоматично, але якщо у вас інший компілятор радимо обнуляти змінні вручну} for i: = A to B do S: = S + Sqr (i); {Складаємо всі квадрати} writeln; write ( 'Сума квадратів -', S); end.
For13 °. Дано ціле число N (> 0). Знайти значення виразу 1.1 - 1.2 + 1.3 - ... (N доданків, знаки чергуються). Умовний оператор не використовувати.
Для того, щоб поміняти знак, кожну ітерацію циклу міняємо значення спеціальної змінної на протилежне.
program for13; var N, A, i: integer; S: real; begin Write ( 'N ='); readln (N); S: = 1.1; A: = 1; {Спочатку позитивне} for i: = 2 to N do {першу ітерацію циклу ми вже зробили, тому починаємо відлік з 2} begin A: = -A; {Тепер негативне} S: = S + A * (1 + i / 10); {Складовими} end; Writeln (S: 5: 1); {Віддамо під дробову частину одне знакоместо} end.
While1 °. Дано позитивні числа A і B (A> B). На відрізку довжиною A розміщено максимально можлива кількість відрізків довжиною B (без накладання). Чи не використовуючи операції множення і ділення, знайти довжину незайнятої частини відрізка A.
Кожен раз віднімаємо B з А, поки А - В> = 0.
program while1; var A, B: integer; begin readln (A, B); while (A - B)> = 0 do A: = A - B; {Поки різниця позитивна, віднімаємо. Необхідно передбачити варіант з кратністю А і B, тому> =} write (A); end.
While4 °. Дано ціле число N (> 0). Якщо воно є ступенем числа 3, то вивести True, якщо не є - вивести False.
Діємо в такий спосіб: поки N ділиться без остачі на три, ділимо N остачі. Потім, якщо N = 1 - число є ступенем трійки; якщо N <> 1, тоді число - не ступінь трійки. Для того щоб вирішити цю задачу, потрібно знати, що таке div і mod , І як працюють логічні вирази .
program while4; var N: integer; begin readln (N); while N mod 3 = 0 do N: = N div 3; {Поки залишок від ділення на три дорівнює нулю, ділимо N остачі} writeln (N = 1); {Логічне вираз} end.
На сьогодні все! Не забувайте частіше заходити на наш сайт і клікати по кнопках, які розташовані перед коментарями.
Що це таке?Як цим користуватися?
Для чого вони потрібні?