Zaawansowane sterowanie programem 121
Jaki znak? x
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
ANALIZA:
Użytkownik wprowadza liczbę kolumn, wierszy i znak, który ma być wypisywany. W linii 16, zewnętrzna pętla for, inicjalizuje licznik ( i ) wartością zero.
W linii 18, w pierwszej linii treści pętli zewnętrznej, uruchamiana jest kolejna pętla for. Drugi licznik ( j ) jest inicjalizowany wartością zero i wykonywana jest treść pętli wewnętrznej. W linii 19 wypisywany jest podany przez użytkownika znak i program wraca do instrukcji pętli wewnętrznej. Zauważ, że treść funkcji wewnętrznej składa się z tylko jednej instrukcji (wypisanie znaku). W instrukcji pętli wewnętrznej sprawdzany jest warunek (j < kolumny); jeśli jest on prawdziwy, to zmienna j jest inkrementowana i wypisywany jest kolejny znak. Czynność ta powtarza się tak długo, aż j osiągnie wartość kolumny.
W momencie zakończenia pętli wewnętrznej (gdy warunek j < kolumny nie jest już spełniony), program przechodzi do linii 20. Teraz pętla zewnętrzna wraca do początku (nagłówek pętli w linii 16) gdzie sprawdzany jest warunek (i < wiersze). Jeśli warunek jest spełniony, to inkrementowana jest zmienna i i treść pętli zostaje ponownie wykonana.
W każdej iteracji pętli zewnętrznej, pętla wewnętrzna jest na nowo inicjalizowana — zmienna j jest inicjalizowana wartością zero.
Ważne jest to, że w przypadku pętli zagnieżdżonych, pętla wewnętrzna jest wykonywana w każdej iteracji pętli zewnętrznej. Dzięki temu, podany znak jest wypisywany kolumny razy dla każdego wiersza.
Kombinacje instrukcji if oraz if. . . else, w przypadku głębokiego zagnieżdżenia, mogą powodować spore zamieszanie. C++ oferuje tutaj wygodne, alternatywne rozwiązanie. W przeciwieństwie do instrukcji if, która potrafi rozpatrzeć tylko jedną wartość jednocześnie) instrukcja switch pozwala na wyszczególnienie dowolnej liczby wartości. Oto ogólny schemat instrukcji switch: switch (wyrażenie)
{
case wartośćl: instrukcje;
break;
case wartośćl: instrukcje;
break;
break;
case wartośćl: instrukcje;
default: instrukcje;
}
Użytkownik wyprowadza liczbę kolumn, wierszy i znak, który ma być wypisywany. W linii 16, zewnętrzna pętla for, inicjalizuje licznik ( i ) wartością zero.
Jaki znak? x
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
W linii 18, w pierwszej linii treści pętli zewnętrznej, uruchamiana jest kolejna pętla for. Drugi licznik ( j ) jest inicjalizowany wartością zero i wykonywana jest treść pętli wewnętrznej. W linii 19 wypisywany jest podany przez użytkownika znak i program wraca do instrukcji pętli wewnętrznej. Zauważ, że treść funkcji wewnętrznej składa się z tylko jednej instrukcji (wypisanie znaku). W instrukcji pętli wewnętrznej sprawdzany jest warunek (j < kolumny); jeśli jest on prawdziwy, to zmienna j jest inkrementowana i wypisywany jest kolejny znak. Czynność ta powtarza się tak diugo, aż j osiągnie wartość kolumny.
W momencie zakończenia pętli wewnętrznej (gdy warunek j < kolumny nie jest już spełniony), program przechodzi do linii 20. Teraz pętla zewnętrzna wraca do początku (nagłówek pętli w linii 16) gdzie sprawdzany jest warunek (i < wiersze). Jeśli warunek jest spełniony, to inkrementowana jest zmienna i i treść pętli zostaje ponownie wykonana.
W każdej iteracji pętli zewnętrznej, pętla wewnętrzna jest na nowo inicjalizowana -zmienna j jest inicjalizowana wartością zero.
Ważne jest to, że w przypadku pętli zagnieżdżonych, pętla wewnętrzna jest wykonywana w każdej iteracji pętli zewnętrznej. Dzięki temu, podany znak jest wypisywany kolumny razy dla każdego wiersza.
Kombinacje instrukcji if oraz if. . . else, w przypadku głębokiego zagnieżdżenia, mogą powodować spore zamieszanie. C++ oferuje tutaj wygodne, alternatywne rozwiązanie. W przeciwieństwie do instrukcji if, która potrafi rozpatrzeć tylko jedną wartość jednocześnie) instrukcja switch pozwala na wyszczególnienie dowolnej liczby wartości. Oto ogólny schemat instrukcji switch:
switch (wyrażenie)
(
case wartośćl: instrukcje;
break;
case wartośćl: instrukcje;
break;
break;
case wartości: instrukcje;
default: instrukcje;