Lekcja 5LEKCJA 5
Wykonywanie prostych operacji
Podczas lekcji 4 dowiedziałeś się, w jaki sposób deklarować i wykorzystywać
zmienne w programach. Wraz ze zwiększaniem się złożoności twoich programów
będziesz w nich wykonywać na wartościach zmiennych operacje arytmetyczne, takie
jak dodawanie, odejmowanie, mnożenie i dzielenie. Teraz pokażemy, w jaki sposób
można realizować te operacje przy użyciu operatorów arytmetycznych języka C++.
Pod koniec tej lekcji będziesz rozumieć następujące zagadnienia podstawowe:
Do realizowania operacji matematycznych w programach służą operatory
arytmetyczne C++.
Aby operacje arytmetyczne były realizowane w sposób jednoznaczny, C++ nadaje
operatorom arytmetycznym priorytety.
Przy użyciu nawiasów w wyrażeniach arytmetycznych możesz określać kolejność, w
jakiej C++ wykonuje operacje.
W wielu programach w C++ wykorzystywane są operatory zwiększania (++) i
zmniejszania (--), które dodają lub odejmują jeden od wartości zmiennej.
Gdy nauczysz się rozpoznawać rozmaite operatory arytmetyczne C++, to przekonasz
się, że realizowanie operacji matematycznych jest bardzo łatwe!
Podstawowe operacje matematyczne
Niezależnie od tego, co ma za zadanie twój program, zapewne będzie dodawać,
odejmować, mnożyć lub dzielić pewne wartości. Jak się wkrótce dowiesz, programy
mogą wykonywać operacje arytmetyczne na stałych (np. 3 * 5) lub na zmiennych
(np. zaplata - wartosc). Tabela 4 wymienia podstawowe operacje matematyczne:
Tabela 4. Podstawowe operatory matematyczne języka
C++OperatorZnaczeniePrzykład
+dodawanierachunek = cena + podatek
-odejmowaniereszta = zapłata - rachunek
*mnożeniepodatek = cena * stawka_podatku
/dzieleniesrednia = suma / liczba_elementow
Przedstawiony poniżej program OPERMAT.CPP wyświetla wyniki rozmaitych prostych
operacji arytmetycznych przy użyciu strumienia cout:
#include
void main (void)
{
cout << "5 + 7 = " << 5 + 7 << endl;
cout << "12 - 7 = " << 12 - 7 << endl;
cout << "1.2345 * 2 = " << 1.2345 * 2 << endl;
cout << "15 / 3 = " << 15 / 3 << endl;
}
Przyjrzyjmy się dokładnie instrukcjom programu. Zwróć uwagę na to, że każde
wyrażenie najpierw występuje w cudzysłowie, co sprawia, że program wypisuje je
(np. 5 + 7) na ekranie. Następnie program wyświetla wynik operacji i przechodzi
do nowej linii. Gdy skompilujesz i uruchomisz ten program, to będziesz mieć na
ekranie komputera następujące wyjście:
C:\> OPERMAT
5 + 7 = 12
12 - 7 = 5
1.2345 * 2 = 2.467
15 / 3 = 5
W tym przykładzie program wykonywał operacje arytmetyczne, używając jedynie
stałych wartości. Przedstawiony poniżej program MATZMIEN.CPP będzie wykonywał
operacje arytmetyczne na zmiennych:
#include
void main(void)
{
float cena = 15.50; //Cena artykułu
float stawka_podatku = 0.06; //Podatek od sprzedaży wynosi 6
//procent
float zaplacono = 20.00; //Suma jak± klient zapłacił
float podatek, reszta, rachunek;//Podatek dla artykułu, reszta i
//suma rachunku
podatek = cena * stawka_podatku;
rachunek = cena + podatek;
reszta = zaplacono - rachunek;
cout << "Cena Artykułu: " << cena << " zł.\tPodatek: " << podatek <<
" zł.\tRachunek: " << rachunek << " zł." << endl;
cout << "Reszta dla klienta: " << reszta << " zł." << endl;
}
W naszym przykładzie program używa jedynie zmiennych rzeczywistych
(zmiennoprzecinkowych). Jak widzimy, przypisuje on zmiennym wartości przy
deklaracjach. Następnie wykonuje operacje arytmetyczne na zmiennych, aby ustalić
wysokość podatku, wartość rachunku dla artykułu oraz ile reszty trzeba wypłacić
klientowi. Gdy skompilujesz i uruchomisz ten program, dostaniesz na ekranie
następujące wyjście:
C:\> MATZMIEN
Cena Artykułu: 15.5 zł. Podatek: 0.93 zł. Rachunek: 16.43 zł.
Reszta dla klienta: 3.57 zł.
Zwiększanie wartości zmiennej o 1
Przy pisaniu programów typową operacją, jaką będziesz wykonywać, będzie
zwiększanie o 1 wartości zmiennej całkowitej. Na przykład, załóżmy, że w swoim
programie używasz zmiennej licznik do przechowywania liczby plików, które
program wydrukował. Po wydrukowaniu każdego kolejnego pliku program powinien
dodawać 1 do poprzedniej wartości zmiennej licznik. Przy użyciu operatora
przypisania C++ można w następujący sposób zwiększać o 1 wartość zmiennej
licznik:
licznik = licznik +1;
W naszym przykładzie program najpierw nadaje wartość zmiennej licznik, a
następnie dodaje do niej jeden. Później program z powrotem wstawia na licznik
wynik dodawania. Przedstawiony poniżej program LICZNIK.CPP przy użyciu operatora
przypisania zwiększa zmienną licznik (która inicjalnie ma wartość 1000) o 1
(przypisując zmiennej licznik wynik 1001):
#include
void main(void)
{
int licznik = 1000;
cout << "Początkowa wartość zmiennej licznik: " << licznik << endl;
licznik = licznik +1;
cout << "Końcowa wartość zmiennej licznik: " << licznik << endl;
}
Gdy skompilujesz i uruchomisz ten program, to dostaniesz na ekranie następujące
wyjście:
C:\> LICZNIK
Początkowa wartość zmiennej licznik: 1000
Końcowa wartość zmiennej licznik: 1001
Ponieważ zwiększanie o jeden wartości zmiennej jest typową operacją w
programach, język C++ daje nam do dyspozycji operator zwiększania, oznaczany
podwójnym plusem (++). Operator zwiększania oferuje skrócony sposób dodawania
jednego do wartości zmiennej. Na przykład obie poniższe instrukcje zwiększają o
1 wartość zmiennej licznik:
licznik = licznik +1;
licznik++;
Przedstawiony poniżej program OP_ZWI.CPP przy użyciu operatora zwiększania
dodaje 1 do wartości zmiennej licznik:
#include
void main(void)
{
int licznik = 1000;
cout << "Początkowa wartość zmiennej licznik: " << licznik << endl;
licznik ++ ;
cout << "Końcowa wartość zmiennej licznik: " << licznik << endl;
}
Program działa dokładnie w taki sam sposób jak LICZNIK.CPP, który zwiększał
wartość zmiennej przy użyciu operatora przypisania. Gdy C++ napotyka operator
zwiększania, to najpierw pobiera wartość zmiennej i dodaje do niej 1, a
następnie ponownie umieszcza w tej zmiennej wynik operacji.
Różnica między prefiksowym (przed) a postfiksowym (po) operatorem zwiększania
Gdy używasz w swoich programach operatora zwiększania, to możesz umieszczać go
przed lub po zmiennej:
++zmienna;
zmienna++;
Ponieważ pierwszy operator pojawia się przed zmienną, nosi on nazwę prefiksowego
operatora zwiększania. Analogicznie drugi operator umieszczany za zmienną to
postfiksowy operator zwiększania. Powinieneś zrozumieć różne traktowanie przez
kompilator C++ tych dwóch operatorów. Dla przykładu weźmy następującą instrukcję
przypisania:
aktualny_licznik = licznik++;
Ta instrukcja nakazuje C++ by przypisał zmiennej aktualny_licznik wartość
zmiennej licznik. Ponadto postfiksowy operator zwiększania instruuje C++ by
zwiększył aktualną wartość zmiennej licznik. Dzięki użyciu tutaj operatora
postfiksowego powyższa instrukcja jest równoważna takim dwóm instrukcjom:
aktualny_licznik = licznik;
licznik = licznik +1;
A teraz weźmy poniższą instrukcję przypisania, używającą prefiksowego operatora
zwiększania:
aktualny_licznik = ++licznik;
W tym przykładzie instrukcja przypisania nakazuje C++ aby najpierw zwiększył
wartość licznika, a następnie przypisał wynik dodawania zmiennej
aktualny_licznik.
Dzięki użyciu tutaj operatora prefiksowego powyższa instrukcja jest równoważna
takim dwóm instrukcjom:
licznik = licznik +1;
aktualny_licznik = licznik;
Jest bardzo istotne, byś zrozumiał prefiksowy i postfiksowy operator
zwiększania, a także różnicę między nimi, ponieważ można je spotkać w wielu
programach w C++. Przedstawiony poniżej program PRE_POST.CPP ilustruje sposób
używania prefiksowego i postfiksowego operatora zwiększania:
#include
void main(void)
{
int maly_licznik = 0;
int duzy_licznik = 1000;
cout << "maly_licznik wynosi " << maly_licznik << endl;
cout << "maly_licznik++ daje w wyniku " << maly_licznik++ << endl;
cout << "końcowa wartość maly_licznik: " << maly_licznik << endl;
cout << "duzy_licznik wynosi " << duzy_licznik << endl;
cout << "++duzy_licznik daje w wyniku " << ++duzy_licznik << endl;
cout << "końcowa wartość duzy_licznik: " << duzy_licznik << endl;
}
Gdy skompilujesz i uruchomisz ten program, dostaniesz na ekranie następujące
wyjście:
C:\> PRE_POST
maly_licznik wynosi O
maly_licznik++ daje w wyniku 0
końcowa wartość maly_licznik: 1
duzy_licznik wynosi 1000
++duzy_licznik daje w wyniku 1001
końcowa wartość duzy_licznik: 1001
Ten program stosuje postfiksowy operator zwiększania dla zmiennej maly_licznik.
Najpierw wyświetla aktualną wartość tej zmiennej (0), a następnie zwiększa ją o
1. Program stosuje prefiksowy operator zwiększania dla zmiennej duzy_licznik.
Najpierw wyświetla aktualną wartość tej zmiennej (1000 + 1), a następnie wynik
operacji (1001). Teraz wróć do edycji programu i zmień operator postfiksowy na
prefiksowy, a prefiksowy na postfiksowy. Skompiluj i uruchom program. Zauważ w
jaki sposób zmiana operatorów wpływa na wyjście generowane przez program.
W C++ jest także operator zmniejszania
Jak już wiesz, podwójny plus (++) jest operatorem zwiększania C++. Analogicznie
podwójny minus (--) jest w języku C++ operatorem zmniejszania, który zmniejsza o
1 wartość zmiennej. Tak jak dla operatorów zwiększania, C++ daje nam do
dyspozycji prefiksowy i postfiksowy operator zmniejszania. Przedstawiony poniżej
program ZMNILICZ.CPP ilustruje sposób używania operatora zmniejszania:
#include
void main(void)
{
int maly_licznik = 0;
int duzy_licznik = 1000;
cout << "maly_licznik wynosi " << maly_licznik << endl;
cout << "maly_licznik-- daje w wyniku " << maly_licznik-- << endl;
cout << "końcowa wartość maly_licznik: " << maly_licznik << endl;
cout << "duzy_licznik wynosi " << duzy_licznik << endl;
cout << "--duzy_licznik daje w wyniku " << --duzy_licznik << endl;
cout << "końcowa wartość duzy_licznik: " << duzy_licznik << endl;
}
Gdy skompilujesz i uruchomisz ten program, dostaniesz na ekranie następujące
wyjście:
C:\> PRE_POST
maly_licznik wynosi O
maly_licznik-- daje w wyniku 0
końcowa wartość maly_licznik: -1
duzy_licznik wynosi 1000
duzy_licznik daje w wyniku 999
końcowa wartość duzy_licznik: 999
Jak widzimy, prefiksowy i postfiksowy operator zmniejszania mają znaczenie
analogiczne jak odpowiadające im operatory zwiększania, z tym że zmniejszają one
o 1 wartość zmiennej.
Inne operatory C++
W tej lekcji koncentrujemy się na typowych operatorach arytmetycznych C++ i
operatorach zwiększania i zmniejszania. Analizując programy w C++ możesz
napotkać jeden lub więcej spośród operatorów wymienionych w tabeli 5:
Tabela 5. Najczęściej spotykane operatory C++OperatorZnaczenie
%Operator modulo. Zwraca resztę z dzielenia.
~Dopełnienie jedności. Zamienia zera na jedynki, a jedynki na zera
&Binarny operator AND (koniunkcja bitów równych 1)
¦Bitowy operator OR (alternatyw bitów równych 1)
^Bitowy operator XOR (wyłączna alternatyw bitów równych 1)
<>Przesunięcie w prawo bitów o podaną liczbę pozycji (shift)
Znaczenie priorytetów operatorów
Przy wykonywaniu w C++ operacji arytmetycznych musisz mieć na uwadze to, że C++
realizuje te działania w ustalonej kolejności, która wynika z priorytetów, jakie
mają odpowiednie operatory. Na przykład C++ wykonuje mnożenie przed dodawaniem.
Aby lepiej zrozumieć priorytety operatorów, weźmy poniższe wyrażenie:
wynik = 5 + 2 * 3;
W zależności od tego, w jakim porządku C++ realizuje operacje mnożenia i
dodawania, otrzymamy różne rezultaty:
wynik = 5 + 2 * 3;
= 7 * 3;
= 21;
wynik = 5 + 2 * 3;
= 5 + 6;
= 11;
Aby uniknąć nieporozumień tego rodzaju, język C++ przypisuje każdemu operatorowi
priorytet, który wyznacza, w jakiej kolejności C++ realizuje odpowiednie
operacje. Ponieważ c++ wykonuje operacje w ustalonej kolejności, to programy
realizują obliczenia w sposób logiczny.
W tabeli 6 wymieniono priorytety operatorów C++. Operatory w górnej rubryce mają
najwyższy priorytet. Operatory przedstawione w każdej rubryce poziomej mają taki
sam priorytet. Jeśli przyjrzysz się tabeli, to zauważysz, że C++ przypisuje
mnożeniu wyższy priorytet niż dodawaniu. Wielu z wymienionych operatorów nigdy
nie widziałeś, ale na razie nie przejmuj się tym. Po przeczytaniu tej książki
będziesz mieć doświadczenie z nimi wszystkimi i wtedy powinieneś je rozumieć.
Tabela 6. Priorytety operatorów w C++OperatorNazwaPrzykład
::Widocznośćnazwa_klasy::nazwa_skladowej_klasy
::Widoczność globalna::nazwa_zmiennej
.Wybór składowejobiekt.nazwa_skladowej
->Wybór składowejwskaznik->nazwa_skladowej
[]Indekswskaznik[element]
()Wywołanie funkcjiwyrazenie(parametry)
()Konstrukcja wartoścityp (parametry)
sizeofRozmiar obiektusizeof wyrazenie
sizeofRozmiar typusizeof(typ)
++Postfiksowe zwiększaniezmienna++
++Prefiksowe zwiększanie++zmienna
--Postfiksowe zmniejszaniezmienna--
--Prefiksowe zmniejszanie--zmienna
&Adres zmiennej&zmienna
*Zawartość spod adresu*wskaznik
newAlokacja pamięcinew typ
deleteZwalnianie pamięcidelete wskaznik
delete[]Zwalnianie pamięci tablicydelete wskaznik
~Dopełnienie jedności~wyrazenie
!Przeczenie (NOT)!wyrazenie
+Plus unarny+ l
-Minus unarny- l
()Konwersja typów(typ) wyrazenie
.*Wybór składowejobiekt.*wskaznik
->Wybór składowejObiekt->wskaznik
*Mnożeniewyrazenie * wyrazenie
/Dzieleniewyrazenie / wyrazenie
%Modulowyrazenie % wyrazenie
+Dodawaniewyrazenie + wyrazenie
-Odejmowaniewyrazenie - wyrazenie
Sterowanie kolejnością realizowania operacji przez C++
Jak już mówiliśmy, C++ przypisuje operatorom różne priorytety i w ten sposób
steruje porządkiem wykonywania obliczeń. Niestety, może się zdarzyć, że
kolejność, w jakiej C++ realizuje operacje, różni się od porządku, w jakim
chcesz by były one wykonywane. Na przykład, przypuśćmy, że musisz w swoim
programie dodawać dwie ceny, a następnie mnożyć otrzymany rezultat przez stawkę
podatku:
rachunek = cena_a + cena_b * 1.06;
Niestety, w tym przykładzie C++ najpierw wykona mnożenie (cena_b * 1.06), a
następnie doda do wyniku wartość zmiennej cena_a.
Jeśli twoje programy muszą wykonywać operacje arytmetyczne w ustalonej
kolejności, to możesz umieszczać w nawiasie wyrażenia, które muszą być wykonane
najpierw. Gdy C++ oblicza wyrażenia, to zawsze najpierw realizuje operacje
znajdujące się w nawiasach. Na przykład, weźmy następujące wyrażenie:
wynik = (2 + 3) * (2 + 4);
C++ oblicza to wyrażenie w następujący sposób:
wynik = (2 + 3) * (3 + 4);
= (5) * (3 + 4);
= 5 * (7);
= 5 * 7;
= 36;
Grupując w ten sposób wyrażenia w nawiasach możesz sterować kolejnością, w
jakiej C++ realizuje operacje arytmetyczne. We wcześniejszym przykładzie możesz
w swoim programie dodawać dwie ceny w nawiasie, tak jak tutaj:
rachunek = (cena_a + cena_b) * 1.06;
Przy operacjach arytmetycznych uważaj na nadmiar
Z lekcji 4 wiesz, że gdy przypisujesz zmiennej liczbę spoza zakresu wartości
typu zmiennej, to ma miejsce błąd nadmiaru. Przy wykonywaniu operacji
arytmetycznych musisz mieć na uwadze błędy nadmiaru. Na przykład, poniższy
program NADM_MAT.CPP mnoży 200 przez 300 i przypisuje otrzymany wynik zmiennej
typu int. Jednak ponieważ rezultat mnożenia (60 000) wykracza poza maksymalną
wartość typu int (32767), dostaniemy błąd nadmiaru:
#include
void main(void)
{
int wynik;
wynik = 200 * 300;
cout << "200 * 300 = " << wynik << endl;
}
Gdy skompilujesz i uruchomisz ten program, to dostaniesz na ekranie następujące
wyjście:
C:\> NADM_MAT
200 * 300 = -5536
Zapamiętaj
Podczas tej lekcji przedstawiliśmy typowe operatory arytmetyczne i zwiększania
języka C++. Jak się dowiedziałeś, aby zapewnić, że twoje programy wykonują
operacje w ustalonej kolejności, C++ przypisuje każdemu operatorowi priorytet,
który steruje porządkiem, w jakim operacje są realizowane. Podczas lekcji 6
nauczysz się w jaki sposób przy użyciu strumienia wejściowego cin można
wykonywać operacje wprowadzania danych z klawiatury. Zanim jednak przejdziemy do
lekcji 6 upewnij się, że opanowałeś już następujące zagadnienia podstawowe:
W C++ operatory +, -, * oraz / oznaczają dodawanie, odejmowanie, mnożenie i
dzielenie.
C++ daje nam do dyspozycji prefiksowy (przed) i postfiksowy (po) operator
zwiększania, które dodają jeden do wartości zmiennej.
C++ daje nam do dyspozycji prefiksowy (przed) i postfiksowy (po) operator
zmniejszania, które odejmują jeden od wartości zmiennej.
Operatory prefiksowe C++ instruują C++ by najpierw zwiększał (lub zmniejszał)
wartość zmiennej, a następnie wykorzystywał wynik operacji.
Operatory postfiksowe C++ instruują C++ by najpierw wykorzystywał wartość
zmiennej, a następnie ją zwiększał (lub zmniejszał).
Aby zapewnić, że wyrażenia będą obliczane w ustalony sposób, C++ przypisuje
każdemu operatorowi priorytet, który decyduje o kolejności wykonywania
operacji.
Jeśli chcesz zmienić porządek realizowania operacji arytmetycznych, umieszczaj
w nawiasie wyrażenia, które mają być obliczane najpierw.
WsteczSpis treściDalej
Wyszukiwarka
Podobne podstrony:
Kris Jamsa Wygraj Z C lekcja32
Kris Jamsa Wygraj Z C lekcja 5
Kris Jamsa Wygraj Z C lekcja23
Kris Jamsa Wygraj Z C lekcja38
Kris Jamsa Wygraj Z C lekcja35
Kris Jamsa Wygraj Z C lekcja20
Kris Jamsa Wygraj Z C lekcja27
Kris Jamsa Wygraj Z C lekcja34
Kris Jamsa Wygraj Z C lekcja18
Kris Jamsa Wygraj Z C lekcja17
Kris Jamsa Wygraj Z C lekcja25
Kris Jamsa Wygraj Z C lekcja14
Kris Jamsa Wygraj Z C lekcja36
Kris Jamsa Wygraj Z C lekcja 4
Kris Jamsa Wygraj Z C lekcja33
Kris Jamsa Wygraj Z C lekcja30
Kris Jamsa Wygraj Z C lekcja12
Kris Jamsa Wygraj Z C lekcja28
Kris Jamsa Wygraj Z C lekcja 6
więcej podobnych podstron