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

Уроки для начинающих   20 февраля 2012  Автор статьи:  
geekbrains.ru/

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

  • 1. Инициализация переменной по которой будет идти цикл, в нашем случай 0, потому что мы прочитали 0 слов;
  • 2. Проверка того, что мы еще не прочитали текст до определенного количества слов, которое будет задано в цикле;
  • 3. Считаем одно слово из текста;
  • 4. Увеличим переменную, по которой пущен цикл, на единицу;
  • 5. Повторим все действия со 2 номера.

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

#include
#include
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 ещё раз:

for (инициализация переменной ; условие ; следующее значение переменной)
оператор ;

Заметим что в теле оператора for мы должны задавать следующие значение переменной, что иногда может быть не удобно.
II. While

while (условие) оператор;

Пока условие истинно-выполняется оператор. Таким образом отличие while от for заключается в том, что мы не должны задавать начальное значение переменной цикла и шаг превращения в теле оператора. Мы перестаем зависеть от чисел.
Решим следующую задачу:
Нужно читать текст до тех пор, пока не встретится слово длиной в 10 знаков.

#include
#include
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()<
Мы проанализировали имеющийся текст на длину каждого слова. Когда мы прочитали слово, количество символов в котором превышает заданное нами условие - мы остановились. Следует быть осторожным, при использовании данного цикла, потому что может быть задано такое условие, которое будет истинно всегда, например, 0<2; Программа зависнет - на экране представится черное окошко "выполнение программы", которое не будет автоматически закрыто. Конечно, с помощью while можно реализовать такую же логику, что и с использованием for:
int i=0; // инициализируем переменную
while (i<10) // проверка того,что еще не прочитано 10 слов { string s; cin >> s; // считываем слово
i++; // увеличиваем переменную, по которой пущен цикл на единицу
cout << s << endl; // выводим слово }

III. Do-While
Формула реализации цикла с использованием do-while выглядит следующим образом:

do оператор;
while (условие);

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


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

  • Михаил

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

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

  • Murat Satvaldin

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

  • Murat Satvaldin

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

  • Павел

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

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

  • на Delphi

  • на Java

  • на C++

geekbrains.ru/
geekbrains.ru/