Статьи

Цикли з параметром, послусловіем і передумовою. For, Repeat, While

  1. While, або цикл з передумовою
  2. Repeat, або цикл з умовою поста
  3. For, або цикл з параметром
  4. перша форма
  5. друга форма

Привіт, дорогі читачі

Привіт, дорогі читачі! Ось ми з вами і підійшли до вивчення циклів. Цикли в Паскаль. Що це таке? Як цим користуватися? Для чого вони потрібні? Саме на ці питання я сьогодні і відповім.
Якщо ви читали цей урок , То знаєте, що існує три види алгоритмів: лінійний, розгалужується і циклічний. Ми з вами вже знаємо, як реалізовувати лінійні і розгалужуються алгоритми на Паскалі. Приступимо до вивчення останнього типу алгоритмів.
У мові 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> стане менше <конечное_значеніе>, виконання циклу припиниться.

Два важливих примітки:

  1. Цикл повторюється, поки значення значення лічильника лежить в відрізку [значення; конечное_значеніе].
  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.

На сьогодні все! Не забувайте частіше заходити на наш сайт і клікати по кнопках, які розташовані перед коментарями.

Що це таке?
Як цим користуватися?
Для чого вони потрібні?

Новости