Prawo Conway'a - w każdej organizacji jest jedna osoba, która wie o co chodzi, należy ją natychmiast wyrzucić.
Kurs C++ - Część III. Zmienne i ich typy

Czasem trzeba w programie przechować jakąś wartość lub wynik obliczeń. Służy do tego pamięć RAM komputera. Jednak odwoływanie się do komórek pamięci po ich numerach (adresach) byłoby bardzo niewygodne. Dlatego wymyślono, żeby nadawać komórkom pamięci nazwy, po których łatwiej się zorientować, co się w nich znajduje. Taki nazwany obszar pamięci to właśnie jest zmienna. Dodatkowo, żeby nie było pomyłek, każda zmienna ma swój typ określający, jakiego rodzaju wartości może przechowywać. Poznamy teraz kilka z nich, a później dowiesz się, jak je wykorzystać w programie.

Zaczniemy od typu char. Zmienna tego typu zajmuje 1 bajt i może przyjmować wartości od -128 do +127. Dlaczego akurat taki zakres? Bierze się to z zapisu takiej liczby w pamięci. W jednym bajcie można pomieścić 256 różnych kombinacji bitów, czyli liczby od 0 do 255. Jednak żeby mieć możliwość korzystania z liczb ujemnych, pierwszy bit przeznaczono na znak liczby. Jeśli jest ustawiony, oznacza to liczbę ujemną, a gdy jest zgaszony, liczba jest dodatnia. Pozostałe siedem bitów oznacza liczbę, dlatego właśnie mamy zakres od -128 do +127.

Istnieje możliwość traktowania całego bajtu jako liczby - jeżeli rezygnujemy ze znaku i mamy do dyspozycji tylko liczby dodatnie. Służy do tego przedrostek unsigned. Liczba typu unsigned char ma zakres od 0 do 255. Odpowiada to zakresowi numerów znaków z tablicy kodów ASCII, więc zmienna tego typu jest często używana do przechowywania kodów liter i znaków z tablicy ASCII.

Kolejnym typem jest int - domyślny typ zmiennych i funkcji w C++. Zakres przechowywanych wartości zależy od systemu. W systemach 32-bitowych zajmuje cztery bajty i może pomieścić wartości od -2147483648 do +2147483647. Również w tym przypadku można skorzystać z przedrostka unsigned i zrezygnować z liczb ujemnych na rzecz wyłącznie liczb dodatnich. Wtedy zakres zmiennej zmieni się na 0 do 4294967295. Jeśli nie potrzebujesz tak dużego zakresu możesz też oszczędzić pamięć używając przedrostka short, dzięki czemu zmienna typu short int zajmuje tylko 2 bajty i mieści liczby od -32768 do +32767, a gdy dodamy przedrostek unsigned, zakres zmieni się na 0 - 65535. Zmienna typu int przechowuje tylko liczby całkowite.

Dla liczb z częścią dziesiętną mamy typ float. Zajmuje on 4 bajty i służy do przechowywania liczb zmiennoprzecinkowych od 3.4*10-38 do 3.4*10+38. Jeżeli precyzja do tylu miejsc po przecinku ci nie wystarcza, jest jeszcze typ double. Zajmuje 8 bajtów i służy do przechowywania liczb zmiennoprzecinkowych podwójnej precyzji, czyli od 1.7*10-308 do 1.7*10+308.

Przy funkcjach przyda się jeszcze jeden typ: jeżeli funkcja nie zwraca żadnej wartości, to trzeba jakoś "powiedzieć" kompilatorowi. Wtedy stosuje się typ void, który oznacza brak jakiegokolwiek typu.

Czas wypróbować działanie zmiennych w programie. Skoro konsola ma służyć do rozmowy z użytkownikiem, to przeprowadźmy taką rozmowę. Poprosimy użytkownika o podanie jakiejś liczby, a gdy ją poda, program wyświetli użytkownikowi to, co przed chwilą wpisał. Do przechowania liczby posłużymy się zmienną o nazwie liczba, zadeklarowana jako całkowitą. Tak wygląda deklaracja naszej zmiennej:

   int liczba;

Jak widać, najpierw podajemy typ zmiennej, później nazwę, a na końcu średnik (bo każda instrukcja w C++ musi się kończyć średnikiem). Taka instrukcja przydziela pamięć dla zmiennej liczba już na etapie kompilacji. Jednak nie wiadomo, co znajdowało się wcześniej w tym miejscu pamięci przed jej przydzieleniem, więc wartość zmiennej liczba jest przypadkowa. Dopiero gdy przypiszemy jej jakąś wartość, np. tak:

   liczba = 123;

będzie ona miała znaną wartość. Możemy to wszystko zrobić w jednej instrukcji, np. tak:

   int liczba = 123;

Wiesz już, jak wyświetlić tekst na ekran. A jak pobrać dane z klawiatury? W podobny sposób, tylko zamiast strumienia wyjściowego (cout) trzeba użyć strumienia wejściowego (cin) i dać odwrotnie strzałki:

   cin >> liczba;

Taka instrukcja spowoduje pobranie liczby ze strumienia wejściowego (czyli klawiatury) i wstawienie jej do zmiennej liczba. Strumień wejściowy sam rozpoznaje typ danych, który chcesz wczytać. Podobnie jest przy wysyłaniu zmiennej do strumienia wyjściowego. Tu również kompilator rozpoznaje, co chcesz wyświetlić i w odpowiedni sposób wykona. Możemy już więc napisać cały program:

   #include <iostream.h>

   void main()
   {   int liczba = 123;

       cout << "Podaj jakąś liczbę " << endl;
       cin >> liczba;
       cout << "Podąłeś liczbę " << liczba << endl;
   }

Jak to działa? Najpierw jest deklarowane użycie zmiennej liczba typu int, i od razu zmienna ta jest inicjowana wartością 123. Następnie na ekran pojawi się napis Podaj jakąś liczbę, a kursor przejdzie na początek nowego wiersza ekranu. Wtedy program pobiera od użytkownika liczbę - z klawiatury - i umieszcza ją w zmiennej liczba. Na końcu na ekranie pojawia się napis, oraz liczba ze zmiennej liczba.

« wstecz   dalej »