Вложенные циклы
Часть раздела Основы путешествия по 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Внешний цикл управляет строками, а внутренний цикл обрабатывает каждый столбец в этой строке. После завершения каждой строки мы выводим символ новой строки, чтобы перейти к следующей строке.
Задание
ЛегкоСчитай из входных данных два числа: 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(), чтобы вывести значения через пробел, переходя на новую строку после каждой строки прямоугольникаВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строкамиПотренируйтесь самостоятельно: Онлайн-компилятор R