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 a griglia.
for (i in 1:3) {
for (j in 1:2) {
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 = 2Per 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.
Un esempio pratico è 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 9Il ciclo esterno controlla le righe, mentre il ciclo interno gestisce ogni colonna all'interno di quella riga. Dopo aver completato ogni riga, stampiamo un'interruzione di riga per passare alla riga successiva.
Sfida
FacileLeggi 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 da 1 a cols.
Stampa ogni riga su una propria linea, con i valori separati da un singolo spazio. Usa cat() per stampare i valori e aggiungi una 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 7Nella 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.
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 rigaQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori Parte 2
Operatori logici (AND, OR)Operatori logici Parte 2 (NOT)Ripasso - Logica sempliceLogica vettorializzata Parte 1Logica vettorializzata Parte 27Calcolatore per dividere il conto
Messaggio di benvenutoAcquisire input dell'utente10FizzBuzz con una variante
Panoramica del giocoLa funzione FizzBuzz13Vettori: argomenti avanzati
Slicing e indicizzazione dei vettoriIndicizzazione logicaAritmetica dei vettori e ricicloL’operatore %in%2Variabili e tipi di dati
Tipo di dato numericoTipo di dato interoTipo di dato carattereTipo di dato logicoControllo dei tipi di datoConvenzioni di denominazioneValori mancanti: NARiepilogo - Creazione di variabili8Cicli
Ciclo forCiclo whilebreaknext (continue)Riepilogo - FattorialeGenerazione di sequenze (seq, :)Cicli annidatiRiepilogo - Input dinamico3Operatori Parte 1
Operatori aritmeticiDivisione intera e moduloOperatori di assegnazioneRiepilogo - Matematica sempliceOperatori di confronto6I/O di base
Stampare l'outputcat per l'outputOutput con variabiliLeggere l'input con readline()Nozioni di base sulla conversione dei tipiRiepilogo - Calcolatore dell'etàRiepilogo - Vero o falso9Funzioni
Dichiarare una funzioneArgomenti della funzioneValori di ritornoRiepilogo - Funzione SigmaRiepilogo - Funzione di validazioneValori predefiniti dei parametriEsercitati da solo: Compilatore R online