Оператори циклу

Оператори циклу використовують для здійснення багаторазового повторення деякої послідовності дій. Кожен цикл складається з тіла циклу, тобто операторів, що виконуються декіль­ка разів. Один прохід циклу називається ітерацією. У мові C++ існують три оператори циклу: while, do while, for.

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

while (вираз-умова) оператор;

де оператор — тіло циклу, що може бути представлено прос­тим  або складеним оператором.

Реалізується оператор while таким чином: якщо значення виразу-умови не дорівнює нулю («істина»), то виконується тіло циклу, а в протилежному випадку, тобто коли значення виразу дорівнює нулю («неправда»), — цикл не працює і керування передається наступному за циклом while оператору. Цикл з пере­думовою може не виконуватися жодного разу.

Як вираз-умова часто використовуються відношення. Наприклад, наступна послідовність операторів обчислює суму квадратів перших n натуральних чисел:

int і=0, sum=0;
while (і < n) sum += ++і * і;

Якщо у виразі-умові необхідно порівняти покажчик з ну­льовим  значенням (з порожнім покажчиком), то наступні запи­си оператора while рівнозначні:

while (point != NULL) . . .
while (point) . . .
while (point !=
0) . . .

Оператор while зручно застосовувати у випадках, коли кількість ітерацій заздалегідь не відома.

Оператор циклу з післяумовою do while звичайно застосовується у випадках, коли тіло циклу виконується хоча б один раз, і має таку форму запису:

do оператор
while (вираз-умова);

У процесі виконання оператора do while спочатку здійснюється вхід до тіла циклу і виконується оператор, що являє собою тіло циклу (цей оператор може бути простим або складеним); далі перевіряється вираз і, якщо він правдивий («істина»), — цикл повторюється, а коли вираз помилковий («неправда») — здійснюється вихід з циклу.

Оператор циклу з параметром for має форму запису вигляд:

for ([вир1; вир2; вирЗ]) оператор;,

де     вир1 — вираз ініціювання, що використовується для встановлення початкового значення параметра, це вираз присвоювання;
        вир2 — вираз умови, що визначає умову повторення циклу;
        вирЗ — вираз ітерації, який визначає крок зміни параметра, що керує циклом, після кожного виконання.
Вирази вир1, вир2 та вирЗ — необов’язкові параметри, які розділяються символом «;».

Оператор циклу for реалізується таким чином:

  • виконується вираз ініціювання (виконання цієї нотації може бути здійснено до оператора for);
  • обчислюється вираз-умова;
  • якщо умовний вираз приймає значення «істина» — виконуються оператори циклу;
  • обчислюється вираз ітерації;
  • знову перевіряється умова;
  • як тільки умова прийме значення 0 («неправда»), керування передається оператору, що розташований за оператором циклу for.

Оскільки в операторі for перевірка виразу-умови відбувається перед циклом, то у випадку помилкової умови цикл може жодного разу не виконуватися.

Оператор for може використовувати декілька змінних, що керують циклом, а будь-які вирази можуть бути відсутніми, наприклад:

int n, у;
for (int к = 0, n = 20; к <= n; k++, n--) 
y = k * n;
або
int = і;
for (; і < 4; i++)
.....................

Останній фрагмент має два вирази ініціювання і два вирази ітерації. Спочатку відбувається присвоювання значень змінним k = 0 і n = 20, далі здійснюється порівняння k <= n і, якщо ця умова має значення «істина», то буде виконуватися тіло циклу, а потім вираз k++ і n–, якщо ж умова не виконується, то цикл припиняє свою роботу.

Операторам циклів с параметром for слід віддати перевагу при організації циклів з лічильниками.

Приклад 5.1. Обчислити значення функції y = ax2-sinx, якщо а = 10.5; х є [-1; 2]; hx = 0,5. Скласти програми з використанням різних операторів циклу.

Розглянемо перший варіант програми (див. Р5_1_1.СРР) з використанням оператора циклу з передумовою while:

// Р5_1_1.СРР — вычисление функции у = ах2 - sinx
//......... с использованием оператора цикла while
#include <iostream.h>
#include <math.h>
#include <conio.h>
main ( )
{ float a = 10.5, x, y;
   x = -1 ;
  while (x <= 2)
   { у = a *pow(x,2) - sin(x);     // у = a* x* x- sin(x);
     cout << "x=  " << x << "   y= " << у << endl;
     x += 0.5; }
   getch ();       //задержка экрана
}

Другий варіант програми (див. Р5__1_2.СРР) із застосуванням оператора циклу з післяумовою do while має вигляд:

// Р5_1 _2.СРР — вычисление функции у = ах2 - sinx
//......... - использованием оператора цикла do while
#include <iostream.h>
#include <math.h>
#include <conio.h>
main ( )
{ float a(10.5), x(-1), y;
  do
    { у = a *pow(x,2) - sin(x);
      cout << "х= " << x << " у= " << у << endl;
      x += 0.5; }
     while (x <= 2);
     getch ();     //задержка экрана
}

Третій варіант програмної реалізації (див. Р5_1_З.СРР) при кладу з використанням оператора циклу з параметром for мае такий вигляд:

// Р5_1_З.СРР — вычисление функции у = ах2 - sinx
//----- —с использование оператора цикла for
#include <iostream.h>
#include <math.h>
#include <conio.h>
main ( )
{ float a = 10.5, x, y;
  for (x = -1; x <= 2; x+= 0.5)
  { у = a *pow(x,2) - sin(x);
    cout << "x=  " << x << "   у= " << у << endl; }
  getch ();
}

Приклад 5.2. Обчислити значення функції z при різних значенняx а і b, якщо х є [1; 4],hx = 0,5; у є [4; 12], hy = 2.

Розглянемо один з варіантів програмної реалізації цього прикладу, що відповідає алгоритму, зображеному на рис. 5.1.

// Р5_2. СРР — использование операторов do while и for
#include <iostream.h>
#include <math.h>
#include <conio.h>
main ( )
{ float x, y, z;
  int a, b;
  сin >> a >> b;
  x=1;
  cout.precision(4);
  do { cout << " x = " << x << endl;
         for (y = 4; у <= 12;  у += 2)
         { if( x < 3) z = pow(a,x) + sqrt(x + y);
           else z = a*exp(x) + log(b + y);
           cout << "у = " <<  у << " z =   "  << z << endl; }
x += 0.5;
      }
  while (х <= 4);
   getch ();
}


Функція z, згідно з умовою, залежить від двох аргумен­тів х і у, що змінюються. У цьому випадку спочатку фіксується значення однієї змінної (наприклад, х) і перебираються всі значення іншої (тобто у), потім береться друге значення першої змінної і знову перебираються всі значення іншої, і так доти, поки не будуть використані всі значення першої змінної.

У програмі присутні два цикли: зовнішній цикл (do while), у якому змінює свої значення змінна х, і внутрішній (for), де перебираються всі значення змінної у. Обидва ці цикли можна було б організувати за допомогою яких завгодно операторів циклу.

Процес розгалуження при обчисленні функції за першою або другою формулами здійснюється умовним оператором  if.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *