Пятница, 22.09.2017, 15:24
Приветствую Вас Гость | RSS

Кузница миров

Меню сайта
Категории раздела
Мои статьи [2]
Курс : "Основы С++ для начинающих программистов игр." [25]
WindMill Engine [3]
XNA4 RPG [0]
Перевод туториалов но созданию RPG на C# c XNA4.
C# & Leadwerks [5]
Программирование Leadwerks Engine на языке С# с помощью врапера Le.NET.

Каталог статей и уроков

Главная » Статьи » Курс : "Основы С++ для начинающих программистов игр."

3.2: Циклы
3,2 Циклы

В языке с ++ есть несколько способов организации циклов.
Самый простой из них это так называемый цикл с предусловием.

while

Как можно понять их названия цикл с предусловием, прежде чем цикл будет выполняться, проверяется некое условие.

Вот синтаксис этого цикла:

Code

while( условие )
{
   Тело цикла   
}


Слово while – переводится с английского как "пока", а всю логику цикла можно передать так. Пока условие истинно, блок кода, содержащийся в теле цикла(это такой термин), будет выполнен, и если условие продолжает оставаться истинным, он будет выполнен снова и снова.
Поэтому если необходимо завершить цикл, нужно изменить условие так, чтобы оно стало ложным, ну или оно станет ложным в процессе, или воспользоваться уже знаком нам оператором break.
Вот два примера.
Первый, где меняется условие:

Code

#include <iostream>
using namespace std;

void main ()
{
   setlocale( LC_ALL, "Russian" );
     
   int i=0;   // переменная для подсчета циклов
   while(i<100000)  // если i меньше 100000, цикл выполняется
   {
    i++;   // счетчик циклов увеличивается на единицу
   }

   cout<<"Все. Нажмите Enter для выхода...";    // это, чтобы мы знали, что циклы закончились
   cin.get();
}



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

Второй, с использованием оператора break:

Code

#include <iostream>
using namespace std;

void main ()
{
   setlocale( LC_ALL, "Russian" );
     
   int i=0;   // переменная для подсчета циклов
   while(true)   // бесконечный цикл
   {
    if (i==100000)    // если выполнено 100000 циклов
     break;  // цикл прерывается
    i++;   // иначе счетчик циклов увеличивается на единицу
   }

   cout<<"Все. Нажмите Enter для выхода...";    // это, чтобы мы знали, что циклы закончились
   cin.get();
}


ПОДОБНЫЙ СПОСОБ ЗАВЕРШЕНИЯ ЦИКЛА Я НЕ РЕКОМЕНДУЮ. Лучше опираться только на условие, иначе чревато разного рода неприятностями.

В последнем примере также продемонстрирован способ организации бесконечного цикла:

Code

while(true)



Здесь условие уже определено как истинное, и изменить его невозможно, следовательно выйти из этого цикла можно только с помощью break или return, но последняя инструкция вообще завершит работу программы.

do…while


У цикла с предусловием есть брат, которого называют цикл с постусловием. Отличаются они тем, что в цикле с предусловием это самое условие проверяется с самого начала, и если оно ложно, цикл выполняться не будет вообще, тогда как проверка условия в цикле с постусловием происходит только после его первого выполнения. То есть, в не зависимости от условия, цикл будет выполнен как минимум один раз. Бывают моменты, когда подобное необходимо. Во всем остальном эти циклы идентичны.
Вот синтаксис:

Code

   do     
   {
    Тело цикла   
   }
   while(условие);

   


Обратите внимание. Здесь после

Code

while(условие);



обязательно ставится точка с запятой, тогда как в предыдущем варианте ее не было. Если ее не поставить, компилятор сообщит об ошибке.

for


Приводя примеры для предыдущих циклов, я использовал в программе счетчики. Следующий способ организации цикла уже предполагает подобного счетчика. Если предыдущие циклы могли выполнятся неопределенное количество раз, то в цикле с использованием оператора for количество повторений задается с самого начала. Кстати, именно этому циклу отдает предпочтение большинство программистов.

Синтаксис таков:

Code

for(инициализация счетчиков; условие; увеличение счетчика)
{
   Тело цикла
}



Как видно непосредственно в операторе for происходит инициализация счетчика, там же выполняется проверка условия, и там же происходит увеличение счетчика. Все собрано в одном месте, что, несомненно, очень удобно.
Этот синтаксис можно заменить аналогичной записью цикла while:

Code

инициализация счетчиков
while( условие )
{
   {
    Тело цикла   
   }
увеличение счетчика
}



И подобный вариант уже был проиллюстрирован в примере.
А теперь приведу пример, чтобы лучше понять цикл for:

Code

#include <iostream>
using namespace std;

void main ()
{
   setlocale( LC_ALL, "Russian" );
     
   for(int i=0;i<20;i++)    
   {
    cout<<i<<"\n";  // вывод значения счетчика
   }

   cout<<"Все. Нажмите Enter для выхода...";  // это, чтобы мы знали, что циклы закончились
   cin.get();
}


Опишу как этот пример работает.
В операторе for в месте для инициализации объявляется переменная i, которой сразу же присваивается начальное значение 0. Эта часть цикла будет выполнена только один раз. Далее происходит проверка условия, в данном случае это i<20. В данный момент оно истинно, поэтому выполняется тело цикла со следующим кодом:

Code

cout<<i<<"\n";  // вывод значения счетчика


здесь просто выводится текущее значение счетчика.
После этого выполняется последняя часть оператора for, в которой значение счетчика увеличивается на единицу.

Code

i++



Далее вновь проверяется условие и если оно по-прежнему истинно – все повторяется.

Отмечу, что как в случае с while, условие в цикле for не обязательно должно относится к счетчикам.
Как и с оператором while, с оператором for также возможна организация бесконечного цикла. Для этого достаточно оставить все поля пустыми:

Code

for(;;)
{
   Тело цикла
}



При работе с циклом for используется еще один оператор – continue.
С английского переводится - "продолжить", и делает он то же, что и означает.
Как только в теле цикла встречается этот оператор, оставшийся код пропускается и программа переходит к оператору увеличения счетчика.
Приведу пример:

Code

   for(int i=0;i<4;i++)    
   {
    if(i==2)  // если i равно 2
     continue;    // срабатывает этот оператор

    cout<<i<<"\n";  // вывод значения счетчика
   }



Здесь, когда i станет равно 2, сработает оператор continue, в результате чего строка

Code
   
cout<<i<<"\n";  // вывод значения счетчика



будет опущена, и цикл начнется заново с увеличенным на единицу значением i. Это если условие не станет ложным.

Я продемонстрировал вам способы организации бесконечных циклов, но знайте, что нужно быть очень внимательным, чтобы такой вот бесконечный цикл не возник сам по себе. Это часто встречающийся баг, когда программа уходит сама в себя войдя в цикл и не найдя с него выхода.

Ну и напоследок отмечу, что все циклы взаимозаменяемы. Просто в одном месте удобнее использовать while, а в другом for. Ну и от личных пристрастий программистов это тоже сильно зависит.
Категория: Курс : "Основы С++ для начинающих программистов игр." | Добавил: nilrem (24.10.2011)
Просмотров: 1002 | Комментарии: 1 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0