Оператори за цикъл

   Oператорите за цикъл се използват, когато дадено действие или поредица
от действия трябва да се повтарят многократно в зависимост от дадено условие.
В езика за програмиране с++ операторите за цикъл са: for , while, do-while .

Оператор за цикъл for
   Обикновенно се използва, когато броя на повторенията е известен предварително.
Оператор за предусловие, първо се проверява условието след това се изпълняват
операторите в тялото на цикъла ( операторите между фигурните скоби ).

Синтаксис :

          for (
начални стойности ;   условие   ;       промяна        )
                           на променливите                                     на променливите

{
       Поредица от оператори;
}
Действие :
Докато условието е вярно повтаряй операторите, които се намират между
фигурните скоби (т.е. поредицата от оператори).

Пример 1 : Отпечатване на числата от 1 до 10

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
      int i;
      for(i=1;i<11;i=i+1)
        {
          cout << i << ",";
        }
      return 0;
  }

Обяснение :
   В началото променливата i=1, проверяваме i по-малко ли е от 11, ако е "да"
отпечатваме i ,след това отпечатваме ",". Променливата i се е увеличила с 1 (i=i+1=2).
Проверяваме i<11 ,ако е "да" се изпълнява отново действието между фигурните
скоби отпечатваме 2(i=2),след това отпечатваме ",". Променливата i се е увеличава
с още 1 (i=i+1=2+1=3).Проверяваме i=3<11 ,ако е "да" се изпълнява отново изпълняваме
действието между фигурните скоби отпечатваме 3(i=3),след това отпечатваме ",".
Така тази поредица от действия се повтаря, докато i не стане равно на i=11,
проверява се условието i<11 отговорът е "не" и се изпълнява оператора, който
следва непосредствено след затварящата фигурна скоба на оператора for.

Основната конструкция на оператора е : for(   ;   ;   ) -това е безкраен цикъл.
Можете да зададете няколко начални стойности, които да следите и да променяте като
разделитела е запетая ','     for (n=0,i=100;n!=i;n=n+5,i=i-5).
Межете да включите и оператора cin >> във оператора for (;k!=0;i++,cin >>j,k=j).

Пример 2 : Събиране на числата от 1 до 10

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
      int i,s=0;
      for(i=1;i<11;i=i+1)
        {
          s=s+i;
        }
        cout<< "S="<< s<< endl;
      return 0;
  }


Пример 3 : Събиране на числата от 1 до 10, но този пример извежда и числата, които ще събира.

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
      int i,s=0;
      for(i=1;i<11;i=i+1)
        {
          s=s+i;
          cout<< i;
                     if (i==10) continue;
          cout<< "+";
        }
        cout<< "="<< s<< endl;
      return 0;
  }

   Пример 4 : Събиране на числа,0+100,5+95,10+90
променливата br e брояч на повторенията.

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
     int s=0,i,n,br=0;
    for (n=0,i=100;n!=i;n+=5,i-=5)
      {
         br++;
        cout<< n<< "+"<< i<< "="<< n+i<< " "<< br<< endl;
         s=s+(n+i);
      }
     cout<< "s="<< s<< "\n";
     return 0;
   }

   Пример 5 : Събиране на числа, докато не натиснете 0 за край.
#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
     int s=0,j=0,k=1;
     cout<< "Sum input numbers : (0 - for end) "<< endl;
     for (;k!=0;cin >>j,k=j)
       s=s+j;
     cout<< "s="<< s<< "\n";
     return 0;
  }

   Пример 6 : По зададени x - реално и n - естествено числа.
Пресметнете сумата :  masiv
естествени числа - целите положителни числа без 0 (нула);
реални числа - всяко реално число се изобразява с точка върху числовата
ос от минус(-) безкрайност до + безкрайност (или най-елементарно обяснение e: всички числа
с десетична запетая положителни и отрицателни).

#include <iostream> //for Code Blocks
using namespace std;
int main()
     {
       double x,x1=1,s=1;
       int i,n;
       cout<< "x=";
       cin>>x;
       cout<< "n=";
       cin>>n;
       for(i=1;i<=n;i++)
        {
           x1=x1*x/i;
           s=s+x1;
        }
       cout<< "s="<< s<< endl;
       return 0;
     }

   Обяснение на примера: първоначално се задават s=1 и x1=1,
защото първото число което ще сумираме е 1 ,това е s; x1=1 първоначално се
умножава по 1 за да започне цикъла. Повдигането на степен и делението на факториела се
осъществява от умножението и натрупването в променливата x1=x1*x/i . Променливата
x1 постоянно намалява, защото факториела(знаменателя) расте по-бързо. Променливата
S само събира елементите S=S+x1.


Пример 7 : Изчисляване на факториел на дадено естествено число.
Възможно най-краткия пример. На екрана се извежда n= , ако въведете 3 ще изведе
(1*2*3) n!=6, ако въведете 5 ще изведе (1*2*3*4*5) n!=120

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
     unsigned long long int f=1,i=1,n;
     cout<< "n=";
     cin >> n;
     for(f,i;i<=n;i++) f=f*i;
     cout<< n<< "!="<< f;
     return 0;
   }
Оператор за цикъл while
  Оператор за цикъл с предусловие. Обикновенно се използва, когато броя на
повторенията не е известен предварително. Проверява се условието в скобите,
докато условието е вярно се повтарят поредицата от операторите, които се намират между фигурните скоби.

Синтаксис :

          while (   условие  )
           {
                Поредица от оператори;
            }


  Действие :
   Проверява се условието в скобите, ако условието е вярно (true)се повтарят
операторите, които се намират между фигурните скоби (т.е. поредицата от оператори).
Операторите във фигурните скоби се повтарят многократно, докато условието
е вярно.
   Ако условието не е вярно ( false ), се прескачат всички оператори, които
се намират между фигурните скоби и действието на програмата продължава от
реда, който е непосредствено след затварящата фигурна скоба.
   Ако условието не е вярно още при първата проверка, цикъла не се изпълнява
нито веднъж (поредицата от оператори, който се намират между фигурните скоби).

Пример 8 : Събиране на числата от 1 до 100

#include <iostream> //for Code Blocks
using namespace std;
int main()
   {
      int i=1,S=0;
      while(i<101)
        {
         S=S+i;
         i++;
        }
      cout << "S="<< S;
      return 0;
   }

Пример 9 : Изчисляване на факториел на дадено естествено число.

#include <iostream> //for Code Blocks
using namespace std;
int main()
{
int i=1,n;
unsigned long long int factorial=1;
cout<<"n=";
cin >> n;
while(i<=n)
{
cout<< i<< "*";
   {
      factorial=factorial*i;
      i++;
   }
}
cout<< "="<< factorial<< endl;
cout<< n<< "! ="<< factorial<< endl;
return 0;
}
   Пример 10 : Пресметнете сумата : sum
по формулата sumестествени числа от 0 до 100;

#include <iostream> //for Code Blocks
using namespace std;
int main()
{
double i=0,s=0;
while(i<=100)
{
s=s+i/(i+1);
i++; }
cout<< "s="<< s<< endl;
return 0;
}

   Пример 11 : Приближено пресмятане на числото pi като знаем, че
pi  mожем да изчислим
сбора до 1 000 000 000 събирания с точност до 8 знак след десетичната запетая;
На моя компютър изчаквам резултата около 15 секунди.

#include <iostream> //for Code Blocks
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
long double n,i=1,s=0;
while(i<=1000000000)
{
s=s+1/(i*i);
i++; }
n= sqrt(6*s);
cout<< "n="<< setiosflags(ios::fixed)<< setprecision (8)<< n<< endl;
return 0;
}

Обяснение: след като изчислите сумата по формулата s=s+1/i*i; ,тя е равна на
pi
Хедър фаила #include <iomanip> вклюява в себе си операторите:
setiosflags(ios::fixed) и setprecision (8), които служат за извеждане на
резултата 8 знака след десетичната запетая, ако е написано 10 ще се извеждат
10 знака след десетичната запетая, но за милярд събирания pi се изчислява с
точност до осмия знак. За по-голяма точност трябва да се използва по-голямо
число за цикъла и съответно много повече време и скорост на компютъра.


Оператор за цикъл do - while
  Оператор за цикъл със следусловие. Обикновенно се използва, когато броя на
повторенията не е известен предварително.
   Синтаксис :

          do
           {
                Поредица от оператори;

            }  while(   условие  );


   Действие :
 Първо се изпълняват операторите, които се намират във фигурните скоби
непосредствено след оператора за цикъл do , след това се проверява дали
условието е вярно, ако условието е вярно (true) отново се изпълняват
операторите, които се намират между фигурните. Операторите във фигурните
скоби се повтарят многократно, докато условието е вярно.
Ако условието не е вярно ( false ), се прескачат всички оператори, които
се намират между фигурните скоби и действието на програмата продължава от
реда, който е непосредствено след while(   условие  );
   Важно:
 Операторите, които се намират между фигурните скоби, ще се изпълнят
задължително поне веднъж, защото условието се проверява след (следусловие)
като са изпълнят всички оператори, който се намират в тялото на
цикъла (т.е. do {...} ). Да не се забравя, че след оператора while се пише " ; " .

Пример 12 : Събиране на числата от 1 до 100.

#include <iostream> //for Code Blocks
using namespace std;
int main()
{
int i=1,S=0;
do
{
   S=S+i;
   i++;
}while(i<101);
cout << "S="<< S;
return 0;
}

Пример 13 : Събиране на числата, които завършват на 5 от 1 до 100.
Ако искаме да съберем числата кратни на 5. Трябва да заменим реда if(i%10==5) с if(i%5==0).

#include <iostream> //for Code Blocks
using namespace std;
int main()
{
int i=1,S=0;
  do
    {
    if(i%10==5)
      {S=S+i;
      cout<< i<< ",";
      }
   i++;
    }while(i<101);
cout << "S="<< S;
return 0;
}

Пример 14 : Създаване на примерно меню.

#include <iostream> //for Code Blocks
#include <stdlib.h>
using namespace std;
int main()
{
char c;
 do {
        system("cls");
        cout << " 1. Main menu" << endl;
        cout << " 2. Data Base" << endl;
        cout << " 3. Access" << endl;
        cout << " Your choise =>"; cin>>c;
     } while((c!='1')and(c!='2')&&(c!='3'));
return 0;
}

  Заглавния файл stdlib.h се използва за да се използва
system("cls") - изчиства екрана.


  Пример 15 : Програма, която преброява и събира на цифрите на число въведено от клавиатурата .
Максималния брой цифри е 19.
Същият, но по-сложен пример е представен в задачи пример N8.

#include <iostream> // for Code::Blocks on Windows
#include <limits.h>
using namespace std;
int main()
{
unsigned long long int S=0,c=0,r,v,n;
cout<< " Enter n (max 19 sings):"<< endl;
cout<< "n=";
cin>> n;
do
{
r=n/10;
v=n%10;
cout<< v<< "+";
S=S+v;
c=c+1;
n=r;
} while(n>0);
cout<< "="<< S;
cout << endl<< "Sum="<< S<< endl;
cout << "Count="<< c<< endl;
return 0;
}




Благодаря за вниманието Ви !