Циклы в C++

      Комментарии к записи Циклы в C++ отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 4 мес., 1 неделя назад.

  • Автор
    Сообщения
  • #3669

    Сегодня наша тема — Циклы. Нет, даже так ЦИКЛЫ! Тема не сложная, но тем не менее очень важная. И так, что же такое цикл? Циклы — это повторяющаяся последовательность некоторых событий. Например:

    • Смена дня и ночи — цикл суток;
    • Смена времен года — цикл сезонов;
    • Цикады вылезающие на свет каждые 17 лет — это тоже некий цикл;

    Огромное количество циклов, вот из чего состоит мир…

    Извиняюсь, отвлекся. Теперь о программировании. Цикл — это выполнение неких функций и операций до тех пор пока некое условие выполняется. Циклы есть трех видов — с предусловием, с постусловием и со счетчиком. Разберем каждый из них…

    Цикл со счетчиком — for

    Данный цикл можно представить такой конструкцией;
    for (начальные_присваивания; выражение; приращение) оператор;

    Здесь:

    • начальные_присваивания — оператор или группа операторов, применяемые для присвоения начальных значений величинам используемым в цикле. Эта часть будет выполнена ровно один раз и в самую первую очередь (с нее начнется выполнение цикла).
    • выражение — определяет условие выполнения цикла, если оно истинно, то цикл выполняется. Выражения проверяются на каждом такте (итерации) цикла. Первый раз выражение проверяется сразу после выполнения начальных присваиваний.
    • приращение — оператор, который выполняется после каждого шага (прохода) по телу цикла. Приращение выполняется после того, как завершится такт цикла, но перед тем, как цикл запустится заново (до проверки выражения). Например, приращением может быть i=i+1, j=j-2 или x*=5.

    Пример использования цикла for:

        int n;
        cin >> n;
    
        for (int i = 1; i <= n; i = i + 1)
         cout << i << " ";

    Тут при начальном присваивании, мы инициализируем переменную i. Она будет доступна только внутри цикла. После завершения цикла компилятор не будет хранить значение переменной. В выражении задаем программе условие — пока i меньше или равно n цикл не прерывать, т.е произойдет ровно n тактов(или, как более правильно итераций). В приращении мы увеличиваем переменную i на 1.

    Давайте на примере задачи рассмотрим цикл с параметром. Нам необходимо посчитать сумму чисел от 1 до 500. Делаем:

    #include <iostream>
    using namespace std;
    int main () {
      int i; //определяем переменную
      int sum = 0;
      for (i=1; i<=500; i=i+1) // задаем начальное значение, конечное 500, шаг цикла
      {
        sum = sum + i;
      }
      cout << "The sum of the numbers from 1 to 500 = " <<sum<<endl;
      system ("pause");
      return 0;
    }

    Цикл с предусловием (while)

    Цикл while отличается от for-а тем, что для него можно задавать только условие (нельзя задавать начальное и конечное значения счетчика). Он работает следующим образом. Вычисляется значение выражения. Если оно истинно, то тело цикла выполняется. В противном случае цикл заканчивается:

    while условие 
    {
      // тело цикла
      оператор_1;
      оператор_2;
      …
      оператор_n;
    }

    В качестве примера можно привести программу переводящую число из десятичной системы счисления в двоичную:

        cin >> n;
    
        if (n == 0) cout << "0";
    
        while (n > 0)
        {
            cout << n % 2;
            n = n / 2;
        }

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

    Рассмотрим другой пример. Пусть нам необходимо составить программу, которая в зависимости от возраста пользователя определяла сколько лет ему осталось до выхода на пенсию. При условии, что пенсионный возраст наступает в 56 лет:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main () {
      int x, y, i, pen; //описаваем нужные переменные
      x=0; //стартовое значение переменной
      y=56; //определяем пенсионный возраст
      while (x<=3) //пока параметр цикла не превышает конечное значение.
      //выполнять тело цикла
      {
        cout<<"How old are you? \n";
        cin>>i;
        pen=y-i;
        cout<<"Remained until retirement (years) = "<<pen<<endl;
        x++; //изменение параметра цикла (аналогично x=x+1 (расмотрим в последующих уроках))
      }
      system ("pause");
      return 0;
    }

    Цикл с постусловием (do…while)

    Иногда возникает необходимость, чтобы тело цикла выполнилось хотя бы один раз, но условие не позволяет этому случится. Вот именно тут нам поможет цикл с постусловие do…while. Который реализован следующей конструкцией:

    do { тело цикла } while (выражение);

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

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int main () {
      int x, y, i, pen; //описаваем нужные переменные
      x=0; //стартовое значение переменной
      y=56; //определяем пенсионный возраст
      do {
        cout<<"How old are you? \n";
        cin>>i;
        pen=y-i;
        cout<<"Remained until retirement (years) = "<<pen<<endl;
        x++; //изменение параметра цикла (аналогично x=x+1)
      } while (x<=-1); //условие ложно, но цикл выполняется 1 раз
      system ("pause");
      return 0;
    }

    Кстати, стоит упомянуть о том, что циклы могут быть вложенными, для более лучшего понимания скомпилируйте у себя следующий код:

        for (int i = 1; i <= 7; i = i + 1)
         for (int j = 1; j <= 7; j = j + 1)
          cout << "i = " << i << ", j = " << j << "\n";

    Ну и напоследок, программа находящая все шестизначные «счастливые» билеты:

    #include <iostream>
     using namespace std;
     int main ()
     {
         for (int a = 1; a <= 9; a = a + 1)
          for (int b = 0; b <= 9; b = b + 1)
           for (int c = 0; c <= 9; c = c + 1)
            for (int d = 0; d <= 9; d = d + 1)
             for (int e = 0; e <= 9; e = e + 1)
              for (int f = 0; f <= 9; f = f + 1)
               if (a + b + c == d + e + f)
                cout << a << b << c << d << e << f << "\n";
    
         system("pause");
         return 0;
     }

    На этом все, спасибо!

Для ответа в этой теме необходимо авторизоваться.