Цикл с предусловием WHILE

Этот вид оператора цикла называют цикл с предусловием.

../../../_images/06_01.png
../../../_images/06_02.png
../../../_images/06_03.png

Пример_WHILE01:

#include <iostream>
using namespace std;
int main()
{
        int i=0;
        while (i<=10)
        { //(*)
                cout<<i<<" ";
                i++;
        }
        cout<<endl;
        i=10;
        while (i>=1)
        { //(*)
                cout<<i<<" ";
                i--;
        }
        cout<<endl;
        system("pause");
}
../../../_images/06_04.png

Пример_WHILE02: Суммирование произвольных чисел, больших 0, вводимых склавиатуы. Выполнение суммирование должно прерваться при вводе отрицательного значения.

#include <iostream>
#include <clocale>
using namespace std;
int main(){
        setlocale(LC_CTYPE,"rus");
        float s=0,i;
        while (true){
                cout<<"\nВведите произвольное положительное число: ";
                cin>>i;
                if (i<0)break;
                s+=i; //s=s+1
        }
        cout<<"\ns= "<<s<<endl;
}

Примечание

Для выхода из бесконечного цикла (условие true никогда не станет false) используется оператор break

Пример_WHILE03: Вывести на экран таблицу значений функции.

../../../_images/06_05.png

Вывод осуществить в два столбца

../../../_images/lec_while_03.png

Листинг WHILE03

#include <iostream>
#include <cmath>
#include<stdio.h>
using namespace std;
#define pi 3.14             //макропеременная pi

int main()
{

        float x,y,z,a,b,dx;
        cout<<"Введите начальное значение аргумента: ";
        cin>>a;
        cout<<"Введите конечное значение аргумента: ";
        cin>>b;
        cout<<"Введите шаг изменения аргумента: ";
        cin>>dx;
        x=a;                    //начальное значение переменной цикла
        while (x<=b)
        {
           z=sin((pi*x)/3);
           if (z<0) cout<<"f("<<x<<") = Функция не определена"<<endl;   //действительного корня из числа меньше 0 нет
           else
           {
                        y=log10(3.0)+x*sqrt(5.0*z);
                        printf("f(%5.2f) = %5.2f\n",x,y);
           }
           x+=dx; //x=x+dx Увеличение значения аргумента
        }
    return 0;
}

Пример_WHILE04: Составить программу для вычисления зачения функции.

../../../_images/06_06.png

Математическая модель

Необходимо составить рекуррентную формулу, в которой каждый последующий член ряда вычисляется при помощи предыдущего. Из формулы видно, что шаг изменения знаменателя равен 2. (1!, 3!,5!,…). Обозначим nm! - знаменатель m-го члена ряда, имеем:

../../../_images/06_07.png

Таким образом, получаем рекуррентную формулу:

../../../_images/06_08.png

Листинг WHILE04

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
#define pi 3.14 //определяем макропеременную pi
int main()
{
        const float eps=exp(-7.0); //предел уменьшения члена ряда
        double xgrad,x,s,u;
        unsigned int n;
        cout<<"Введите значение угла: ";
        cin>>xgrad;
        x=xgrad*pi/180;//перевод угла в радианы
        s=x;u=x;n=1;
        while (abs(u)>eps)
        {
                n=n+2;// см. матем модель (**)
                u=-u*x*x/((n-1)*n);//вычисление очередного члена ряда см. матем модель(*)
                //каждый следующий член ряда вычисляется как произведение предыдущего u
                //на -x^2/((n-1)*n)
                s=s+u;
        }
        cout<<"Sin("<<xgrad<<")= "<<s<<endl;
}