Вложенные циклы
Часть раздела Основы путешествия по GO на Coddy. Урок 49 из 109.
Вложенные циклы — это циклы, размещённые внутри другого цикла. Внутренний цикл полностью выполняется при каждой итерации внешнего цикла.
Давайте создадим таблицу умножения для чисел 1–3 с помощью вложенных циклов:
rows := 3
cols := 3
for i := 1; i <= rows; i++ {
for j := 1; j <= cols; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}После выполнения этого кода мы получим таблицу умножения, в которой каждая строка представляет собой значение переменной внешнего цикла (i), умноженное на все значения переменной внутреннего цикла (j). Результат отобразится на экране:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9 Давайте разберёмся, как это работает, шаг за шагом:
Сначала внешний цикл задаёт i=1, и внутренний цикл выполняется полностью:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"После завершения внутреннего цикла мы выводим новую строку с помощью fmt.Println().
Затем внешний цикл устанавливает i=2, и внутренний цикл запускается заново: j снова принимает значения, начиная с 1:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"Наконец, внешний цикл устанавливает i=3, и внутренний цикл выполняется в последний раз:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"У каждого цикла есть собственный счётчик (i и j), а rows и cols никогда не меняются: они лишь сообщают циклам, когда остановиться. Этот шаблон очень полезен при работе с таблицами данных или при создании структур в виде сетки.
Задание
НовичокВ этом задании ты потренируешься использовать вложенные циклы для вывода простого узора. Внешний цикл будет проходить по строкам, а внутренний — по столбцам, чтобы создать небольшую сетку из символов.
Заверши вложенные циклы, чтобы вывести сетку 3x3 из звёздочек (*). После каждой звёздочки должен идти пробел, поэтому каждая строка должна выглядеть так: * * * (с пробелом в конце). Ожидаемый вывод:
* * * * * * * * *
Используй отдельный счётчик для каждого цикла (например, i для строк и j для звёздочек в строке) и сравнивай его с rows или columns. Не меняй сами rows и columns: в каждой строке снова должно быть columns элементов.
Попробуйте сами
package main
import "fmt"
func main() {
// Количество строк и столбцов в нашей сетке
rows := 3
columns := 3
// TODO: Создайте вложенный цикл, чтобы вывести сетку из звёздочек (*)
// Внешний цикл должен перебирать строки
// Внутренний цикл должен перебирать столбцы
for i := 0; i < rows; i++ {
// Добавьте здесь внутренний цикл, чтобы вывести звёздочки в каждом столбце
// Это выводит новую строку после каждой строки сетки
fmt.Println()
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решенийПотренируйтесь самостоятельно: Онлайн-компилятор Go