Menu
CoddyTech

Cicli annidati

Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 44 di 78.

Puoi inserire un ciclo all’interno di un altro ciclo per creare un ciclo annidato. Il ciclo interno viene eseguito completamente per ogni iterazione del ciclo esterno, il che è utile quando lavori con combinazioni o schemi simili a griglie.

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

Output:

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

Per ogni valore di i, il ciclo interno scorre tutti i valori di j. Quando i è 1, j va da 1 a 2. Poi i diventa 2 e j ricomincia da 1 a 2. rows e cols non cambiano mai: indicano solo ai cicli quando fermarsi.

Un esempio pratico consiste nel creare un semplice schema di moltiplicazione:

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

Output:

1  2  3  
2  4  6  
3  6  9

Il ciclo esterno controlla le righe, mentre il ciclo interno gestisce ciascuna colonna all'interno di quella riga. Dopo aver completato ogni riga, stampiamo una nuova riga per passare a quella successiva.

challenge icon

Sfida

Facile

Leggi due numeri dall'input: rows e cols.

Usa cicli annidati per stampare un rettangolo di numeri in cui ogni cella contiene la somma del numero della riga e del numero della colonna. Le righe sono numerate da 1 a rows e le colonne sono numerate da 1 a cols.

Stampa ogni riga su una riga separata, con i valori separati da un singolo spazio. Usa cat() per l'output, aggiungendo un carattere di nuova riga dopo ogni riga.

Per esempio, se gli input sono 3 e 4, l'output dovrebbe essere:

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

Nella prima riga (riga 1), i valori sono 1+1=2, 1+2=3, 1+3=4, 1+4=5. Nella seconda riga (riga 2), i valori sono 2+1=3, 2+2=4, 2+3=5, 2+4=6, e così via.

cat() inserisce uno spazio tra i valori che gli passi, quindi cat(row + col, "") stampa il numero seguito da esattamente uno spazio.

Usa un nuovo contatore per ogni ciclo (per esempio row per le righe e col per i numeri in una riga) e confrontalo con rows o cols. Non modificare rows e cols: ogni riga ha bisogno di cols di nuovo.

Provalo tu

# Leggi l'input
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)

# TODO: Scrivi il tuo codice qui sotto
# Usa cicli annidati per stampare un rettangolo in cui ogni cella contiene row + column
# Usa cat() per stampare i valori separati da spazi, con un ritorno a capo dopo ogni riga
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore R online