Menu
CoddyTech

Pętle zagnieżdżone

Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 49 z 109.

Pętle zagnieżdżone to pętle umieszczone wewnątrz innej pętli. Pętla wewnętrzna wykonuje się w całości przy każdej iteracji pętli zewnętrznej.

Stwórzmy tabliczkę mnożenia dla liczb 1–3 za pomocą zagnieżdżonych pętli:

rows := 3
cols := 3
for i := 1; i <= rows; i++ {
    for j := 1; j <= cols; j++ {
        fmt.Printf("%d×%d=%d\t", i, j, i*j)
    }
    fmt.Println()
}

Po wykonaniu tego kodu otrzymujemy tabliczkę mnożenia, w której każdy wiersz przedstawia jedną wartość zmiennej zewnętrznej pętli (i) pomnożoną przez wszystkie wartości zmiennej wewnętrznej pętli (j). Wynik zostanie wyświetlony na ekranie:

1×1=1   1×2=2   1×3=3   
2×1=2   2×2=4   2×3=6   
3×1=3   3×2=6   3×3=9   

Przyjrzyjmy się krok po kroku, jak to działa:

Najpierw pętla zewnętrzna ustawia i=1, a pętla wewnętrzna wykonuje się w całości:

i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"

Po zakończeniu pętli wewnętrznej wypisujemy nową linię za pomocą fmt.Println().

Następnie pętla zewnętrzna ustawia i=2, a pętla wewnętrzna zaczyna się od nowa, przy czym j ponownie przyjmuje wartości od 1:

i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"

Na koniec pętla zewnętrzna ustawia i=3, a pętla wewnętrzna wykonuje się jeszcze raz:

i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"

Każda pętla ma własny licznik (i i j), a rows i cols nigdy się nie zmieniają: tylko informują pętle, kiedy mają się zatrzymać. Ten wzorzec jest bardzo przydatny podczas pracy z tabelami danych lub tworzenia struktur przypominających siatkę.

challenge icon

Wyzwanie

Początkujący

W tym wyzwaniu poćwiczysz używanie zagnieżdżonych pętli do wypisywania prostego wzoru. Zewnętrzna pętla będzie iterować po wierszach, a wewnętrzna pętla po kolumnach, tworząc małą siatkę znaków.

Uzupełnij zagnieżdżone pętle, aby wypisać siatkę 3x3 z gwiazdek (*). Po każdej gwiazdce musi być spacja, więc każdy wiersz powinien wyglądać tak: * * * (ze spacją na końcu). Oczekiwany wynik to:

* * * 
* * * 
* * * 

Użyj nowego licznika w każdej pętli (na przykład i dla wierszy i j dla gwiazdek w wierszu) i porównuj go z rows lub columns. Nie zmieniaj samych rows ani columns: każdy wiersz potrzebuje ponownie columns.

Spróbuj swoich sił

package main

import "fmt"

func main() {
	// Liczba wierszy i kolumn w naszej siatce
	rows := 3
	columns := 3
	
	// TODO: Utwórz zagnieżdżoną pętlę, aby wypisać siatkę gwiazdek (*)
	// Pętla zewnętrzna powinna przechodzić przez wiersze
	// Pętla wewnętrzna powinna przechodzić przez kolumny
	for i := 0; i < rows; i++ {
		// Dodaj tutaj pętlę wewnętrzną, aby wypisać gwiazdki w każdej kolumnie
		
		// To wypisuje nowy wiersz po każdym wierszu siatki
		fmt.Println()
	}
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Go online