Menu
CoddyTech

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

Часть раздела Основы путешествия по R на Coddy. Урок 44 из 78.

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

rows <- 3
cols <- 2
for (i in 1:rows) {
  for (j in 1:cols) {
    cat("i =", i, ", j =", j, "\n")
  }
}

Вывод:

i = 1 , j = 1 
i = 1 , j = 2 
i = 2 , j = 1 
i = 2 , j = 2 
i = 3 , j = 1 
i = 3 , j = 2

Для каждого значения i внутренний цикл проходит через все значения j. Когда i равно 1, j принимает значения от 1 до 2. Затем i становится равным 2, и j снова начинает с 1 и доходит до 2. rows и cols никогда не меняются: они лишь сообщают циклам, когда остановиться.

Практический пример — создание простого шаблона умножения:

for (row in 1:3) {
  for (col in 1:3) {
    cat(row * col, " ")
  }
  cat("\n")
}

Вывод:

1  2  3  
2  4  6  
3  6  9

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

challenge icon

Задание

Легко

Считай из входных данных два числа: rows и cols.

Используй вложенные циклы, чтобы вывести прямоугольник чисел, где каждая ячейка содержит сумму номера своей строки и номера своего столбца. Строки нумеруются от 1 до rows, а столбцы — от 1 до cols.

Выводи каждую строку на отдельной строке, разделяя значения одним пробелом. Используй cat() для вывода, добавляя символ новой строки после каждой строки.

Например, если входные данные — 3 и 4, вывод должен быть таким:

2 3 4 5 
3 4 5 6 
4 5 6 7

В первой строке (строка 1) значения такие: 1+1=2, 1+2=3, 1+3=4, 1+4=5. Во второй строке (строка 2) значения такие: 2+1=3, 2+2=4, 2+3=5, 2+4=6 и так далее.

cat() ставит пробел между переданными ей значениями, поэтому cat(row + col, "") выводит число, за которым следует ровно один пробел.

Используй новый счётчик для каждого цикла (например, row для строк и col для чисел в строке) и сравнивай его с rows или cols. Не изменяй сами rows и cols: для каждой строки значение cols нужно снова.

Попробуйте сами

# Считайте входные данные
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)

# TODO: Напишите свой код ниже
# Используйте вложенные циклы, чтобы вывести прямоугольник, в каждой ячейке которого находится сумма номера строки и номера столбца
# Используйте cat(), чтобы вывести значения через пробел, переходя на новую строку после каждой строки прямоугольника
quiz iconПроверьте себя

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

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

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