Informatyka dla klas II – zmienne całkowite

Zmienne

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

 

Operator przypisania

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;

 

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:

 

// 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; 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.