Instrukcje sterujące - instrukcja if
ZAGADNIENIA
Podstawowa składnia instrukcji if:
Struktura instrukcji warunkowej if jest prosta:
if ( <wyrażenie jest prawdziwe> )
Wykonaj tę instrukcję
Albo:
if ( <wyrażenie jest prawdziwe> )
{
Wykonaj wszystko w tym bloku
}
Kod, który następuje po instrukcji if (i jest warunkowo wykonywany), jest nazywany ciałem tej instrukcji (tak samo jak kod funkcji main nazywany jest jej ciałem). Oto prosty (trywialny) przykład składni instrukcji if:
if ( 5 < 10 )
cout << "A teraz 5 jest mniejsze od 10. Co za niespodzianka!"
W przykładzie tym sprawdzamy po prostu, czy twierdzenie, że „pięć jest mniejsze od dziesięć” jest prawdziwe, czy nie. Jeśli będziemy mieć szczęcie, okaże się, że nie jest! Jeśli chcesz, możesz napisać swój program w pełnej wersji; dołącz do niego plik iostream, umieść poniższy kod w funkcji main oraz uruchom program w celu przetestowania go.
Oto przykład ilustrujący użycie nawiasów klamrowych w celu wykonania wielu instrukcji:
if ( 5 < 10 )
{
cout < "A teraz 5 jest mniejsze od 10. Co za niespodzianka!\n";
cout < "Mam nadzieję, że ten komputer funkcjonuje poprawnie.\n";
}
Operatory i operacje logiczne
Wynikiem operacji logicznych są prawda true 1 i fałsz
false 0 Wszystkie warunki logiczne konstruujemy z użyciem operatorów
logicznych, takich samych, jakie stosuje się na matematyce w nierównościach. Aby
prześledzić poniższe przykłady użyjemy dwóch zmiennych: w zmiennej A znajduje
się liczba 1, w zmiennej B liczba 2.
- == czy jest równe, przykłady: (A == B) fałsz (A == 1) prawda
- != czy jest różne, przykłady: (A != B) prawda (A != 1) fałsz
- < czy jest mniejsze, przykłady: (A < B) prawda (A < 1) fałsz
- <= czy jest mniejsze lub równe, przykłady: (A <= B) prawda (A <= 1) prawda
- > czy jest większe, przykłady: (A > B) fałsz (A > 1) fałsz
- >= czy jest większe lub równe, przykłady: (A >= B) fałsz (A >= 1) prawda
- || alternatywa - suma logiczna, prawda , gdy jeden z warunków jest
prawdziwy
(A == B) || (A == 1) prawda - && koniunkcja – iloczyn logiczny, prawda, gdy oba warunki są prawdziwe
(A == B) && (A == 1) fałsz - ! negacja - zaprzeczenie
! (A == 1) fałsz
Przypisanie - porównanie
Wszystkie języki programowania "mają problem" z dokładnym określeniem różnicy pomiędzy przypisaniem (nadawaniem wartości zmiennej), a porównywaniem dwóch wartości. W C++ do przypisywania służy operator
"=", a do porównywania "==". W Pascalu na przykład przypisujemy za pomocą operatora
":=" a porównujemy operatorem "=". Istnieją również języki, które starają się same domyślić co programista miał na myśli i obie operacje wykonujemy operatorem
"=".
Warunki zagnieżdżone
Wczytaj z klawiatury punkty za egzamin (0..60) i przypisz je do jednej z grup: (0..20) – podstawowa, (21..40) – średnia (41..60) – zaawansowana.
Ponieważ instrukcja warunkowa porównuje tylko dwie wartości, musimy użyć kilku instrukcji warunkowych i porównywać kilka razy stosując złożone operatory logiczne. Możemy też zagnieździć instrukcje warunkowe. W pierwszym przypadku porównujemy tyle razy ile jest instrukcji warunkowych, nawet gdy w pierwszej instrukcji warunkowej otrzymamy pozytywne rozwiązanie. W drugim przypadku, otrzymanie pozytywnego rozwiązania nie uruchamia kolejnych instrukcji warunkowych - program działa szybciej i sprawniej! Nie musimy tworzyć osobnego warunku logicznego dla ostatniej zależności – skoro punkty nie należą do poprzednich zakresów, to muszą należeć do ostatniego zakresu.
int punkty; cout << "STOPIEŃ ZAAWANSOWANIA" << endl; cout << "Wpisz liczbę punktów: "; cin >> punkty; if (punkty>=0 && punkty <=20) cout << "grupa podstawowa"; if (punkty>20 && punkty <=40) cout << "grupa średnia"; if (punkty>40 && punkty <=60) cout << "grupa zaawansowana"; cout << endl; |
if (punkty>=0 && punkty <=20) cout << "grupa podstawowa"; else if (punkty>20 && punkty <=40) cout << "grupa średnia"; else cout << "grupa zaawansowana"; |
ZADANIA ŁATWE
- Napisz program zwracający mniejszą z dwóch liczb podanych przez użytkownika. Jeżeli liczby są równe program ma wyświetlić informację „Liczby są równe”.
- Napisz program informujący czy liczba podana przez użytkownika jest większa, mniejsza czy równa zero.
- Napisz program sprawdzający czy z boków o długościach podanych przez użytkownika można zbudować trójkąt.
- Napisz program wyznaczający rozwiązanie równania liniowego ax+b=0. (program wylicza wartośc x)
- Napisz program, który dla zadanych dwóch liczb, określi czy pierwsza jest wielokrotnością drugiej.
- Napisz program podawania daty w formacie – dzień (od 1 do 31), miesiąc (od 1 do 12), rok (od 1900 do 2050). Użytkownik wprowadza każdą z wartości w osobnym kroku. Jeżeli wprowadzona wartość jest błędna program kończy swoje działanie. Jeżeli wszystkie trzy wartości są poprawne program wyświetla datę np. 7.12.2009
ZADANIA
Napisz program do poniżej zamieszczonych problemów.
1) Sprawdzamy, czy liczba wpisana z klawiatury jest podzielna przez 3, 5, 7, 10.
2) Sprawdzamy czy wpisane z klawiatury boki trójkąta spełniają warunek istnienia trójkąta.
3) Wyliczamy deltę na podstawie wpisanych z klawiatury parametrów równania kwadratowego i wypisujemy liczbę rozwiązań. Pierwiastemk z licby możemy wyznaczyć za pomocą funkcji sqrt(liczba). Wcześniej leży dodać bibliotekę/pliok nagłówkowy cmath
4) Napisz program, który wystawi ocenę z testu. Użyj zagnieżdżonej instrukcji if - else 0 - 39 pkt - ocena niedostateczna 40 - 54 pkt - ocena dopuszczająca 55 - 69 pkt - ocena dostateczna 70 - 84 pkt - ocena dobra 85 - 98 pkt - ocena bardzo dobra 99 - 100 pkt - ocena celująca
5) Napisz program który sprawdza, która z podanych 2 liczb przez użytkownika jest najmniejsza.
6) Napisz program, który dla danego punktu na płaszczyźnie (X, Y) sprawdzi, w której ćwiartce układu współrzędnych się on znajduje. Jeżeli punkt leży w środku układu współrzędnych, program powinien wypisać liczbę 0. Jeżeli na osi X program powinien wypisać OX, jeśli na osi Y – wypisać OY.
7) pobiera od użytkownika długość boku kwadratu z kontrolą poprawności, a następnie oblicza obwód i pole kwadratu.
8) sprawdza, czy podana przez użytkownika liczba całkowita jest poprawnym numerem miesiąca.
9) wczytuje znak z klawiatury i określa, czy jest to mała litera.
10) wczytuje dwie liczby a, b i oblicza wartość wyrażenia (a+b)/(a-b). Program powinien sprawdzać poprawność wprowadzonych danych (mianownik różny od 0).
11) wczytuje liczbę całkowitą i drukuje na ekranie komunikat „Liczba jest parzysta” (jeśli podana liczba jest parzysta) albo „Liczba jest nieparzysta” (jeśli podana liczba jest nieparzysta).
12). dla przedziału domkniętego [a,b] (a i b zdefiniowane w programie) i liczby podanej przez użytkownika sprawdza czy jest ona w tym przedziale.
13). wczytuje liczbę całkowitą – rok, a następnie sprawdza czy jest to rok przestępny i wyświetla stosowną informację. (Rok przestępny: dzieli się przez 4 i nie dzieli się przez 100, lub dzieli się przez 400).
14) wczytuje współczynniki rzeczywiste układu równań 2x2 i wyświetla rozwiązanie tego układu, jeśli jest on oznaczony lub jeden z tekstów: "układ sprzeczny", "układ nieoznaczony". Przedrozwiązaniem układu wydrukować na ekranie postać układu. Dla przykładu,
dla liczb a = 2, b =-1, c = -1, d = 0, e = -5, f = 1
powinniśmy wydrukować równania 2x – y = -1 oraz -5y = 1.
15). Cena biletu PKS zależy od długości trasy wg następującego schematu:
za przejazdy od 0km do 10km płaci się 2zł,
za przejazdy od 11 do 30km stawka wynosi 1zł plus 0,10zł za każdy kilometr,
za przejazdy powyżej 30km stawka wynosi 1zł plus 0,08zł za każdy kilometr.
Przy założeniu, że zmienna k typu int oznacza długość trasy w kilometrach, napisz instrukcję wyznaczającą wartość zmiennej cena będącej kosztem zakupu biletu za przejazd k kilometrów. W przypadku nieprawidłowej wartości k koszt cena ma się równać -1.
16) Dla danej liczby całkowitej dodatniej c napisz instrukcję selekcji if obliczającą wartość zmiennej a według definicji:
0, jeśli c jest liczbą parzystą,
1, jeśli c jest jednocyfrową liczbą nieparzystą,
2, jeśli c jest liczbą nieparzystą o parzystej cyfrze dziesiątek,
3, jeśli c jest liczbą nieparzystą o nieparzystej cyfrze dziesiątek.