Podejmowanie decyzji w programie - instrukcja warunkowa - if...else, operatory relacyjne i logiczne, instrukcja wyboru - switch ... case
Cele ćwiczenia:
umiejętność budowania algorytmów i ich postaci graficznej
zapoznanie z instrukcjami warunkowymi if oraz if...else i ich zastosowaniem do dokonywania wyboru i podejmowania decyzji w programach
zapoznanie z instrukcjami wyboru switch ... case i ich zastosowaniem do dokonywania wyboru i podejmowania decyzji w programach
Nowe zagadnienia:
instrukcje warunkowe if (warunkowa niepełna) oraz if...else (warunkowa pełna)
instrukcja prosta (pusta, przypisania) i złożona
operatory porównania - relacji (==, !=, <. >, <=, >=)
operatory logiczne (&&, ||, !)
instrukcje wyboru switch ... case
zamiana małych liter na duże (toupper) i dużych na małe (tolower) oraz wprowadzenie biblioteki <ctype.h>
ustawienie wydruku na ekranie - znaki specjalne (\n - przejście do następnej linii, \t - przesunięcie o znak tabulacji)
Definicje nowych pojęć
W programach pisanych w C lub C++ nie zawsze wszystkie instrukcje muszą być wykonywane kolejno (sekwencyjnie). Słowa kluczowe if (jeżeli) oraz else (a jeśli nie) pozwalają na wybór jednej z dwu (lub jednej z wielu ) możliwości.
if (warunek1) //jeżeli warunek jest spełniony wykonaj instrukcję 1
{
instrukcja1; // jedna instrukcja prosta lub instrukcja złożona
}
else //a jeśli nie wykonaj instrukcję 2
{
instrukcja2; // jedna instrukcja prosta lub instrukcja złożona
}
Jeśli warunek jest spełniony, komputer wykonuje tylko instrukcje (jedna instrukcja prosta lub jedna instrukcja złożona) w pierwszej parze nawiasów {...}, następującej po słowie if. Część następująca po słowie else zostanie zignorowana. Jeśli warunek nie zostanie spełniony, komputer wykonuje tylko instrukcje po drugiej parze nawiasów - po słowie else, natomiast część pierwsza po słowie if zostanie zignorowana.
Część 2 instrukcji po słowie else jest opcjonalna i może być pominięta (jeśli jest logicznie zbędna).
Możliwe jest zagnieżdżanie instrukcji warunkowych, co umożliwia dokonywanie wyboru spośród wielu możliwości.
Instrukcja prosta to pojedyncze zdanie kodu źródłowego w C++ zakończone ;.
Instrukcja złożona (blok) to wiele instrukcji prostych ujętych w parę nawiasów klamrowych {...}.
Graficzny zapis instrukcji warunkowej pełnej przedstawiono poniżej.
Operatory porównania
Operator |
Działanie |
Przykład |
Zapis w C++ |
== |
równa się |
a==b |
if (a==b) |
!= |
różne od |
a!=b |
if (a!=b) |
< |
Mniejsze |
a<b |
if (a<b) |
> |
Większe |
a>b |
if (a>b) |
<= |
mniejsze lub równe |
a<=b |
if (a<=b) |
>= |
większe lub równe |
a>=b |
if (a>=b) |
Zadanie 1
Napisz program źródłowy obliczający wartość wyrażenia:
dla x wprowadzonego z klawiatury. Wyeliminuj możliwość dzielenia przez zero i obliczania pierwiastka z liczby ujemnej.
WERSJA I (bez użycia operatorów logicznych)
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float x,y;
cout<<"Podaj wartosc liczby x"<<endl;
cin>>x;
if (x<=0)
{
cout<<"Pierwiastek liczby ujemnej lub dzielenie przez zero"<<endl;
}
else
if (x==2)
{
cout<<"Dzielenie przez zero x=2 "<<endl;
}
else
if (x==5)
{
cout<<"Dzielenie przez zero x=5 "<<endl;
}
else
{
y=x/(sqrt(x)*(x-2)*(x-5));
cout<<" y= "<<y<<endl;
}
cout<<endl;
system (“pause”);
return 0;
}
Operatory logiczne
&& - and - iloczyn logiczny przykładowy zapis w C++
|| - or - suma logiczna if(x==2 || x==5 || x<=-5)
! - not - negacja logiczna
WERSJA II (z operatorami logicznymi)
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float x, y;
cout<<"Podaj wartosc liczby x"<<endl;
cin>>x;
if (x<=0 || x==2 || x==5)
cout<<"Pierwiastek liczby ujemnej lub dzielenie przez zero"<<endl;
else
{
y=x/(sqrt(x)*(x-2)*(x-5));
cout<<" y= "<<y<<endl;
}
cout<<endl;
system (“pause”);
return 0;
}
wersja I wersja II
W przypadku kiedy możliwości wyboru jest dużo posługiwanie się instrukcjami if..else staje się skomplikowane. Wygodniej jest zastosować instrukcje wyboru switch...case. Pozwala ona bez potrzeby zagnieżdżania sporządzić listę wszystkich możliwych wartości, oraz przeglądając tę listę - wybiera ten jeden przypadek, który nas interesuje.
switch (zmienna) //zmienna sterująca (selektor)
{
case'A': instrukcja 1; // jedna instrukcja prosta lub instrukcja złożona
break; //break jako instrukcja sterująca może być pominięta
case'B': instrukcja 2; w instrukcji switch lecz tylko świadomie, gdyż
break; powoduje zmianę zakresu realizacji całej instrukcji
case'C': instrukcja 3;
break;
default: instrukcja n; // wariant domyślny -wszystkie pozostałe możliwości
}
Zmiana wielkości liter
Język C++ rozróżnia wielkość liter. Aby zamienić małe litery na duże można użyć funkcji toupper bezpośrednio po wczytaniu zmiennej. Duże litery na małe zamieniamy przy pomocy funkcji tolower. Należy pamiętać, że funkcje te znajdują się w bibliotece <ctype.h>.
char zmienna; char zmienna;
cin>>zmienna; cin>>zmienna;
zmienna=toupper(zmienna); zmienna=tolower(zmienna);
Ustawienie wydruku na ekranie
Przesunięcie napisu CWICZE o dwa znaki tabulacji i przerzucenie do kolejnej linii można zrealizować następująco:
cout<<”\t \t \n CWICZE”;
lub
cout<<'\t'<<'\t'<<'\n'<<”CWICZE”;
Zadanie 2
Napisz program, który po wprowadzeniu określonego numeru dnia pisze jego nazwę słownie:
np. 1- poniedziałek; 2 - wtorek; 3 - środa itd. Jeżeli wskazany numer będzie większy od 7 na ekranie ma się pojawić informacja „Wcisnąłeś zły przycisk”.
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int z; //jezeli z bedzie znakiem to deklarujemy char z;
cout<<"Podaj numer dnia tygodnia = ";
cin>>z;
switch(z)
{
case 1: cout<<"poniedzialek"<<endl; //case 'p': cout<<"poniedzialek"<<endl;
break;
case 2: cout<<"wtorek"<<endl;
break;
case 3: cout<<"sroda"<<endl;
break;
case 4: cout<<"czwartek"<<endl;
break;
case 5: cout<<"piatek"<<endl;
break;
case 6: cout<<"sobota"<<endl;
break;
case 7: cout<<"niedziela"<<endl;
break;
default: cout<<"Wcisnoles zly przycisk"<<endl;
}
system (“pause”);
return 0;
}
Zadania C++ 2
Napisz program obliczający pierwiastki równania kwadratowego dla współczynników równania a, b, c podanych z klawiatury dla Δ > 0, Δ = 0 i Δ < 0.
Napisz program znajdujący największą spośród trzech liczb podanych z klawiatury.
Napisz program informujący czy wprowadzona z klawiatury liczba jest parzysta czy nieparzysta.
Napisz program, który w zależności od podanego znaku z obliczy pole powierzchni i obwód jednej z figur płaskich tj. np.:
dla z='k' - kwadratu,
dla z='p' - prostokąta,
dla z='t' - trójkąta,
dla z='z' - trapezu,
dla z='r' - równoległoboku,
dla z='o' - koła.
Napisz program, który w zależności od podanego znaku z obliczy pole powierzchni, objętość
i masę jednej z brył geometrycznych, tj. np.:
kuli,
sześcianu,
prostopadłościanu,
przyjmując ciężar właściwy jakiegoś metalu, z którego bryła zostanie wykonana.
Napisz program obliczający należność za energię elektryczną po podaniu z klawiatury jej zużycia w kWh. Na całkowitą kwotę składają się koszty wynikające ze zużycia energii oraz opłata stała uzależniona od przynależności do określonej grupy. Przyjmij, że odbiorcy podzieleni są na trzy grupy:
Grupa 1 zużycie od 0 do 300 kWh/miesiąc
cena jednostkowa za 1 kWh wynosi 0,42 zł, a opłata licznikowa 7,00 zł.
Grupa 2 zużycie od 301 do 900 kWh/miesiąc
cena jednostkowa za 1 kWh wynosi 0,35 zł, a opłata licznikowa 9,00 zł.
Grupa 3 zużycie powyżej 901 kWh/miesiąc
cena jednostkowa za 1 kWh wynosi 0,25 zł, a opłata licznikowa 11,00 zł.
Na ekranie powinna pojawić się informacja: do jakiej grupy użytkowników należysz, ile płacisz
za zużytą energię, ile wynosi opłata stała w tej grupie oraz całkowity koszt rachunku.
Napisz program, który będzie informował o godzinach odjazdów pociągów do kilku wybranych stacji np.
dla z = `K' - Katowice: 6.10, 6.30, 7.05;
dla z = `L' - Lublin: 5.40, 16.30, 17.45;
dla z = `W' - Warszawa: 5.30, 7.45, 8.05;
dla z = `Z' - Zielona Góra: 7.30, 8,50, 9.10;
Napisz program, który w zależności od podanego znaku z obliczy pole powierzchni, objętość
i masę jednej z brył geometrycznych, tj. np.:
kuli,
sześcianu,
prostopadłościanu,
przyjmując ciężar właściwy jakiegoś metalu, z którego bryła zostanie wykonana.
Napisz program, który rozpoznaje i informuje czy wprowadzona z klawiatury litera jest spółgłoską czy samogłoską. (samogłoski z pominięciem polskich liter - a, e, i, o, u, y).
Napisz program „Kalkulator”, który wykonuje podstawowe działania arytmetyczne (+, -, *, /) dla dwóch liczb podanych z klawiatury.
Ćwiczenia laboratoryjne nr 3
„Język Programowania” str. 3
N
Warunek
T
Instrukcja 2
Instrukcja 1
zly przycisk
WARIANT II
T
T
T
N
N
N
sroda
STOP
x=5
x=2
Obliczenia
Wypr. wyn.
Wypr. infor
Wypr. infor
Wypr. infor
x<=0
Wpr. x
START
x≤0, x=2, x=5
Wypr. wyn.
STOP
Wypr. infor
Obliczenia
Wpr. x
START
N
T
zmienna=
START
STOP
poniedzialek.
wtorek
default
C
B
A
instrukcja n
instrukcja 3
instrukcja 2
instrukcja 1
numer
default
3
2
1
Wybierz