Menu
CoddyTech

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 = 2

Para 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  9

O 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.

challenge icon

Desafio

Fácil

Leia 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 7

Na 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 linha
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de R online