Паскаля з постусловіем
readln (e);
i: = 0;
y: = 0;
Repeat
i: = i +1;
y: = y +1/i;
Until 1/i
Зауважимо, що оператор циклу з постусловіем є більш загальним, ніж оператор циклу з параметром - будь циклічний процес, що задається за допомогою циклу з параметром можна представити у вигляді циклу з постусловіем. Протилежне твердження невірно. Наприклад, задача про підсумовуванні перших n членів гармонійного ряду, розглянута раніше, з оператором циклу з умовою поста буде виглядати так:
Приклад коду оператора циклу Паскаля з постусловіем
Readln (n);
i: = 0;
y: = 0;
Repeat
i: = i +1;
y: = y +1/i;
Until i> n; <В
Оператор циклу Паскаля з передумовою
У разі оператора циклу Паскаля з постусловіем входить до нього послідовність операторів свідомо буде виконуватися хоча б один раз. Тим часом досить часто зустрічаються такі циклічні процеси, коли число повторень циклу теж невідомо заздалегідь, але за деяких значеннях вихідних даних передбачені в циклі дії взагалі не повинні виконуватися, і навіть одноразове виконання цих дій може призвести до невірних або невизначеним результатам.
Нехай, наприклад, дано дійсне число М. Потрібно знайти найменше ціле невід'ємне число k, при якому 3 k> M. Це завдання можна вирішити за таким алгоритмом: попередньо покласти y = 1 і k = 0; потім у циклі домножать значення y на 3 та збільшувати значення k на 1 до тих пір, поки поточне значення y вперше виявиться більше значення М. На перший погляд, тут можна скористатися оператором циклу з умовою поста:
Приклад коду оператора циклу Паскаля з постусловіем
y: = 1; k: = 0;
Repeat
y: = y * 3;
k: = k +1;
Until y> M;
Однак неважко переконатися в тому, що при M <1 буде отриманий неправильний результат k = 1, тоді як повинно бути отримано k = 0: в цьому випадку попередньо сформоване значення k = 0 є остаточним результатом і дії, передбачені в циклі, виконуватися не повинні.
Для завдання подібного роду обчислювальних процесів, коли число повторень циклу заздалегідь невідомо і дії, передбачені в циклі, можуть взагалі не виконуватися, і служить оператор циклу з передумовою. Цей оператор циклу має в Паскалі наступний вигляд:
While B do S,
де while (Поки що), do (робити, виконувати) - службові слова, В - Логічне вираження, S - оператор. Тут оператор S виконується нуль або більше разів, але перед кожним черговим його виконанням обчислюється значення виразу В, і оператор S виконується тільки в тому випадку, коли значення виразу У true. Виконання оператора циклу завершується, коли вираз У вперше приймає значення false. Якщо це значення вираз У приймає при першому ж його обчисленні, то оператор S не виконається жодного разу.
У розглянутій нами задачі правильне значення k при будь-якому значенні М може бути отримано наступним чином:
Приклад коду оператора циклу Паскаля з передумовою
y: = 1; k: = 0;
While y <= M do
Begin
y: = y * 3;
k: = k +1;
End;
Оператор циклу Паскаля з передумовою можна вважати найбільш універсальним - з використанням таких операторів можна задати і циклічні процеси, визначаються операторами циклу з параметром і постусловіем.
Зазначимо відмінності і особливості гарного стилю роботи з розглянутими циклічними операторами.
Цикл з передумовою While (поки умова істинно)
Цикл з постусловіем Repeat (до істинності умови)
1. До початку циклу повинні бути зроблені початкові установки змінних, керуючих умовою циклу, для коректного входу в цикл
2. У тілі циклу повинні бути присутнім оператори, що змінюють змінні умови так, щоб цикл через деяке число ітерацій завершився
3. Цикл працює поки умова істинно (поки True)
3. Цикл працює поки умова брехливо (поки False)
4. Цикл завершується, коли умова стає помилковим (до False)
4. Цикл завершується, коли умова стає істинним (до True)
5. Цикл може не виконатися жодного разу, якщо початкове значення умови при вході в цикл False
5. Цикл обов'язково виконається як мінімум один раз
6. Якщо в тілі циклу потрібно виконати більше одного оператора, то необхідно використовувати складений оператор
6. Незалежно ві...