Zmienne i podstawowe typy danych

Czym jest zmienna

Aby móc pisać jakiekolwiek przydatne programy, musimy operować na danych. źródła danych mogą być różne - mogą pochodzić z klawiatury, z pliku lub być przesyłane z zewnętrznego urządzenia.


Z pobieranymi danymi prawie na pewno będziemy chcieli coś zrobić - będziemy chcieli je przesłać gdzieś dalej lub w jakiś sposób przetworzyć. Co jednak, jeśli chcemy pobrać kilka danych np. dwie liczby za pomocą klawiatury a później wyświetlić ich sumę? Musimy przecież jakoś odróżnić pierwszą i drugą pobraną liczbę, żeby później móc je dodać. Do takich celów służą właśnie zmienne.


Zmienne są czymś w rodzaju pudełek, w których można przechowywać dane. W zmiennych będą przechowywane bardzo różne dane. Może to być zarówno pojedyncza liczba, pojedyncza litera, jak i kilka liczb, wyraz lub nawet całe zdanie.


To co będziemy chcieli przechowywać w zmiennej zależy tylko i wyłącznie od nas. Raz będzie to liczba, raz litera lub wyraz. Komputer oczywiście nie wie, jakie są nasze zamiary. Musimy mu to w jakiś sposób powiedzieć. Do tego celu służy typ zmiennej.

Typ zmiennej - czy to konieczne

Jak już wspomniałem, to naszym zadaniem jest określenie typu zmiennej. Komputer sam się nie domyśli, czy chcemy, aby to co zostało pobrane np. z klawiatury było liczbą czy zwykłym napisem. Możesz pomyśleć, że to bez sensu, a jednak jest w tym głęboki sens.


Przede wszystkim, każda zmienna, której będziemy chcieli użyć w programie musi zostać umieszczona gdzieś w pamięci komputera. Jeśli podamy z klawiatury napis "ala", to to słowo zostanie gdzieś zapisane w pamięci komputera. Tak samo będzie, gdy podamy liczbę 4 - ona również musi zostać gdzieś zapisana w pamięci komputera.


Chyba nie muszę Cię przekonywać, że dane, które chcemy przekazać do komputera mogą być różnej długości. Może to być jedna litera, jak i 100 stron tekstu. Musimy jasno powiedzieć, jakiego typu ma być zmienna, aby można było zarezerwować w pamięci odpowiednią ilość miejsca.


Można by oczywiście rezerwować jak najwięcej pamięci, jednak nie jest zbyt rozsądnie zarezerwować na jedną literę całej pamięci operacyjnej czy nawet jej połowy. Dzięki temu, że podajemy typ zmiennej, w pamięci operacyjnej zostanie zarezerwowany dla zmiennej tylko fragment pamięci - dokładnie taki, jak wynika to z typu zmiennej.


Na dodatek o tym, że typy danych są konieczne, niech świadczy taka sytuacja. Chcesz dodać do siebie to, co podasz z klawiatury. Podajesz najpierw 2, a później 3. Jaki powinien być wynik? Pomyślisz sobie, że 5. No dobrze, a co jeśli najpierw podasz literę c, a za chwilę literę b. Pomyślisz sobie, że komputer powinien zauważyć, że to nie są liczby i rezultatem powinno być np. cb.


No dobrze. A co jeśli najpierw podasz literę c, a później 2? Pomyślisz sobie tak - jeden z podanych znaków jest literą, więc wynik powinien być c2 - to przecież oczywiste.


W takim razie czas na ostatnią zagadkę. Tym razem chcemy dodać do siebie aż trzy dane podane za pomocą klawiatury. Najpierw podajesz c, później 2 a na końcu 3. Jaki tym razem powinien być rezultat: c23 a może c5? Podejrzewam, że nie wiesz już jak byłoby rozsądniej.


Dlatego też stosowanie typów danych jest konieczne - dzięki temu będzie oczywiste jaki jest wynik np. dodawania danych do siebie. To, jaki rezultat otrzymamy, zależy tylko i wyłącznie od nas. Taki właśnie model przyjęto w C++.


Jak określić typ zmiennej

Wiesz już, że w języku C++ musisz jawnie określić typ zmiennej. Określenie typu zmiennej jest bardzo proste. Symbolicznie, robi się to następująco:

nazwa_typu nazwa_zmiennej;

Określenie nazwa_typu to typ, jaki będziemy chcieli, aby miała nasza zmienna. Tutaj nie możemy wpisać dowolnego słowa (chyba, że stworzymy własny typ danych). Typy w języku C++ są określone i musimy użyć jednego ze specjalnych słów.


Z kolei nazwa_zmiennej to nazwa, jaką wymyślimy dla zmiennej. Nazwa zmiennej to tzw. identyfikator.


Identyfikator a nazwa zmiennej

Identyfikator to dowolnie długi napis składający się z małych i dużych liter, cyfr oraz znaku _ (znaku podkreślenia). Identyfikator może się zaczynać od litery lub znaku podkreślenia (nie może się zaczynać od cyfry). Przy okazji dodam, że mówiąc o literach mam tu na myśli wyłącznie podstawowe litery, bez polskich ogonków.


Jak już wspomniałem, nazwa zmiennej jest właśnie identyfikatorem. Przy nadawaniu nazw, podstawową zasadą jest to, że nazwy zmiennych muszą się między sobą różnić. Nie możemy dwóm zmiennym nadać tej samej nazwy, bowiem wtedy ich odróżnienie nie będzie możliwe.


Mimo, że tak naprawdę jedyną zasadą dotyczącą nazw zmiennych jest to, że nazwa ta musi być identyfikatorem oraz, że nazwy zmiennych muszą być unikalne, nie ma innych zasad. Mimo to warto nałożyć kilka dodatkowych ograniczeń, które ułatwią pisanie programów. Zaznaczam jednak, że z ograniczeń tych można korzystać lub nie - nie są one wymagane.


Pierwszą główną zasadą jest to, że nazwa powinna mieć nazwę, która odpowiada jej przeznaczeniu. Jeśli nazwa będzie służyła do przechowywania imienia, warto nazwać ją po prostu imie. Reguły tej nie warto stosować dla zmiennych, które służą np. w pętlach jako zmienne sterujące (dowiesz się o tym w przyszłości). Wówczas zwyczajowo nazywa się zmienne: i, j, k itd.


Mimo, że jak już wspomniałem, identyfikatory mogą być dowolnie długie, to jednak zazwyczaj w większości kompilatorów jest jakieś ograniczenie. Ograniczenie to sięga zazwyczaj nawet ponad 100 znaków. Mimo, że nazwy zmiennych powinny się kojarzyć z przeznaczeniem zmiennej, to nie powinny być za długie. Najlepsza długość nazwy zmiennej to od 6 do 10 znaków. Stosując długie nazwy, np. po kilkadziesiąt znaków oprócz tego, że musisz się więcej napisać, to jeszcze sprawiasz, że kod staje się mniej czytelny.


Kolejną sprawą jest to, że mimo że duże i małe litery są rozróżniane, raczej nie należy tworzyć zmiennych, które różnią się wielkością liter. Należy unikać jednoczesnego stosowania takich identyfikatorów, bowiem łatwo się pomylić. Poza tym, stosując taką metodę, utrudniamy innym osobom zrozumienie kodu. Niewłaściwe z tego punktu widzenia będą zatem jednocześnie występujące nazwy typu: imie, Imie, IMIE, imiE.


Ostatnią sprawą jest wielkość liter i oddzielanie wyrazów. Wszystkie nazwy zmiennych przyjęło się pisać małymi literami. Co prawda występują od tego pewne odstępstwa, jednak ogólnie nazwy zmiennych najlepiej pisać małymi literami.


W przypadku, gdy chcemy tworzyć nazwy zmiennych składające się z dwóch słów, powszechnie stosowane są dwie notacje. Pierwsza, tzw. stara notacja polega na stosowaniu w nazwie zmiennej wyłącznie małych liter i oddzielaniu poszczególnych słów za pomocą znaku podkreślenia, np. mala_liczba_tomka.


Z kolei w tzw. nowej notacji znak podkreślenia nie jest stosowany. Oddzielenie słów otrzymuje się poprzez napisanie pierwszej litery nowego słowa za pomocą dużej litery, przy czym pierwsze słowo zawsze zaczyna się z małej litery. Wówczas przykładowa nazwa przedstawiona w starej notacji, w nowej notacji wyglądałaby tak: malaLiczbaTomka.


Przedstawione powyżej reguły możesz stosować lub nie. Powszechnie wszystkie te reguły są stosowane, więc mam nadzieję, że szybko uda Ci się ich nauczyć, jeśli tylko będziesz tego chcieć.

Podstawowe typy liczbowe

Wiesz już jakie, jak można nazywać zmienne w programach. Teraz czas dowiedzieć się, jakie są typy danych. Poniżej znajdują się podstawowe typy liczbowe występujące w języku C++:


int        - typ całkowity
float     - typ zmiennopozycyjny (ułamkowy)
double - typ zmiennopozycyjny podwójnej precyzji (dokładniejszy niż typ float)

Przedstawione typy liczbowe różnią się przede wszystkim zakresem. Zanim zdecydujemy się deklarować jakąś zmienną, musimy najpierw zdecydować, jak duże liczby będziemy chcieli czytać i czy będą to liczby całkowite czy liczby z częścią ułamkową (zmniennopozycyjne).


Drugą również ważną cechą typów danych jest to, iż zajmują one różną ilość w pamięci operacyjnej. Dlatego, jeśli chcemy czytać tylko małe liczby całkowite, raczej nie powinniśmy deklarować zmiennych typu float czy double, bo w przypadku gdy będziemy czytać setki czy tysiące liczb, może się okazać, że właśnie przez to zabraknie nam pamięci.


Każdy typ danych może zajmować różną ilość pamięci. Aby sprawdzić, ile bajtów zajmuje np. typ int w Twoim komputerze należy napisać sizeof(int).


Ogólnie, aby sprawdzić, ile pamięci zajmuje dowolny typ danych (nie tylko liczbowy) w Twoim komputerze należy wpisać sizeof(typ) lub sizeof(zmienna). Ponieważ w języku C++ zmienna jest zawsze określonego typu, który programista sam najpierw podał, więc w tym drugim przypadku rezultat będzie identyczny jak w pierwszym przypadku.


Przykładowe programy

Poniżej przedstawiam dwa przykładowe programy, w których deklarujemy zmienne. Ponieważ w programach nie ma żadnych nowych elementów w stosunku do poprzednich programów, dlatego też powstrzymam się od dodatkowych komentarzy. Wszystkie niezbędne komentarze są umieszczone w kodzie programów.

#include <iostream>

using namespace std;

int main()
{
  float mojaLiczba; // liczba zmiennopozycyjna, nazwa zmiennej
 
  cout <<"Podaj wartosc liczby: ";
  cin >>mojaLiczba;
  cin.ignore();
 
  cout <<endl<<"Wartosc liczby podanej przez Ciebie to "<<mojaLiczba<<endl;
  cout <<"Typ float zajmuje "<<sizeof(float)<<" bajt(y/ow)."<<endl;
  cout <<"Twoja zmienna zajmuje "<<sizeof(mojaLiczba)<<" bajt(y/ow)."<<endl<<endl;
 
  cout <<"Nacisnij ENTER aby zakonczyc"<<endl;
  getchar();
  return 0;
}
program nr 5.1

#include <iostream>

using namespace std;

int main()
{
  double moj_wzrost; // liczba zmiennopozycyjna,
  int wiek; //liczba calkowita
 
  cout <<"Podaj swoj wzrost (w metrach): ";
  cin >>moj_wzrost;
  cin.ignore();
 
  cout <<"Podaj swoj wiek: ";
  cin >>wiek;
  cin.ignore();
 
  cout <<endl<<"Masz "<<moj_wzrost<<" metrow wzrostu."<<endl;
  cout <<"Typ double zajmuje "<<sizeof(double)<<" bajt(y/ow)."<<endl;
  cout <<"Zmienna zajmuje "<<sizeof(moj_wzrost)<<" bajt(y/ow)."<<endl<<endl;
 
  cout <<endl<<"Masz "<<wiek<<" lat."<<endl;
  cout <<"Typ int zajmuje "<<sizeof(int)<<" bajt(y/ow)."<<endl;
  cout <<"Zmienna zajmuje "<<sizeof(wiek)<<" bajt(y/ow)."<<endl<<endl;
 
  cout <<"Nacisnij ENTER aby zakonczyc"<<endl;
  getchar();
  return 0;
}
program nr 5.2

Podsumowanie

Dzięki tej lekcji, umiesz już deklarować zmienne w programie. Wiesz jak prawidłowo nazywać zmienne i czym są identyfikatory. Ponadto znasz już podstawowe typy liczbowe i wiesz jak można sprawdzić rozmiar dowolnego typu danych.

powrót