Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
2
Добавлен:
08.09.2019
Размер:
1.71 Mб
Скачать

Цикл з передумовою

Часто на практиці доводиться стикатися з циклічними об­численнями, коли кількість повторень циклу наперед невідома, зате задана деяка умова закінчення циклу. Для таких випадків у мові Паскаль є два типи операторів - цикл з передумовою і цикл з післяумовою.

Розглянемо ще раз задачу з гармонічним рядом, проте сформулюємо її так: скільки членів гармонічного ряду по­трібно, щоб сума ряду перевищила деяке число - границю, тоб­то

1+1/2+1/3+…+1/n > границя.

Звичайно, маємо на увазі мінімальну кількість членів. У цій задачі невідома кількість повторень, однак задана умова закінчення - сума > границя. Для розв'язування цієї задачі можна використати цикл з передумовою.

Загальний вигляд оператора циклу з передумовою такий:

while <умова> do <оператор>;

де <умова> - це будь-який логічний вираз, <оператор> -довільний оператор мови Паскаль. Оператор виконується в циклі доти, доки умова має значення true. Як тільки значення умови стане false, відбувається вихід з циклу і виконуватиметься наступний оператор. Оператор у циклі з передумовою може не виконуватись зовсім, якщо умова дорівнює false з самого початку.

Задачу обчислення мінімальної кількості членів гармоніч­ного ряду, сума яких перевищує деяку границю, можна реалі­зувати за допомогою оператора циклу з передумовою:

sum:=0;

numb:=0;

while sum<=board do

begin

numb:=numb+1;

sum:=sum+1/numb

end;

За допомогою оператора while можна розв’язати задачу табулювання функції (обчислення та виведення на друк всіх значень функції y=f(x), якщо аргумент x функції набуває значень з проміжку [a,b], змінюючись кожен раз на величину кроку h=x).

Програма табулювання функції y=sin(3x) на інтервалі [1,3] з кроком 0.2.

program TabFunc;

uses

Crt;

var

x,y:real;

begin

ClrScr;

x:=1;

while x<=3.05 do

begin

y:=sin(3*x);

writeln('x=',x:9:3,' y=',y:9:3);

x:=x+0.2;

end;

readln;

end.

Зазначимо, що структура циклу з передумовою передбачає перевірку умови завершення циклу перед виконанням опера­тора в циклі, що дає змогу не виконувати цього оператора жод­ного разу.

Цикл з післяумовою

Іншим способом організації циклічного процесу, коли кіль­кість повторень невідома, є використання оператора циклу з післяумовою. Загальний вигляд цього оператора такий:

repeat

<оператор 1>;

<оператор 2>;

......................

<оператор n>

until <умова>;

де <умова> - це логічний вираз; <оператор 1> ... <оператор n> - будь-які оператори мови Паскаль.

Дія оператора з післяумовою подібна до дії оператора з передумовою (while), однак перевіряється умова закінчення циклу після виконання кожного циклу. Тому цикл з післяумо­вою виконується мінімум один раз. У ньому виконуються всі оператори, записані між словами repeat і until, які відіграють роль операторних дужок. Оператори виконуються доти, доки умова дорівнює false.

Фрагмент програми обчислення мінімальної кількості членів гармонічного ряду, сума яких перевищує деяку границю, із застосуванням оператора циклу з післяумовою:

sum:=0;

numb:=0;

repeat

numb:=numb+1;

sum:=sum+1/numb

until sum>board;

Задаючи циклічні обчислення за допомогою операторів з перед- і післяумовою, треба враховувати таке:

  1. перед кожним виконанням циклу умова його закінчення повинна бути визначена, тобто мати конкретне значення;

  2. тіло циклу повинно містити оператори, які впливають на умову закінчення, інакше цикл буде виконуватись безкінеч­но;

  3. умова закінчення циклу повинна врешті-решт викона­тися.

Наведемо приклад, коли цикл доцільно організувати за до­помогою оператора циклу з післяумовою. Нехай треба вводити по черзі символи і виводити їх, доки не буде введено символ "*".

{Введення і виведення символу до введення символу ‘*’}

program DrucSym;

uses

Crt;

var

sym: char;

begin

repeat

read(sym);

writeln(sym)

until sym = '*'

end.

Тут перевірка умови можлива тільки після введення чер­гового символу.