![]() |
Autor artykułu: mgr Jerzy Wałaszek |
©2014 mgr
Jerzy Wałaszek
|
Do zmiany zawartości zmiennej używa się instrukcji przypisania o postaci:
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:
| 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ć:
Taka konstrukcja jest równoważna konstrukcji:
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 |
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