plik


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