(C++) Циклы. Цикл с параметром (for)


Циклы в программировании
Представим ситуацию, когда нам надо вывести на экран одно и тоже слово, допустим слово "HELLO", 10 раз. Как нам поступить?
Можно взять и 10 раз написать cout << "HELLO";

А что если, надо не 10 раз, а 20, 30, 40 раз?, а если 200 раз? В этом случае копирование займет очень много времени. А если, необходимо, чтобы пользователь сам выбирать сколько раз ему вывести на экран информацию? 

Чтобы справиться с этой задачей, нам поможет специальная конструкция, которая называется цикл.
 
Цикл - это алгоритмическая конструкция, в которой некоторая последовательность команд повторяется несколько раз.

В языке программирования С++, есть два вида циклов: цикл с переменной (for) и цикл с условием (while и do...while)

Начнем знакомство с циклами с первого вида.
 
Цикл с переменной (for)

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

Интересно проследить как работает этот цикл на машинном уровне:
1. в памяти выделяется определенная ячейка памяти и в нее записывается число повторений;
2. когда программа выполняет тело цикла один раз, содержимое этой ячейки (счетчик) уменьшается на единицу;
3. выполнение цикла заканчивается, когда в этой ячейке будет нуль.

В языке программирования C++ нет такой конструкции, но есть конструкция for.  

Общая форма записи оператора цикла for выглядит следующим образом:
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
      /*один оператор или блок операторов - тело цикла*/;
}
Данная конструкция требует, чтобы мы:
1. явно выделили ячейку памяти, которая будет являться счетчиком и задали ей начальное значение;
2. прописали условие, при котором тело цикла будет выполняться;
3. указали, как будет менять значение в данной ячейке.

В практической части мы попробуем вывести на экран слово "Hello" 10 раз. А в дальнейших задачах разберем данную конструкцию подробнее.

Цикл for
Цикл for представляет собой средство пошагового выполнения повторяющихся действий. Давайте рассмотрим более подробно, как он устроен.

Выполнение цикла for состоит из следующих шагов: 
1. установка начального значения переменной цикла (счетчика);
2. проверка условия продолжения цикла;
3. выполнение шага (тела цикла); 
4. изменение значения переменной цикла.
Далее шаги 2-4 повторяются до тех пор пока условие на 2-м шаге не станет ложным. Как только условие становится ложным, цикл прекращает свою работу и выполняется оператор следующий за оператором цикла for.

Вернемся к общей форме записи оператора цикла и разберем подробнее все части.
for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )
{
      /*один оператор или блок операторов - тело цикла*/;
}

Выражение 1 отвечает за установку начального значения переменной цикла (счетчика), заканчивается точкой с запятой

Например,

1) i=0;    // Переменной цикла i присваиваем начальное значение равное нулю.
                 // При такой записи, переменная i должна быть объявлена до цикла.

2) int i=0; //  Переменная i может быть объявлена сразу в заголовке цикла, но
                     // в этом случае после работы цикла сотрется из памяти

3) ;    // Отсутствует инициализация и объявление переменной цикла вообще,
          //  в этом случае она может быть определена до цикла.


Выражение 2 это условие продолжения цикла for, которое проверяется на истинность.

i<=10  // Цикл будет выполняться, пока переменная i меньше или равна 10. Условие может быть любым.
 

Выражение 3 изменяет значение переменной-счетчика. Без этого значения цикл будет считаться бесконечным.

i++  // Переменная будет увеличиваться на 1 с каждым шагом.
 

Если в теле цикла один оператор

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

Заголовок цикла for - особенности

В каждой части заголовка может быть несколько операторов, разделенных запятыми.
 
Пример
for ( i = 0, x = 1.; i < 10; i += 2, x *= 0.1 )
    { ... }
В данном случае, используем две переменные, которые будут меняться после выполнения тела цикла - это переменные i и x. Переменная i меняется с шагом 2: i += 2 - сокращенная запись от i = i + 2. Переменная x с каждым шагом увеличивается в 0,1 раз x = x * 0.1, сокращенно х *= 0.1.

Повторить N раз

Все программы с циклом for, которые мы до этого писали нельзя назвать универсальными. Потому что мы задавали сами число повторений тела цикла. А что делать, если количество повторений будет зависеть от какого-либо другого значения? Например, пользователь сам хочет задать количество повторений цикла.
Что делать в этом случае? Все очень просто. Вместо числовых начальных и конечных значений, мы можем использовать любые переменные, которые могут как вычисляться, так и задаваться пользователем.

Например, нам нужно вывести квадраты чисел от 1 до N, где значение переменной N вводится с клавиатуры пользователем.
Программа будет выглядеть следующим образом:
 
#include <iostream>
using namespace std;
main()
{
 int i, N; // i – переменная цикла, N - максимальное число, у которого вычисляем квадрат
 cin >> N; 
 for ( i = 1; i <= N; i ++) // цикл: для всех i от 1 до N. Переменная i будет последовательно принимать значения от 1 до N
 {
    cout << "Square number "<<i<<" is" <<i*i<<"\n";  // Вывод квадрата числа по определенному формату и переход на новую строку
 }
}
При входе в цикл выполняется оператор i = 1, и затем переменная i с каждым шагом увеличивается на единицу (i ++). Цикл выполняется пока истинно условие i <= N. В теле цикла единственный оператор вывода печатает на экране само число и его квадрат по заданному формату.
Для возведения в квадрат или другую невысокую степень лучше использовать умножение.

Запустите программу и посмотрите результат ее работы при различных значениях переменной N.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация