Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, wersja1.0 |
©2013 mgr
Jerzy Wałaszek
|
Zwykle chcemy przetwarzać w programie pewne dane. Do ich przechowywania służą zmienne (ang. variables). Zmienna jest fragmentem pamięci komputera, w którym program przechowuje określoną informację. Przed pierwszym użyciem zmiennej musimy ją zadeklarować, czyli określić rodzaj przechowywanej w niej informacji oraz nazwę, poprzez którą będziemy się odwoływali w programie do tej informacji. Deklaracja zmiennej w języku C++ jest następująca:
typ_danych nazwa_zmiennej;
typ_danych | – | określa rodzaj przechowywanej w zmiennej informacji. Na poprzednich zajęciach poznaliśmy kod U2, który jest powszechnie używany do reprezentacji liczb całkowitych w systemach komputerowych. Typ int oznacza 32 bitową liczbę U2 o zakresie od -231 do 231 - 1, czyli około ± 2 mld. Będziemy również używali 32 bitowych liczb w naturalnym kodzie binarnym, który w języku C++ reprezentowany jest przez typ unsigned int, który oznacza 32 bitową liczbę NBC o zakresie od 0 do 232 - 1, czyli od 0 do około 4 mld. |
nazwa_zmiennej | – | jest napisem, poprzez który uzyskujemy dostęp do informacji przechowywanej w zmiennej. Nazwy zmiennych zbudowane są z liter małych i dużych, cyfr oraz znaku podkreślenia. Pierwszym znakiem nazwy zmiennej powinna być litera (nie może być nim cyfra!). Zmienna nie powinna posiadać nazwy dłuższej od 31 znaków (tyle zwykle zapamiętują kompilatory C++). Nie wolno również zmiennym nadawać nazw identycznych ze słowami kluczowymi języka C++ (np. return, int, unsigned, itp.). Nazwa zmiennej powinna kojarzyć się ze spełnianą funkcją w programie: lepiej użyć nazw Wynik, nazwisko, konto od Q12XC5, r74SY8 czy a_7dnm99VCD. |
Przykłady deklaracji zmiennych:
int a; // zmienna a jest zmienną U2 int a,b,c,d; // w jednej definicji można umieścić kilka zmiennych unsigned int x1,x2,wynik; // zmienne NBC
Często informacja jest wprowadzana do zmiennych z klawiatury komputera. W ten sposób użytkownik może podać dane, które komputer następnie przetworzy w programie. Odczytu danych z klawiatury dokonujemy w języku C++ przy pomocy strumienia cin (ang. console input – wejście konsoli). Składnia jest następująca
cin >> nazwa_zmiennej;
W jednym rozkazie można odczytywać informacje do kilku różnych zmiennych:
cin >> a >> b >> c; // Odczyt kolejno do zmiennej a, b i c
// Przykładowy program w C++ // (C)2013 mgr Jerzy Wałaszek // I LO w Tarnowie //--------------------------- #include <iostream> using namespace std; int main() { unsigned int wiek; cout << "Witaj. Ile masz lat? : "; cin >> wiek; cout << "Teraz masz " << wiek << ". Ale za 15 lat bedziesz mial juz " << wiek + 15 << ".\n\n"; return 0; } |
Do przetwarzania danych w programie C++ używany jest operator przypisania (ang. assignement operator). Posiada ona następującą postać:
zmienna = wyrażenie;
Komputer oblicza wartość wyrażenia i wynik umieszcza w podanej zmiennej. Znaku = nie traktuj jako równość matematyczną, jest to symbol operacji przypisania.
// Program przeliczający stopnie // Celsjusza na stopnie Fahrenheita. // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int tc,tf; cout << "Przeliczanie stopni Celsjusza na stopnie Fahrenheita\n" "----------------------------------------------------\n\n" "Temperatura w stopniach Celsjusza? : "; cin >> tc; tf = (9 * tc) / 5 + 32; cout << "Temperatura w stopniach Fahrenheita : " << tf << endl << endl; return 0; } |
// Program obliczający drogę w ruchu jednostajnie // przyspieszonym. // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int s,V0,t,a; cout << "Droga w ruchu jednostajnie przyspieszonym\n" "-----------------------------------------\n\n" "Vo = "; cin >> V0; cout << "t = "; cin >> t; cout << "a = "; cin >> a; s = t * (V0 + a * t / 2); cout << "\n----------\n" "s = " << s << end;; return 0; } |
Wyrażenie z operatorem przypisania posiada wartość równą wartości wyrażenia po prawej stronie operatora. Przykład:
cout << (a = 5) << endl;
Wynikiem wykonania tej instrukcji jest liczba 5, ponieważ to stoi po prawej stronie operatora =. Dzięki tej własności możemy w języku C++ przypisać tę samą wartość do kilku zmiennych.
Zamiast pisać:
a = 5; b = 5; c = 5;
możemy zapisać prościej:
a = b = c = 5;
Język C++ posiada dwa użyteczne operatory do zwiększania i zmniejszania zawartości zmiennej:
++
- zwiększa zawartość zmiennej o 1
--
- zmniejsza zawartość zmiennej o 1
Operatory te można stosować na dwa sposoby:
++ zmienna
lub
zmienna ++
lub
-- zmiennazmienna --
Jeśli operacja zwiększania zmiennej jest samodzielną instrukcją, to nie ma znaczenia, który z tych sposobów użyjemy. Poniższe dwa programy dają identyczne wyniki:
// Modyfikacja zmiennej // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int a = 125, b = 30; ++a; --b; cout << a << " " << b << endl; system("pause"); return 0; } |
// Modyfikacja zmiennej // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int a = 125, b = 30; a++; b--; cout << a << " " << b << endl; system("pause"); return 0; } |
W obu programach tworzone są dwie zmienne a i b. Zmiennej a nadajemy wartość 125, a zmiennej b 30. Następnie program zwiększa zawartość zmiennej a o 1 do 126, a zawartość zmiennej b zmniejsza o 1 do 29. Na koniec zawartości zmiennych są kolejno wyświetlane i otrzymujemy liczby 126 i 29. W pierwszym programie operatory ++ i -- stosujemy przed zmiennymi, a w drugim po zmiennych.
Jeśli operator zwiększania ++ lub zmniejszania -- zastosujemy do zmiennej użytej w wyrażeniu, to bardzo istotne jest, którą z form wybierzemy:
++ zmienna, -- zmienna
: najpierw modyfikuje zawartość zmiennej,
a następnie wynik jest używany do obliczeń w wyrażeniu
zmienna ++, zmienna --
: w wyrażeniu stosowana jest bieżąca
zawartość zmiennej, a następnie po wyliczeniu wyrażenia zmienna jest
modyfikowana.
Przykład:
Poniższe dwa programy dają różne wyniki:
// Modyfikacja zmiennej // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int a = 125, b = 30,c,d; c = ++a; d = --b; cout << a << " " << b << " " << c << " " << d << endl; system("pause"); return 0; } |
// Modyfikacja zmiennej // (C)2013 I LO w Tarnowie //---------------------------------- #include <iostream> using namespace std; int main() { int a = 125, b = 30,c,d; c = a++; d = b--; cout << a << " " << b << " " << c << " " << d << endl; system("pause"); return 0; } |
Programy różnią się jedynie sposobem umieszczenia operatorów ++ oraz -- w
stosunku do modyfikowanej zmiennej. W obu przypadkach zmienna a
przyjmuje na końcu wartość 126, a zmienna b 29. Jednakże w
pierwszym programie do zmiennej c trafi 126 i do d 29,
a w drugim do c trafi 125, a do
d 30. W pierwszym programie zmienna a w wyrażeniu
c = ++a;
d = --b
;
do zmiennej c trafi najpierw zawartość zmiennej
a, czyli 125, a następnie zmienna a zostanie zwiększona do 126.
Podobnie w wyrażeniu
do zmiennej d
trafi zawartość
b, czyli 30, a następnie zmienna b zostanie zmniejszona do
29.
Na opisane wyżej zjawisko należy bardzo uważać w programach C++, gdyż często prowadzi ono do trudno wykrywalnych błędów. Najbezpieczniej jest modyfikować zmienną poza wyrażeniami, lecz często robi się to wewnątrz wyrażeń w celu optymalizacji kodu. Wybór jest twój - zostałeś ostrzeżony.
Poza prostymi operatorami zwiększania lub zmniejszania o 1 zawartości zmiennej, język C++ posiada bogatą gamę operatorów modyfikacji:
zmienna += wyrażenie;
- zwiększa zawartość zmiennej o wartość
wyrażenia:
a += 2; // zmienne a zostaje zwiększona o 2
c += a + b; // zmienna c zostaje zwiększona o sumę zmiennych a i b
zmienna -= wyrażenie;
- zmniejsza zawartość zmiennej o
wartość wyrażenia:
a -= 3; // zmienna a zostaje pomniejszona o 3
b -= 2 * c; // zmienna b zostaje pomniejszona o 2 * c
zmienna *= wyrażenie;
- mnoży zawartość zmiennej przez
wartość wyrażenia
a *= 3; // zmienna a zostaje pomnożona przez 3
b *= c - d; // zmienna b zostaje pomnożona przez różnicę zmiennych c i d
zmienna /= wyrażenie;
- dzieli zawartość zmiennej przez
wartość wyrażenia
a /= 4; // zawartość zmiennej a zostaje podzielona przez 4
b /= c--; // zawartość zmiennej b zostaje podzielona przez c, po czym c zostaje zmniejszone o 1
zmienna %= wyrażenie;
- w zmiennej zostanie umieszczona
reszta z dzielenia tej zmiennej przez wartość wyrażenia:
a %= 10; // w zmiennej a znajdzie się reszta z dzielenia a przez 10, czyli ostatnia cyfra dziesiętna
a %= 2; // w zmiennej a będzie 0, jeśli a było parzyste, lub 1, jeśli a było nieparzyste
Podane powyżej operatory modyfikacji (jak również instrukcje przypisania) mogą wystąpić w wyrażeniach, lecz odradzamy takie rozwiązania poza szczególnymi wyjątkami - prowadzą one do bardzo zawiłych kodów, które trudno później analizować:
a = 1; b = 2; c = 3; a = c + (b += 5 * (c *= 3 + b)); // odpowiedz bez uruchamiania, jaki będzie wynik w a?
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe