Zmienne całkowite w języku C++

Definicja zmiennej

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

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

Operacja odczytu danych ze strumienia cin

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;
}

 

Instrukcje modyfikacji zmiennej

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 c = ++a; jest najpierw zwiększana z 125 na 126 i ten wynik trafia do zmiennej c. podobnie zmienna b w wyrażeniu d = --b; zostanie najpierw zmniejszona do 29 i wynik ten trafi do zmiennej d. W drugim programie operatory ++ i -- umieszczone są za zmienną. Zatem w wyrażeniu c = a++; do zmiennej c trafi najpierw zawartość zmiennej a, czyli 125, a następnie zmienna a zostanie zwiększona do 126. Podobnie w wyrażeniu d = b--; 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?

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.