Вложенные циклы
Часть раздела Основы путешествия по R на Coddy — урок 44 из 78.
Вы можете поместить один цикл внутрь другого, чтобы создать вложенный цикл. Внутренний цикл полностью выполняется для каждой итерации внешнего цикла, что делает это полезным при работе с комбинациями или сетчатыми структурами.
for (i in 1:3) {
for (j in 1:2) {
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.
Практический пример — создание простой таблицы умножения:
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 и так далее.
Шпаргалка
Вложенный цикл — это цикл, помещенный внутрь другого цикла. Внутренний цикл выполняется полностью для каждой итерации внешнего цикла.
for (i in 1:3) {
for (j in 1:2) {
cat("i =", i, ", j =", j, "\n")
}
}Для каждого значения i внутренний цикл проходит через все значения j.
Пример создания таблицы умножения:
for (row in 1:3) {
for (col in 1:3) {
cat(row * col, " ")
}
cat("\n")
}Внешний цикл управляет строками, в то время как внутренний цикл обрабатывает каждый столбец в этой строке. Используйте cat("\n") для вывода новой строки после завершения каждой строки.
Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)
# TODO: Напишите свой код ниже
# Используйте вложенные циклы, чтобы напечатать прямоугольник, где каждая ячейка содержит row + column
# Используйте 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)Функции для работы со строками