Pętle zagnieżdżone
Część sekcji Podstawy ścieżki Rust w Coddy. Lekcja 41 z 75.
Pętla zagnieżdżona to po prostu pętla wewnątrz innej pętli. Pętla wewnętrzna wykona wszystkie swoje iteracje podczas każdej pojedynczej iteracji pętli zewnętrznej. Dobrym przykładem jest zegar: dla każdej godziny (pętla zewnętrzna) wskazówka minutowa (pętla wewnętrzna) musi wykonać pełny 60-minutowy cykl.
Przykład zagnieżdżonej pętli:
let rows = 2;
let cols = 2;
for x in 0..rows {
for y in 0..cols {
println!("{} {}", x, y);
}
}
// To wyświetli:
// 0 0
// 0 1
// 1 0
// 1 1Pętla zewnętrzna (x) wykonuje się rows razy, a za każdym razem pętla wewnętrzna (y) wykonuje się cols razy. Każda pętla ma własny licznik: y zaczyna ponownie od 0 za każdym razem, gdy wykonuje się pętla zewnętrzna, natomiast rows i cols pozostają takie same i jedynie informują pętle, kiedy mają się zatrzymać.
Wyzwanie
PoczątkującyNapisz program, który wypisuje prostokąt z gwiazdek (*) o podanej szerokości i wysokości.
Dane wejściowe: dwie liczby całkowite: width i height (kod początkowy już je odczytuje).
Na przykład:
Jeśli width = 5 i height = 3, wynikiem powinno być:
*****
*****
*****Jeśli width = 4 i height = 6, wynikiem powinno być:
****
****
****
****
****
****Użyj nowego licznika dla każdej pętli (na przykład i dla wierszy i j dla gwiazdek w wierszu) i porównuj go z height lub width. Nie zmieniaj samych height i width: każdy wiersz ponownie potrzebuje wartości width.
Spróbuj swoich sił
use std::io;
fn main() {
let mut width_input = String::new();
let mut height_input = String::new();
io::stdin().read_line(&mut width_input).unwrap();
io::stdin().read_line(&mut height_input).unwrap();
let width: i32 = width_input.trim().parse().unwrap();
let height: i32 = height_input.trim().parse().unwrap();
// Napisz swój kod poniżej
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 1
Operatory arytmetyczneOperator moduloSkrócone operacje arytmetyczneOperatory porównaniaPorównywanie ciągów znaków7Podstawowe wejście i wyjście
Wyświetlanie w konsoliOdczytywanie danych od użytkownikaPowtórka – do 120Powtórka – prawda czy fałsz5Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Powtórka — prosta logikaOperatory logiczne, część 311Funkcje
Deklarowanie funkcjiParametry i argumentyWartości zwracaneWiele wartości zwracanychPowtórka – funkcja SigmaPowtórka – funkcja walidująca14Iterowanie po tablicach
Przewodnik po zakresachUlepszona pętla forPożyczanie w pętliTypowe operacje na tablicach3Zmienne – część 2
Deklarowanie typuKonwencje nazewnictwaWnioskowanie o typiePodsumowanie – inicjalizacja zmiennychRzutowanie typów9Pętle
Pętla for dla sekwencjiPętla whileInstrukcja breakInstrukcja continuePętle zagnieżdżoneEtykiety pętliPętla nieskończonaPodsumowanie — dynamiczne dane wejściowe12Podstawy tablic
Deklarowanie tablicTablica jako parametrDostęp do elementówModyfikowanie tablicPodsumowanie — czytelny wydruk tablicy15Operacje na ciągach znaków
Metody ciągów znakówMakro format!Konwersja ciągów znakówPowtórka — formatowaniePoćwicz samodzielnie: Kompilator Rust online