Ми з вами встигли познайомитися з трьома конструкціями повторення в мові програмування 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 встречаются достаточно часто. Обязательно рассмотрите задачи, которые мы приготовили. Если у вас остались какие-то вопросы по теме – ждем их в комментариях.
вибачте я новачок і для мене стало питання, а чим це відрізняється від звичайного for
ні чим. просто можна писати код по-різному
хочеш використовувати фор сам знаєш
Менше важить ніж while
че за клоун це писав, че за клоун це писав, че за клоун це писав, че за клоун це писав
я вник як малюнок виходить.
Тут у прикладах у циклах for немає відступів, важко розібратися. Возможно, раніше так писали? Початківцям раджу звернути на це увагу, пошукати тему ще десь. Все одно дякую за урок, мені було невідомо, як у консолі виводити такі рамки.
(нижче приклад актуальний, якщо збережуться відступи. Не знаю, яке тут форматування у коментарях)
for (size_t i = 0; i < 5; i ) {
for (size_t j = 0; j < 15; j ) {
cout << '@';
}
cout << endl;
}
Нет, не збереглися. В загальному, використовуйте Tab, коли пишете код.
Всім доброго часу доби , прохання : дайте більш детальне та повне роз'яснення щодо побудови контурного прямокутника рядково. Особливо з 29 строки по 36. При заповнених рядках все зрозуміло ,проблем немає. А тут складніше. Не зрозумію хід думки .
Якщо не важко !
Наперед дякую.
Здрастуйте всім! Хочу підтримати проханням дати покрокове пояснення коду рівнобедреного трикутника , заповнюваного по периметру ! Для мене незрозуміло також , чому код односторонній щодо пробілів.
Тому , хто допоможе – море подяки та позитиву!