Koło informatyczne

Przyspieszony kurs języka C++

 

Modyfikacja zmiennej

Do zmiany zawartości zmiennej używa się instrukcji przypisania o postaci:

 

zmienna = wyrażenie;

 

Ciekawostką języka C++ jest to, że sama instrukcja przypisania również posiada wartość wyrażenia. Uruchom poniższy program.

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a;

  cout << 3 * (a = 5) << endl
       << a << endl;
  return 0;
}

 

Co otrzymałeś w wyniku? Jaką wartość przyjęła zmienna a?

Własność ta jest bardzo użyteczna, gdy wartość wyrażenia należy umieścić w kilku zmiennych:

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b,c;

  a = b = c = 1235;

  cout << "a = " << a << endl
       << "b = " << b << endl
       << "c = " << c << endl;
  return 0;
}

 

Operacja przypisania może stanowić część innego wyrażenia. Jednakże z własności tej korzystajmy z umiarem, inaczej można łatwo stworzyć trudne w interpretacji programy.

Z modyfikacją zmiennej mamy do czynienia wtedy, gdy w wyrażeniu przypisywanym zmiennej występuje ta zmienna. W takim przypadku wartość wyrażenia zależy od poprzedniej zawartości zmiennej. Oto przykład:

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 1;

  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  a = a + a; cout << a << endl;
  return 0;
}

 

Jeśli zmienisz wartość początkową zmiennej a, to otrzymasz inny ciąg liczb. Oto inny przykład:

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int i = 0;
  int s = 1;

  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  s = s * (i = i + 1); cout << s << endl;
  return 0;
}

 

Niektóre operacje modyfikacji zmiennej są szczególnie często wykonywane w programach. Dlatego otrzymały one w języku C++ specjalne konstrukcje.

Zwiększanie zmiennej o 1 wykonuje operator ++. Można go umieścić zarówno przed jak i za zmienną:

 

zmienna++;
++zmienna;

 

Podobną funkcję pełni operator --, który zmniejsza zawartość zmiennej o 1:

 

zmienna--;
--zmienna;

 

Jeśli powyższe wyrażenia są stosowane samodzielnie, to nie ma znaczenia sposób użycia operatorów ++ lub --:

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b;

  a = b = 10;

  a++;
  ++b;
  cout << a << endl
       << b << endl << endl;

  a--;
  --b;
  cout << a << endl
       << b << endl;

  return 0;
}

 

Różnice zaczną pojawiać się wtedy, gdy operację zwiększania ++ lub zmniejszania -- zastosujemy w wyrażeniu wraz z innymi operatorami. Wtedy obowiązuje następująca reguła:

 

Jeśli operator ++ lub -- występuje za zmienną, to w wyrażeniu zostanie użyta bieżąca wartość zmiennej. Zmiana jej zawartości nastąpi dopiero później, po wyliczeniu wyrażenia. Z kolei, jeśli operator ++ lub -- występuje przed zmienną, to zawartość tej zmiennej zostanie najpierw zmodyfikowana, a następnie użyta do wyliczenia wyrażenia.

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b,c,d;

  a = b = 10;

  c = 5 * a++;
  d = 5 * ++b;

  cout << c << endl
       << d << endl;

  return 0;
}

 

Operatory ++ i -- mają wyższy priorytet od pozostałych operatorów arytmetycznych.

Oprócz zwiększania i zmniejszania o 1 język C++ udostępnia również inne operatory modyfikacji. Posiadają one wspólną postać:

 

zmienna operator= wyrażenie;

 

Taka konstrukcja jest równoważna konstrukcji:

 

zmienna = zmienna operator wyrażenie;

 

Przykłady:

 

a += 5;   // Do zmiennej a zostanie dodana liczba 5
a -= c+d; // Od zmiennej a zostanie odjęta suma c+d
a *= a;   // W zmiennej a otrzymamy kwadrat poprzedniej zawartości

 

Operacje te, podobnie jak operacja przypisania, posiadają wartość w języku C++ i można je stosować w innych wyrażeniach:

 

Code::Blocks
// Wyrażenia
// Koło informatyczne
// (C)2014 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
  long long sp = 1, i = 0;

  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;
  sp *= i += 2; cout << "dla " << i << " mamy " << sp << endl;

  return 0;
}

 

Podsumujmy:

 

Operator Opis
=
Przypisanie. Ma wartość wyrażenia po prawej stronie.
++
Modyfikacja: zwiększenie zmiennej o 1.
--
Modyfikacja: zmniejszenie zmiennej o 1.
+=
Modyfikacja: do zmiennej dodajemy wartość wyrażenia po prawej stronie.
-=
Modyfikacja: od zmiennej odejmujemy wartość wyrażenia po prawej stronie.
*=
Modyfikacja: zmienną mnożymy przez wartość wyrażenia po prawej stronie.
/=
Modyfikacja: zmienną dzielimy przez wartość wyrażenia po prawej stronie.
%=
Modyfikacja: do zmiennej trafia reszta z dzielenia jej przez wartość wyrażenia po prawej stronie.

 


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

©2024 mgr Jerzy Wałaszek

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

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