16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Программирование на С++ - это не сложно! Часть 4

13.10.2008

Алексей Антипов (KyberAlex) <kyberalex@mail.ru>

Основные понятия языка С++. Раздел 5 - Ключевые слова С++

Организация циклов в С++

Циклы в С++ могут быть трех видов:

  • цикл с предусловием - while
  • цикл с постусловием - do-while
  • цикл с управляющей переменной - for

Цикл с предусловием записывается c помощью ключевого слова while в следую-щем виде:

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

Тело цикла - это фрагмент программы, который будет выполняться раз за разом, пока выполняется условие, заданное ключевым словом while. Условие формиру-ется по тем же правилам, что для if-else (см. 7.1 ). Пример, в котором на экран выводятся значения переменной а, до тех пор пока ее значение не превышает 23:

    int a = 1;
    while( a < 23 )
{
    cout << a << "\n";
    a += 4;
}

Если условие изначально не выполняется, то тело цикла будет проигнорирова-но. Т.е. если в предыдущем примере присвоить переменной а начальное значение 76, то на экран ничего выведено не будет, т.к. условие а < 23 не будет выполнено, и, следовательно, тело цикла, содержащее cout<<... и а+=4, будет пропущено. Таким образом, в цикле с предусловием сначала выполняется проверка условия, а затем, в зависимости от результата проверки, выполняется или нет тело цикла.

Цикл с постусловием является противоположностью цикла с предусловием. В случае такого цикла, его начало обозначается ключевым словом do , а while( условие ) переносится в конец цикла.

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

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

int a = 76;
do
{
    cout << a << "\n";
    a += 4;
}
    while( a < 23 )

на экран будет выведено число 76, несмотря на то что условие а < 23 явно не выполняется. В связи с этой особенностью, цикл с постусловием считается более опасным с точки зрения порождения возможных ошибок в программе, и если есть возможность, всегда лучше заменить его эквивалентным циклом с предусловием.

Цикл с управляющей переменной задается при помощи ключевого слова for. В таком цикле, будет выполнятся тело или нет, определяется путем проверки заданной управляющей переменной.

for( int i=5; i < 17; i++ )
{
    cout << i << "\n";
}

В данном примере в качестве управляющей переменной задана переменная i, с начальным значением 5. В качестве условия прекращения цикла задано достижение управляющей переменной значения 17. В качестве действия над управляющей переменной задано увеличение ее на единицу при каждом выполнении тела цикла (оператор i++). В результате работы примера на экран будут выведены числа от 5 до 16 включительно. Цикл for, также как и цикл while, проверяет условие перед выполнением своего тела, т.е. если в последнем примере задать i=34, то тело цикла будет пропущено. В общем виде цикл for записывается так:

for (описание управляющей переменной;

проверка условия;

действие с управляющей переменной)

    {
    тело цикла;
}

Здесь приведена каноническая форма записи цикла for. На самом деле вариантов записи его очень много. В частности, описание управляющей переменной можно вынести за пределы цикла:

int i = 5;
...
for( ; i < 17; i++ )
{
    ...
}

или так:

int i;
...
for( i=5; i < 17; i++ )
{
    ...
}

Можно также убрать в другое место действие с управляющей переменной:

for( int i=5; i < 17; )
{
    ...
    i++;
    ...
}

Можно даже определить несколько управляющих переменных:

for( int i = 4, j = 49; i < 17 && j > 24; i++, j-- )
{
    ...
}

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

for( int i = 4, short j = 49; ... ) {...}

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

int i;
short j;
for( i = 4, j = 49; ... ) {...}

Теперь поговорим о ключевых словах для досрочного выхода из цикла. Применение в теле любого из вышеописанных циклов ключевого слова break приведет к немедленному прерыванию цикла и переходу в точку программы, расположенную непосредственно после данного цикла.

while (условие)
{
    тело цикла часть 1;
    break;
    тело цикла часть 2;
}
продолжение программы
...

В этом примере выполнится только "тело цикла часть 1", и затем произойдет переход в точку "продолжение программы" независимо от того, выполняется или нет условие цикла.

Ключевое слово continue действует немного по-другому. Когда в теле цикла встречается continue, то происходит переход на начало цикла, т.е. остаток тела цикла не выполняется.

while( условие )
{
    тело цикла часть 1;
    continue;
    тело цикла часть 2;
}
продолжение программы
...

В этом примере выполнится "тело цикла часть 1", и затем произойдет переход на while, где, как обычно, будет выполнена проверка условия, и, в зависимости от результата проверки, тело цикла будет выполнено еще раз или нет.

Вы можете подумать, зачем нужны эти ключевые слова, ведь кажется, что при их применении фрагмент программы "тело цикла часть 2" никогда не выполняется. На самом деле они, как правило, используются для обхода некоторых особых случаев в теле цикла. Например:

for (float x = -9; x < 14; x++)
{
    cout << x << " ";
    if( x == 0 ) continue;
    cout << 1/x << "\n";
}

В данном примере производится расчет и вывод на экран обратных величин для чисел х от -9 до 13. Если х=0, то при вычислении 1/х возникнет ошибка деления на ноль. Во избежание этого мы проверяем в теле цикла х на равенство нулю, и когда х=0, мы пропускаем с помощью continue остаток тела цикла, где вычисляется 1/х .

И в заключение раздела рассмотрим понятие бесконечного цикла. Бесконечный цикл - это цикл, условие выполнения которого всегда выполняется, вследствие чего тело цикла "прокручивается" неограниченное число раз, без перехода на дальнейшую часть программы. Например, такой цикл является бесконечным:

while (2*2==4)
    {
    тело цикла;
}

Обычно такие циклы возникают из-за неправильного построения условия цикла или из-за неправильных действий с управляющими переменными. Программа, в которой возник бесконечный цикл в однозадачной операционной системе (напр. MS-DOS), в 90% случаев приведет к зависанию компьютера, с выходом только по Ctrl-Alt-Del или Reset. В многозадачной среде (напр. Windows) вам, скорее всего, придется закрывать такую программу через диспетчер задач.

Отметим, что выход из бесконечного цикла возможен по break. Иногда бесконечный цикл может быть полезен, тогда обычно его записывают в виде

    while(1)
    {
    тело цикла;
}
и, как правило, где-то в его теле используется break.

Программирование на С++ - это не сложно! Часть 1
Программирование на С++ - это не сложно! Часть 2
Программирование на С++ - это не сложно! Часть 3



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты