среда, 8 мая 2013 г.

Основные конструкции языка С++. Часть 2



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

Оператор условного перехода if else.


Конструкция оператора очень проста. Задается, какое не будь условие и в зависимости от результата выполняется одна из ветвей кода. Как известно операции возвращают булевое значение (true / false) и в зависимости от этого значения исполняется код одной из ветвей. Например:

if(N > 1)
{
    // если N больше 1, тогда выполняется код в этой ветке программы.
}
else
{
    // ну а если N все же меньше 1, тогда выполняется код в этой ветке программы.
}

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

if(N > 1)
{
    // если N больше 1, тогда выполняется код в этой ветке программы.
}

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

if()
{
       
}
else if()
{
       
}
else
{
       
}

Оператор switch.


Оператор switch служит для выполнения одной ветви программы, если посланное оператору значение совпадает с одним из заданных значений, например:

int i=2;
   
switch(i)
{
case 1:
    // код программы не исполняется;
break;
       
case 2:
    // значение i совпадает со значением возле оператора case;
break;
       
case 3:
    // код программы не исполняется;
break;
       
case 4:
    // код программы не исполняется;
break;
       
default:
           // код программы исполняется, если значение i не попало в диапазон представленных значений;
break;
}
В теле самой конструкции switch описано операторы case с возможными значениями переменной i. После ветви с кодом программы должен стоять оператор break, который прерывает выполнения конструкции или цикла иначе выполнение не прекратится, а продолжится по списку. В самом конце должен стоять оператор default, который собирает те случаи, в которых значение переменной i не попадает в предположение диапазоны.

Прямой и обратный циклы while


Прямой цикл while записывается так:

while()
{
    // тело цикла
}

Если условие в скобках возвращает результат true, тогда цикл вертится, а как только результат превращается в false, выполнения цикла прекращается. Если необходимо прекратить выполнение цикла для этого существуют такие функции, как break и continue. Оператор break прекращает роботу цикла, а continue  пропускает эту итерацию цикла и переходит к следующей итерации.
   
do
{
    // тело цикла
}
while();

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

Цикл for.


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

int i=0;

Во-вторых, это условие, за выполнение которого, цикл продолжается:

i<10;

В-третьих, это шаг итерации:

i++;

Если переменная не целая, а реальная тогда шаг тоже может бить реальным.

for (int i=0; i<10; i++)
{
    // тело цикла
}
   

Цикл foreach


Цикл foreach создан для обхода массива или списка. В цикле создаётся переменная, в которою потом на каждой итерации записываются значение из массива, а второе значение это сам массив или список.

QStringList names;
names << "Patricia" << "Markus" << "Uli";
foreach(QString name, names)
{
    qDebug() << name;
}

Безусловные переходи goto.


Оператор goto используется для перехода в точку, где инициализирована метка. В случае если исполнение программы подходит к точке перехода (goto label1;), тогда программа переносится в точку, где написана метка (label1:) и продолжает исполнение программы.

    label1:
   
    goto label1;

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