Instrukcje i wyrażenia 51
11: if (x > 10)
12: if (x > 100)
13: cout « "Większa niz 100. Dziękuję!\n";
14: else // ten else nie należy do zamierzonego przez nas if!
15: cout « "Mniejsza niz 10. Dziękuję!\n";
16:
17: return 0;
18: )
Podaj liczbę mniejsza niz 10 albo większa niz 100: 20 Mniejsza niz 10. Dziękuję!
ANALIZA:
Programista chciał, aby program wczytał liczbę większą niż 100 albo mniejszą niż 10, sprawdził poprawność i wypisał stosowny komunikat.
Jeśli warunek w linii 11 jest prawdziwy, to wykonywana jest instrukcja w linii 12. W tym wypadku, linia 12 wykona się, jeśli wprowadzona liczba jest większa od 10. Linia 12 zawiera kolejną instrukcję warunkową. Będzie ona spełniona, gdy wprowadzona liczba jest większa niż 100. Jeśli wprowadzona liczba będzie nie większa niż 100, to instrukcja w linii 13 nie zostanie wykonana.
Jeśli wprowadzona liczba jest mniejsza lub równa 10, to wyrażenie instrukcji if w linii 10 będzie fałszywe. Program wykona kolejną instrukcję za if. W tym wypadku będzie to linia 16. Jeśli podasz liczbę mniejszą niż 10, to efektem działania programu będzie:
Podaj liczbę mniejsza niz 10 albo większa niz 100: 9
else w linii 14 miał, w zamierzeniu autora, być przypisany do if w linii 11. Niestety, else w linii 14 należy do if w linii 12; powoduje to, że program posiada subtelny błąd.
Błąd ten nie zostanie wychwycony przez kompilator, gdyż program jest teoretycznie poprawny. Nie robi on jednak tego, co było zamierzone. W większości przypadków będzie on działał prawidłowo. Tak długo, aż wprowadzona liczba będzie faktycznie większa niż 100 albo mniejsza niż 10 to efekt działania będzie zgodny z oczekiwaniami.
Listing 4.6. pokazuje jak poprawić błąd w programie.
1: // Listing 4.6 - ilustracja prawidłowego
2: // użycia klamer w Zagnieżdżonej instrukcji if
3: #include <iostream.h>
4: int main()
5: {
6: int z;
7: cout « "Podaj liczbę mniejsza niz 10 albo większa niz 100:";
8: cin » x;
9: cout « "\n";
11: if (x > 10)
12: if (x > 100)
13: cout « "Większa niz 100. Dziękuję!\n";
14: else // ten else nie należy do zamierzonego przez nas if!
15: cout « "Mniejsza niz 10. Dziękuję!\n";
16:
17: return 0;
18: )
EFEKT DZIAŁANIA:
Podaj liczbę mniejsza niz 10 albo większa niz 100: 20 Mniejsza niz 10. Dziękuję!
ANALIZA:
Programista chciał, aby program wczytał liczbę większą niż 100 albo mniejszą niż 10, sprawdził poprawność i wypisał stosowny komunikat.
Jeśli warunek w linii 11 jest prawdziwy, to wykonywana jest instrukcja w linii 12. W tym wypadku, linia 12 wykona się, jeśli wprowadzona liczba jest większa od 10. Linia 12 zawiera kolejną instrukcję warunkową. Będzie ona spełniona, gdy wprowadzona liczba jest większa niż 100. Jeśli wprowadzona liczba będzie nie większa niż 100, to instrukcja w linii 13 nie zostanie wykonana.
Jeśli wprowadzona liczba jest mniejsza lub równa 10, to wyrażenie instrukcji if w linii 10 będzie fałszywe. Program wykona kolejną instrukcję za if. W tym wypadku będzie to linia 16. Jeśli podasz liczbę mniejszą niż 10, to efektem działania programu będzie:
Podaj liczbę mniejsza niz 10 albo większa niz 100: 9
else w linii 14 miał, w zamierzeniu autora, być przypisany do if w linii 11. Niestety, else w linii 14 należy do if w linii 12; powoduje to, że program posiada subtelny błąd.
Błąd ten nie zostanie wychwycony przez kompilator, gdyż program jest teoretycznie poprawny. Nie robi on jednak tego, co było zamierzone. W większości przypadków będzie on działał prawidłowo. Tak długo, aż wprowadzona liczba będzie faktycznie większa niż 100 albo mniejsza niż 10 to efekt działania będzie zgodny z oczekiwaniami.
Listing 4.6. pokazuje jak poprawić błąd w programie.
1: // Listing 4.6 - ilustracja prawidłowego
2: // użycia klamer w Zagnieżdżonej instrukcji if
3: (tinclude <iostream.h>
4: int main()
5: {
6: int x;
7: cout « "Podaj liczbę mniejsza niz 10 albo większa niz 100:";
8: cin » x;
9: cout « "\n";