Poznaj C++ w$ godziny0066

Poznaj C++ w$ godziny0066



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.

Listing 4.6. Prawidłowe użycie klamer w instrukcji if

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.

Listing 4.6. Prawidłowe użycie klamer w instrukcji if

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";


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0062 Instrukcje i wyrażenia 47Instrukcja if Normalnie program wykonuje się lini
Poznaj C++ w$ godziny0064 Instrukcje i wyrażenia 49) ł else instrukcja4; Ta zawikłana instrukcja if
Poznaj C++ w$ godziny0070 Instrukcje i wyrażenia 55 if (x != 0)    // jeśli x jest ró
Poznaj C++ w$ godziny0054 Instrukcje i wyrażenia 39Wyrażenia m Wszystko co zwraca w C++ jakąś wartoś
Poznaj C++ w$ godziny0056 Instrukcje i wyrażenia 41 Dzielenie całkowite wygląda trochę inaczej niż z
Poznaj C++ w$ godziny0058 Instrukcje i wyrażenia 43Listing 4.2. Obliczanie wartości wyrażenia // Lis
Poznaj C++ w$ godziny0060 Instrukcje i wyrażenia 45Nawiasy zagnieżdżone Dla bardziej skomplikowanych
Poznaj C++ w$ godziny0068 Instrukcje i wyrażenia 53 Tabela 4.2. Operatory logiczne Operator Symbol
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje
Obraz0645 GODZINA DZIEŃ MIESIĄC TIME DAY MONTH 6 7 8 9 10 0) 12 13 14 15 16 17 18 19 20 21 1 2 3 4
generat nap niesin011 Instrukcja do ćwiczenia - Generatory napięć niesinusoidalnych 11 Rys. 10.12. K
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
136 15e jpeg Solar cycles 1-20 Cycle l ♦Cvcte 11 Cycle 2 •Cycle 12 Cycle 3 ♦Cycle 13 Cycle
C360 10 12 06 33 13 Spośród ok. 100 cukrów prostych znanych w przyrodzie dobór naturalny uprzywilej
lista towaroznawstwo jpeg L.p. Nazwisko i imię 11 WOJTASIŃSKA MONIKA 12 WYPYCH MARTA 13 ŻUK JAN
11. Materiały i pomoce 12. Dokumentacja wycieczki 13. Źródła ♦ Uczniowie Zasadniczej Szkoły
C360 10 12 06 48 13 Spektryna Białko powierzchniowe Tworzy ok. lOOnm „powrozy" równoległe do p

więcej podobnych podstron