Ми з вами встигли познайомитися з трьома конструкціями повторення в мові програмування 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 встречаются достаточно часто. Обязательно рассмотрите задачи, которые мы приготовили. Если у вас остались какие-то вопросы по теме – ждем их в комментариях.
Які основні правила їх організації?
Важко сказати що ви маєте на увазі під основними правилами?
Основні правила:
– цикли повинні бути вкладені за принципом “matrjoşki”: кожен внутрішній цикл повинен ** повністю ** поміщатися всередину охоплює;
– ніколи не змінюйте параметр (змінну) зовнішнього циклу у внутрішньому;
– ніколи не виходьте з вкладених циклів оператором goto;
Скажіть, чим відрізняється принцип вкладених циклів в C ++ від C #
В принципі, ні чим.
Хоча C # … це відстій, і до обговорень на цьому сайті не має ніякого відношення.
чому відстій?
Скажіть, дане рішення прикладу з вашого уроку з квадратом із символів, еквівалентно вашого рішення наведеним в уроці? Або ж ваш варіант все таки має перевагу? Якщо так то в чому? Спасибо.
Рішення будь-який завдання можна записати багатьма, часто багатьма десятками, різними способами.
Критерієм правильності програми є тільки результат її виконання – запустіть і переконайтеся.
А як зробити: користувач вводить радіус і малюється коло з таким радіусом
P.s. Перепрошую якщо є помилки( я школяр:) )
Ідентичне рішення з можливістю вибору:
#include
using namespace std;
int main()
{
ІНТ лінії, стовпці;
символ SYM;
cout <> SYM;
cout <> lines;
cout <> стовпці;
for (int i = 1; i <= lines; i )
{
for (int j = 1; j <= стовпці; j )
{
if (J == 1 || i == 1)
{
cout << SYM;
continue;
}
else
{
if (i == lines || J == стовпці)
{
cout << SYM;
if (J == стовпці)
{
break;
}
}
else
{
cout << " ";
}
}
}
cout << endl;
}
return 0;
}
Артем, как ты так смог код вставить в комментарии?
до солдат:
“малюється коло” – це завдання з області графіки, вона не має ні найменшого відношення до мови програмування C ++, і на 100% визначається тим, якими графічними бібліотеками (фреймворком: МФЦ, Qt, GTK, WxWidgets і ін.) ви користуєтеся + в якій операційній системі.
Друг дав таке завдання на с ++ : )
“коло” не можна “малювати” на C ++.
“коло” можна “малювати” тільки функціями з різних графічних бібліотек … які можуть викликатися, в тому числі, і з коду на C ++.
Але безпосередньо до C ++ це не має ніякого відношення.
P.S. Передайте це своєму другові.
Вітаю, можете відповісти на моє запитання нижче
Як зробити
ПОДВІЙНИЙ ЦИКЛ:ДРУКУВАТИ
******
******
******
хто знає як можна зробити так щоб, в завданні з порожнім квадратом, боку були подвійні?
нижче написав
Напевно так
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
system(“cls”);
подвійний середн = 0;
int exit = 0, a = 0, б = 0;
cout << "Введите длину и высоту сторон: " <> a;
cin >> b;
for (INT I = 0; i < a;i )
{
for (Int J = 0 ; j < b; j )
{
if ( J == 0 || j == a-1 || J == 1 || j == a – 2)
cout << "q";
else if (i == 0 || i == b – 1 || i == 1 || i == b – 2)
cout << "q";
else cout << " ";
}
cout << endl;
}
return 0;
}
як зробити
00000
00000
00800
08880
88888