Оператор циклу з передумовою while
Оператор while використовується для організації циклічного виконання оператора або серії операторів, поки виконується певна умова.
Синтаксис :
while (умова) оператор;
або
while (умова) { тіло циклу;}.
Коли програма доходить до while, перевіряється логічна умова, що стоїть в дужках, й, якщо ця умова є істинною, тобто, значення вираження в круглих дужках не дорівнює 0, програма виконує оператор або блок операторів у фігурних дужках. Потім керування знову передається на while і історія повторюється. У такий спосіб оператор або блок, що випливає за while, буде виконуватися доти, поки умова не дасть 0 (або не перерверветься цей цикл якимсь іншим способом). Зрозуміло, що після виходу за умовою, виконання програми продовжиться з оператора, що є наступний за циклом.
Наприклад:
int x=0;
while (x<10)
{
cout<<x<<" ";
x++;
}
cout<<"\n All done";
Такий цикл виконається 10 разів, надрукувавши нам значення х від 0 до 9, і тільки після цього керування перейде на другий, наступний за циклом оператор.
Якщо умова циклу виконується завжди, наприклад
while (1) {...;}
то ми одержуємо нескінченний цикл. Це не обов'язково означає помилку в програмі, подібне роблять і спеціально, організувавши вихід із циклу іншими способами, або розраховуючи, що програма буде працювати "вічно".
Якщо ж умова дає 0 при першому вході в цикл, наприклад
int x=0;
while (x != 0)
{...;}
то оператори в тілі циклу не виконуються жодного разу.
Цикл закінчується у наступних випадках :
- умовний вираз у заголовку приймає нульове значення;
- у тілі циклу досягнуто місця, де розташований оператор break;
- у тілі циклу виконаний оператор return.
У перших двох випадках керування передається оператору, розташованому безпосередньо за циклом, у третьому випадку активна на той момент функція завершує свою роботу, повертаючи якесь значення.
Нерідкою помилкою програмістів є використання замість оператора порівняння (==) оператора присвоювання (=) у логічній умові. Наприклад, наступний фрагмент створить нескінчений цикл:
/* некоректне використання оператору циклу */
void main()
{
int j=5;
while(j=5) // змінній j присвоїти значення 5
{
cout<<,j;
+;
}
Компілятор С попередить про некоректне присвоювання в даному випадку, виправити яке особливих труднощів не викличе. В тім, часто такий цикл використовується для перевірки відповіді користувача на питання з програми ("так чи ні ?"). Компілятор С++ призведе до зависання, тому що присвоювання завжди true.
Приклад 1. Фрагмент використання while.
cout<<"Підтверджуєте ? Так чи ні ?(y/n)";
cin>>ch;
while (ch!='y' && ch!='n')
{
out<<"\n Відповідайте так чи ні . . (y/n)";
in>>ch;
}
Тіло циклу почне виконуватися, якщо користувач введе будь-який символ, відмінний від 'у' або 'n'. Цикл виконується доти, доки користувач не введе або 'у' , або 'n'.
Приклад 2. Обчислення факторіалу.
void main()
{
int n,i;
float fact;
cout<<"\nПрограма обчислення n!.\n";
cout<<"Введiть число n :\n";
cin>>n;
i = 1;
fact = 1;
while (i <= n)
{
fact *= i;
i++;
}
cout<<"\n n!=="<<fact;
}
Приклад 3. Обчислити значення функції
, якщо а=10.3; х∈[-1 , 1]; hx=0.2.
#include <iostream .h>
#include <math.h>
void main ( )
{
float a, x, y;
a = 10 . 3 ;
x = - 1 ;
while ( x <= 1)
{
y = a * x * x - sin(x);
cout<<"\n x = "<<x<<" y = "<< y ;
x = x + 0.2;
}
}