Основы программирования на С++ для начинающих

Вложенные циклы в C++

вложенные циклы C++Мы с вами успели познакомиться с тремя конструкциями повторения в языке программирования C++. Это циклы  for, while и do while. Если вы обратили внимание, вложение конструкций логического выбора if и else в циклы уже применялось. Сейчас же мы рассмотрим вложенные циклы – это когда в теле одного цикла (внешнего) размещается другой цикл (внутренний). Таких вложенных циклов во внешнем цикле может быть несколько.

По своей структуре, вложенные циклы напоминают мне коробки разных размеров, как на нашем рисунке. Эти коробки легко можно сложить друг в друга и поместить в одну большую коробку. Так и с циклами. Программе, чтобы добраться к вложенному циклу, необходимо сначала приступить к выполнению внешнего цикла (открыть крышку большой коробки), выполнить, то что прописано в коде до вложенного цикла и потом уже приступить к выполнению этого  цикла.

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

Сначала начинает выполняться цикл for в строке 6. Так как в его теле ничего не прописано до второго цикла, программа сразу приступает к выполнению этого вложенного цикла – строки 8 – 11. В результате его выполнения, на экране в одной строке отображаются 15 символов @ и происходит выход из него. Тут сработает cout  в строке 12, управляющая переменная i увеличится на единицу и продолжится выполнение главного и вложенного циклов. То есть снова 15 символов на экране и переход на строку ниже. Так будет сделано 5 раз, после чего программа завершит работу. На экране видим то, что было в условии:

вложенные циклы в C

Можно эту задачу немного усложнить. Теперь пусть символ для печати фигуры выбирает пользователь, посредством ввода с клавиатуры. Он же выберет размер – ширину и высоту. Еще одно новшество – фигура должна быть пустой, а не заполненной, как в нашем предыдущем примере. То есть она должна состоять только из контура. Вот наше решение:

Результат зависит от введенных данных, которые задаст пользователь. У меня получился черный квадрат из вопросов :)

вложенные циклы в C++

Еще один пример: печать таблицы умножения.

В результате увидим таблицу умножения:

вложенные циклы в C++

вложенные циклы в C++

.

.

.

.

.

.

.

.

.

На рисунках показаны только начало и конец таблицы.

Надеюсь урок был для вас полезен. Вложенные конструкции в программировании на C++ встречаются достаточно часто. Обязательно рассмотрите задачи, которые мы приготовили. Если у вас остались какие-то вопросы по теме – ждем их в комментариях.

42 thoughts on “Вложенные циклы в C++

    1. Мне приятно видеть что-то вроде похвалы от тебя )

      По поводу cin с отступами в коде, мне хотелось немного выделить предложение ввести данные и сам ввод данных, чтобы не было написано все сплошным блоком в 6 строк. О том, что надо именно так, конечно нигде не написано )

  1. Здравствуйте!
    Читаю книжку “С++ для Чайников” И как-то невнятно в ней расписана тема про вложенные циклы. Поискал в Инете и попал на Ваш сайт. Примеры очень понятны и доступны для начинающего. Даже сравнил с пятью другими сайтами, Вы лучшие!
    Огромнейшее ПАСИБА! Вроде сложная тема, а благодаря Вашей статье все как дважды два. Respect!
    Не смог не поблагодарить за такой труд…

    1. Спасибо! Мне очень приятно читать такие комментарии к моим урокам! Это вдохновляет не меньше, чем критика :)

  2. Здравствуйте.Я попытался решить задачку (вторую)
    #include
    using namespace std;
    int strok,simbol;
    int main()
    {
    cout<<"Kol-vo strok/i="strok;
    cout<<"Kol-vo simbol/j"simbol;
    for(int i=1;i<=strok;i++)
    {
    for(int j=1;j<=simbol;j++)
    {
    if ((i!==1 && (strok-i!==1))&&( j==1 || j==2 )&&(j==simbol|| j==(simbol-1)))
    {
    cout<<"*";
    }

    if (i==1||strok-1!==1)
    {
    cout<<"*";
    }

    }
    cout <KOD.cpp
    1>c:\users\тимур\desktop\documents\visual studio 2008\projects\vl_chirlu\vl_chirlu\kod.cpp(14) : error C2059: синтаксическая ошибка: =
    1>c:\users\тимур\desktop\documents\visual studio 2008\projects\vl_chirlu\vl_chirlu\kod.cpp(15) : error C2143: синтаксическая ошибка: отсутствие “;” перед “{”
    1>c:\users\тимур\desktop\documents\visual studio 2008\projects\vl_chirlu\vl_chirlu\kod.cpp(19) : error C2059: синтаксическая ошибка: =
    1>c:\users\тимур\desktop\documents\visual studio 2008\projects\vl_chirlu\vl_chirlu\kod.cpp(20) : error C2143: синтаксическая ошибка: отсутствие “;” перед “{”
    ПОДСКАЖИТЕ В ЧЕМ ОШИБКА?????

  3. Замечательный урок!! Спасибо.
    Но, помогите разобраться с задачей 2, где рисуется прямоугольник.
    Не понятна строка
    for (int j = 1; j <= symbInLines – 2; j++)
    Объяснить, пожалуйста, детальней.

    1. symbInLines это переменная, которая указывает какова ширина квадрата.
      Например symbInLines = 50. Описание j = 1; j <= symbInLines – 2 говорит что цикл должен выполниться 48 раз выведя 48 пробелов между двумя символами окантовки квадрата.

  4. Може кому буде цікаво на While

    #include
    using namespace std;
    int main()
    {
    int a=1,b=0,c=1,d=0;
    cout<<b;
    cout<<d;
    while(a<=b)
    {
    c=1;
    while(c<=d)
    {
    if (a==1||a==b)
    {
    cout<<"0";
    }
    else if (c==1||c==d)
    {
    cout<<"0";
    }
    else
    {
    cout<<"1";
    }
    c++;
    }
    a++;
    cout<<endl;
    }

    return 0;
    }

  5. Добрый день!
    Уроки замечательные.всё очень понятно расписано.Спасибо Вам огромное.


  6. for (int i = 0; i < height; i++)
    {
    for (int j = 0; j < width; j++)
    {
    if ((i == 0 || i == height - 1) || (j == 0 && i != 0 && i != height - 1) || (j == width - 1 && i != 0 && i != height - 1 ))
    {
    cout << symbol;
    }
    else
    {
    cout << ' ';
    }
    }
    cout << endl;
    }

    хорошие уроки)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *