Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, wersja 1.0 |
©2008 mgr
Jerzy Wałaszek |
Zmienna (ang. variable) jest obiektem w pamięci komputera, który przechowuje dane przetwarzane przez program. Zmienne w języku C++ posiadają określone typy, czyli określony jest dla nich rodzaj przechowywanej informacji. Jest to bardzo istotne, ponieważ pamięć komputera zapamiętuje tylko bity i program musi "wiedzieć" jak te bity interpretować - te same bity mogą posiadać zupełnie inne znaczenia w innym kontekście.
Przykład:
101010012 | = | 169 | - bity traktowane jako liczba w kodzie NBC |
10101001U2 | = | -87 | - bity traktowane jako liczba w kodzie U2 |
10101001ASCII | = | '►' | - bity traktowane jako kod znaku ASCII |
10101001? | = | ? | - bity traktowane jako numery torped do odpalenia na okręcie podwodnym - torpedy 7,5,3 i 0 ognia! |
Z powyższego powodu zanim będziemy mogli w programie użyć zmiennej, musimy ją zdefiniować. Definicja ma na celu poinformowanie programu o rodzaju informacji, którą chcemy w zmiennej przechowywać (dzięki temu program będzie wiedział, jak ma interpretować bity zawarte w zmiennej) oraz o nazwie zmiennej, poprzez którą nasz program będzie się odwoływał do przechowywanych przez zmienną danych. W odpowiedzi program utworzy w pamięci obiekt, który będzie mógł przechowywać dane podanego typu.
Definicja zmiennej w języku C++ ma następującą składnię:
typ_zmiennej nazwa_zmiennej;
Zmienne całkowite (ang. integer variables) przechowują liczby całkowite. Wyróżniamy dwa podstawowe typy:
int - zmienna przechowuje liczbę 32-bitową w kodzie U2. Zakres liczb jest od -231 do 231 - 1, czyli od -2147483648 do 2147483647.
unsigned int - zmienna przechowuje liczbę 32 bitową w kodzie NBC. Zakres liczb jest od 0 do 232-1, czyli od 0 do 4294967295.
Nazwa zmiennej zbudowana jest z małych i dużych liter łacińskich, cyfr oraz znaku podkreślenia. Pierwszym znakiem nazwy zmiennej w języku C++ może być tylko litera lub znak podkreślenia. Nie wolno stosować cyfry! W jednej deklaracji możemy umieścić więcej zmiennych tego samego typu:
int
a,b,c; // trzy zmienne całkowite o nazwach
a, b i c
Język C++ rozróżnia w nazwach małe i duże litery. Zatem poniższe nazwy dotyczą różnych zmiennych:
ala, ALA, Ala, AlA, aLa
Instrukcja przypisania umieszcza w zmiennej dane. Posiada następującą składnię:
nazwa_zmiennej = wyrażenie;
Komputer najpierw oblicza wartość wyrażenia leżącego po prawej stronie operatora przypisania =, a następnie umieszcza wynik w zmiennej, której nazwę umieszczamy po lewej stronie operatora =.
Przykłady:
a = b + 15 * (c - 1);
c = 15 - a;
d = (a + b) / 2;
Instrukcja przypisania posiada w języku C++ wartość - wynik wyliczonego wyrażenia. Z tego powodu można ją stosować jako wyrażenie w innej instrukcji przypisania:
Przykład:
a = b = 5; // do obu zmiennych, a i b, trafi liczba 5
a = b = c = d + 5; // w zmiennych a, b i c znajdzie się ten sam wynik wyrażenia d + 5
Wartość można przypisywać zmiennym już na etapie ich definiowania:
int
a = 3, b = 12, c,d; // zmienna przyjmie 3,
zmienna b 12, a zmienne c i d nie będą miały określonej wartości
W wyrażeniach stosuje się następujące operatory arytmetyczne:
+ |
dodawanie |
- |
odejmowanie |
* |
mnożenie |
/ |
dzielenie - jeśli argumenty są całkowite, to wynik też jest całkowity, np. 5 / 2 daje wynik 2! |
% |
modulo, czyli reszta z dzielenia, np. 5 % 2 = 1 |
Operacje są wykonywane zgodnie z regułami arytmetyki, czyli w kolejności * / % + -. Jeśli chcemy zmienić kolejność wykonywania operacji arytmetycznych, to stosujemy nawiasy:
a = (b + 5) * c; // najpierw będzie policzona suma b
i 5, a później suma ta zostanie pomnożona przez c i wynik umieszczony w a
Strumień cin służy do odczytu danych z okna konsoli. Składnia jest następująca:
cin >> zmienna1 >> zmienn2 >> ...;
Przykład:
cout << "Podaj bok a = "; cin >> a;
Poniższy program odczytuje wiek użytkownika i wyświetla go z pewnym komentarzem:
#include <iostream> using namespace std; int main() { unsigned int wiek; cout << "Ile masz lat? : "; cin >> wiek; cout << "\n\nWiem, ze masz " << wiek << " lat\n\n"; system("pause"); return 0; } |
Kolejny program odczytuje długości boków prostokąta i na ich podstawie oblicza pole oraz obwód:
// Pole i obwód prostokąta // (C) I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { unsigned int a,b,pole,obwod; cout << "Obliczanie pola i obwodu prostokata\n" "-----------------------------------\n\n"; // odczytujemy długości boków a i b cout << "Bok a = "; cin >> a; cout << "Bok b = "; cin >> b; cout << endl; // wykonujemy obliczenia obwodu i pola obwod = 2 * (a + b); pole = a * b; // wyświetlamy wyniki obliczeń cout << "Obwod = " << obwod << endl << "Pole = " << pole << endl << endl; system("pause"); return 0; } |
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 ++
-- zmienna
lub
zmienna --
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:
#include <iostream> using namespace std; int main() { int a = 125, b = 30; ++a; --b; cout << a << " " << b << endl; system("pause"); return 0; } |
#include <iostream> using namespace std; int main() { int a = 125, b = 30; a++; b--; cout << a << " " << b << endl; system("pause"); return 0; } |
126 29 |
126 29 |
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:
#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; } |
#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; } |
126 29 126 29 |
126 29 125 30 |
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
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