Урок 8. Цикл в С++

Уроки для начинающих   20 Февраль 2012  Автор статьи:  

Цикл служит для выполнения одного и того же действия несколько раз.
Попробуем изначально ответить на вопрос : «Как работает цикл?».
Мы имеем переменную, которая проверяется каждую итерации ( определенное действие в цикле, шаг цикла), далее выполняется некоторый оператор, а далее значение переменное меняет своё значение согласно условию (уменьшится, увеличится или же останется неизменным). Для более наглядного понимания цикла рассмотрим следующий пример:
Нужно с помощью цикла прочитать некоторое количество слов в тексте, тогда реализация цикла будет выглядеть так:

  • 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 (условие);

Сначала в данной конструкции выполняется оператор, а потом проверяется условие.
На заметку: если у вас не работает цикл, то, скорее всего, вы поставили после операторов цикла точку с запятой (;) — выполнение оператора в цикле становится невозможным.


Циклы в Java
Циклы в Delphi

  • Михаил

    в нашем случай 😀
    твоя моя, не понимать 😀

    • http://cybern.ru/ lordrp

      Цикл — сложная тема. Если до этого все понятно, то следует попрактиковаться, а потом попробовать прочитать статью еще раз.

  • Murat Satvaldin

    как это исправит и ещё когда я с скопировал твою программу жму ф5 ошибку выдает, что делать как исправить не палатки ?

  • Murat Satvaldin

    И вообще на любые программы выдает ошибки, что делать?

  • Павел

    исходя из моих познаний в pascal, у меня возникает вопрос: как компилятор понимает когда заканчивается старое слово, и начинается новое?? ведь они могут разделяться чем угодно..

Научиться программировать

  • на Delphi

  • на Java

  • на C++