Цикл служит для выполнения одного и того же действия несколько раз.
Попробуем изначально ответить на вопрос : «Как работает цикл?».
Мы имеем переменную, которая проверяется каждую итерации ( определенное действие в цикле, шаг цикла), далее выполняется некоторый оператор, а далее значение переменное меняет своё значение согласно условию (уменьшится, увеличится или же останется неизменным). Для более наглядного понимания цикла рассмотрим следующий пример:
Нужно с помощью цикла прочитать некоторое количество слов в тексте, тогда реализация цикла будет выглядеть так:
- 1. Инициализация переменной по которой будет идти цикл, в нашем случай 0, потому что мы прочитали 0 слов;
- 2. Проверка того, что мы еще не прочитали текст до определенного количества слов, которое будет задано в цикле;
- 3. Считаем одно слово из текста;
- 4. Увеличим переменную, по которой пущен цикл, на единицу;
- 5. Повторим все действия со 2 номера.
Если условие во втором пункте выполнится, то есть будет прочитано достаточное количество слов, мы выйдем из цикла.
Рассмотрим три возможных варианта реализации данной стратегии в коде:
I.For
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <iostream>
#include <string>
using namespace std;
int main()
{
freopen ("input.txt","r",stdin);
freopen ("output.txt","w",stdout);
string s;
for (int i=0; i<10; i++)
{
cin >> s;
cout << s << " ";
}
return 0;
}
|
Данный код выводит в файл output.txt 10 первых слов из файла input.txt.
Рассмотрим сигнатуру For ещё раз:
1
2
|
for (инициализация переменной ; условие ; следующее значение переменной)
оператор ;
|
Заметим что в теле оператора for мы должны задавать следующие значение переменной, что иногда может быть не удобно.
II. While
1
|
while (условие) оператор;
|
Пока условие истинно-выполняется оператор. Таким образом отличие while от for заключается в том, что мы не должны задавать начальное значение переменной цикла и шаг превращения в теле оператора. Мы перестаем зависеть от чисел.
Решим следующую задачу:
Нужно читать текст до тех пор, пока не встретится слово длиной в 10 знаков.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <iostream>
#include <string>
using namespace std;
int main()
{
freopen ("input.txt","r",stdin);
freopen ("output.txt","w",stdout);
bool a= false; // мы еще не нашли слово искомой длины
while (!a)
{
string s; //следующее слово
cin >> s;
if (s.length()>10) a=true;
cout << s.length()<<endl;
}
return 0;
}
|
Мы проанализировали имеющийся текст на длину каждого слова. Когда мы прочитали слово, количество символов в котором превышает заданное нами условие — мы остановились. Следует быть осторожным, при использовании данного цикла, потому что может быть задано такое условие, которое будет истинно всегда, например, 0<2; Программа зависнет - на экране представится черное окошко "выполнение программы", которое не будет автоматически закрыто. Конечно, с помощью while можно реализовать такую же логику, что и с использованием for:
1
2
3
4
5
6
7
8
|
int i=0; // инициализируем переменную
while (i<10) // проверка того,что еще не прочитано 10 слов
{
string s;
cin >> s; // считываем слово
i++; // увеличиваем переменную, по которой пущен цикл на единицу
cout << s << endl; // выводим слово
}
|
III. Do-While
Формула реализации цикла с использованием do-while выглядит следующим образом:
1
2
|
do оператор;
while (условие);
|
Сначала в данной конструкции выполняется оператор, а потом проверяется условие.
На заметку: если у вас не работает цикл, то, скорее всего, вы поставили после операторов цикла точку с запятой (;) — выполнение оператора в цикле становится невозможным.
|