Laços Aninhados
Parte da seção Fundamentos do Journey de R da Coddy. Lição 44 de 78.
Você pode colocar um loop dentro de outro loop para criar um loop aninhado. O loop interno é executado completamente a cada iteração do loop externo, o que é útil ao trabalhar com combinações ou padrões semelhantes a grades.
rows <- 3
cols <- 2
for (i in 1:rows) {
for (j in 1:cols) {
cat("i =", i, ", j =", j, "\n")
}
}Saída:
i = 1 , j = 1
i = 1 , j = 2
i = 2 , j = 1
i = 2 , j = 2
i = 3 , j = 1
i = 3 , j = 2Para cada valor de i, o loop interno percorre todos os valores de j. Quando i é 1, j vai de 1 a 2. Então, i se torna 2, e j recomeça de 1 a 2. rows e cols nunca mudam: eles apenas indicam aos loops quando parar.
Um exemplo prático é criar um padrão simples de multiplicação:
for (row in 1:3) {
for (col in 1:3) {
cat(row * col, " ")
}
cat("\n")
}Saída:
1 2 3
2 4 6
3 6 9O loop externo controla as linhas, enquanto o loop interno trata de cada coluna dentro dessa linha. Depois de concluir cada linha, imprimimos uma quebra de linha para passar para a próxima.
Desafio
FácilLeia dois números da entrada: rows e cols.
Use loops aninhados para imprimir um retângulo de números em que cada célula contém a soma do número da linha e do número da coluna. As linhas são numeradas de 1 até rows, e as colunas são numeradas de 1 até cols.
Imprima cada linha em sua própria linha, com os valores separados por um único espaço. Use cat() para a saída, adicionando uma quebra de linha após cada linha.
Por exemplo, se as entradas forem 3 e 4, a saída deverá ser:
2 3 4 5
3 4 5 6
4 5 6 7Na primeira linha (linha 1), os valores são 1+1=2, 1+2=3, 1+3=4, 1+4=5. Na segunda linha (linha 2), os valores são 2+1=3, 2+2=4, 2+3=5, 2+4=6, e assim por diante.
cat() coloca um espaço entre os valores que você fornece, então cat(row + col, "") imprime o número seguido de exatamente um espaço.
Use um novo contador para cada loop (por exemplo, row para as linhas e col para os números em uma linha) e compare-o com rows ou cols. Não altere rows e cols: cada linha precisa de cols novamente.
Experimente você mesmo
# Leia a entrada
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)
# TODO: Escreva seu código abaixo
# Use laços aninhados para imprimir um retângulo em que cada célula contém row + column
# Use cat() para imprimir valores separados por espaços, com uma quebra de linha após cada linhaEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores - Parte 2
Operadores lógicos (AND, OR)Operadores lógicos - Parte 2 (NOT)Revisão - Lógica simplesLógica vetorizada - Parte 1Lógica vetorizada - Parte 27Calculadora de Divisão da Conta
Mensagem de Boas-vindasObtendo a Entrada do Usuário10FizzBuzz com uma Reviravolta
Visão Geral do JogoA Função FizzBuzz2Variáveis e Tipos de Dados
Tipo de Dado NuméricoTipo de Dado InteiroTipo de Dado CaractereTipo de Dado LógicoVerificando Tipos de DadosConvenções de NomenclaturaValores Ausentes: NARecapitulação - Criação de Variáveis8Laços
Laço ForLaço WhileBreakNext (Continue)Revisão - FatorialGeração de Sequências (seq, :)Laços AninhadosRevisão - Entrada Dinâmica3Operadores - Parte 1
Operadores aritméticosDivisão inteira e móduloOperadores de atribuiçãoRevisão - Matemática simplesOperadores de comparação6Entrada e saída básicas
Imprimir saídacat para saídaSaída com variáveisLendo entrada com readline()Noções básicas de conversão de tiposRecapitulação - Calculadora de idadeRecapitulação - Verdadeiro ou falso9Funções
Declarando uma FunçãoArgumentos de FunçãoValores de RetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores de Parâmetros PadrãoPratique por conta própria: Compilador de R online