Menu
CoddyTech

Вложенные циклы

Часть раздела Основы путешествия по 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 никогда не меняются: они лишь сообщают циклам, когда остановиться. Этот шаблон очень полезен при работе с таблицами данных или при создании структур в виде сетки.

challenge icon

Задание

Новичок

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

Заверши вложенные циклы, чтобы вывести сетку 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()
	}
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Go