Ми з вами встигли познайомитися з трьома конструкціями повторення в мові програмування C ++. це циклиfor, while и do while. Если вы обратили внимание, вкладення конструкцій логічного вибору if і else в цикли вже застосовувалося. Сейчас же мы рассмотрим вложенные циклы – это когда в теле одного цикла (внешнего) размещается другой цикл (внутренний). Таких вложенных циклов во внешнем цикле может быть несколько.
По своей структуре, вложенные циклы напоминают мне коробки разных размеров, как на нашем рисунке. Ці коробки легко можна скласти один в одного і помістити в одну велику коробку. Так и с циклами. Программе, чтобы добраться к вложенному циклу, необходимо сначала приступить к выполнению внешнего цикла (открыть крышку большой коробки), выполнить, то що прописано в коді до вкладеного циклу і потім вже приступити до виконання цього циклу.
Есть один интересный распространённый пример, для демонстрации работы вложенных циклов. Рассмотрим его: применяя циклы, необхідно намалювати прямокутник розміром 5 х 15 из символов @.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> using namespace std; int main() { for (int i = 0; i < 5; i++) // этот цикл отвечает за кол-во строк { for (int j = 0; j < 15; j++) // этот - за кол-во символов в каждой строке { cout << '@'; } cout << endl; // переход на строку ниже } return 0; } |
Сначала начинает выполняться цикл for в строке 6. Так як в його тілі нічого не прописано до другого циклу, программа сразу приступает к выполнению этого вложенного цикла – строки 8 – 11. В результате его выполнения, на экране в одной строке отображаются 15 символов @ и происходит выход из него. Тут сработает cout в строке 12, управляющая переменная i увеличится на единицу и продолжится выполнение главного и вложенного циклов. То есть снова 15 символов на экране и переход на строку ниже. Так будет сделано 5 раз, после чего программа завершит работу. На экране видим то, что было в условии:
Можно эту задачу немного усложнить. Теперь пусть символ для печати фигуры выбирает пользователь, посредством ввода с клавиатуры. Он же выберет размер – ширину и высоту. Еще одно новшество – фигура должна быть пустой, а не заполненной, как в нашем предыдущем примере. То есть она должна состоять только из контура. Вот наше решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int lines = 0; int symbInLines = 0; char symbol = 0; cout << "Введите символ: "; cin >> symbol; cout << "Количество строк: "; cin >> lines; cout << "Количество символов в строке: "; cin >> symbInLines; cout << endl; for (int i = 1; i <= lines; i++) { if (i == 1 || i == lines) // 1-я и последняя строка { for (int j = 1; j <= symbInLines; j++) { cout << symbol; // сплошная из символов } } else // все строки между первой и заключительной { cout << symbol; // показать один символ for (int j = 1; j <= symbInLines - 2; j++) { cout << ' '; // пробелы в строке (symbInLines - 2) раз } cout << symbol; // показать ещё один символ } cout << endl; // новая строка } cout << endl; return 0; } |
Результат зависит от введенных данных, которые задаст пользователь. У меня получился черный квадрат из вопросов :)
Еще один пример: печать таблицы умножения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> using namespace std; int main() { for (int f = 2; f <= 9; f++) { for (int s = 1; s <= 9; s++) { cout << f << " * " << s << " = " << f * s; cout << endl; } cout << endl; } cout << endl; return 0; } |
В результате увидим таблицу умножения:
.
.
.
.
.
.
.
.
.
На рисунках показаны только начало и конец таблицы.
Надеюсь урок был для вас полезен. Вложенные конструкции в программировании на C встречаются достаточно часто. Обязательно рассмотрите задачи, которые мы приготовили. Если у вас остались какие-то вопросы по теме – ждем их в комментариях.
На цей раз приклади симпатичніше.
cout <> symbol;
Чому перед cin відступів більше? Так треба?
Мені приємно бачити щось на зразок похвали від тебе )
З приводу cin з відступами в коді, мені хотілося трохи виділити пропозицію ввести дані і сам введення даних, щоб не було написано все суцільним блоком в 6 строк. Про те, що треба саме так, звичайно ніде не написано )
Вітаю!
читаю книжку “С ++ для чайників” І якось невиразно в ній розписана тема про вкладені цикли. Пошукав в Інеті і потрапив на Ваш сайт. Приклади дуже зрозумілі і доступні для початківця. Навіть порівняв з п'ятьма іншими сайтами, Ви найкращі!
величезне ПАСИБА! Начебто складна тема, а завдяки Вашій статті все як двічі два. повага!
Чи не смог не подякувати за таку працю…
Спасибо! Мені дуже приємно читати такі коментарі до моїх уроків! Це надихає не менше, ніж критика :)
Здравствуйте.Я спробував вирішити задачку (другу)
#include
using namespace std;
int strok,символ;
int main()
{
cout<<"Kol-vo strok/i="strok;
cout<<"Kol-vo simbol/j"simbol;
for(int i=1;i<= інсульт;i )
{
for(INT = 1;j<= символ;j )
{
if ((i!== 1 && (strok-i!== 1))&&( J == 1 || J == 2 )&&(J == символ|| J ==(Символ-1)))
{
cout<<"*";
}
if (я == 1||Хід-1!== 1)
{
cout<<"*";
}
}
cout <KOD.cpp
1>c:\Користувачі тимур Desktop документи Visual Studio 2008 рік Projects vl_chirlu vl_chirlu kod.cpp(14) : C2059 помилка: синтаксична помилка: =
1>c:\Користувачі тимур Desktop документи Visual Studio 2008 рік Projects vl_chirlu vl_chirlu kod.cpp(15) : C2143 помилка: синтаксична помилка: відсутність “;” перед “{”
1>c:\Користувачі тимур Desktop документи Visual Studio 2008 рік Projects vl_chirlu vl_chirlu kod.cpp(19) : C2059 помилка: синтаксична помилка: =
1>c:\Користувачі тимур Desktop документи Visual Studio 2008 рік Projects vl_chirlu vl_chirlu kod.cpp(20) : C2143 помилка: синтаксична помилка: відсутність “;” перед “{”
ПОДСКАЖИТЕ У ЧОМУ ПОМИЛКА?????
підключи бібліотеку правильно
#include
і ще ось такого немає !== треба !=
чудовий урок!! Спасибо.
Але, допоможіть розібратися із завданням 2, де малюється прямокутник.
Чи не зрозуміла рядок
for (int j = 1; j <= symbInLines – 2; j )
пояснити, будь ласка, детальней.
symbInLines це змінна, яка вказує яка ширина квадрата.
Наприклад symbInLines = 50. Опис J = 1; j <= SymbInLines - 2 каже що цикл повинен виконатися 48 раз вивівши 48 прогалин між двома символами окантовки квадрата.
Спасибо, в'їхав!
Може кому буде цікаво на 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;
}
клас урок!!!
Доброго дня!
Уроки замечательние.всё дуже зрозуміло распісано.Спасібо Вам величезне.
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;
}
хороші уроки)