субота, 19. септембар 2015.

Operatori u C++ programskom jeziku


Operator je simbol ili karakter koji deluje nad operandima tako što tera prevodilac na specifične matematičke ili logičke manipulacije. Zvuči komplikovano, ali u suštini je jednostavno. Operatore delimo na aritmetičke, operatore dodele i relacione operatore (operatori poređenja). Postoje i logički operatori koji se više koriste u iskazima gde želite da koristite više relacioni operatora istovremeno. Aritmetički operatori su:
  • Sabiranje +
  • Oduzimanje –
  • Množenje *
  • Deljenje /
  • Modul %
Ove stvari ste učili na časovima matematike u osnovnoj školi; kod računara je procedura ista. Modul u programiranju ima često drugačije značenje jer se češće odnosi na module nego na operatore, zato se češće naziva modulo ili skraćeno mod. Modul kao operator vam se definiše kao ostatak prilikom deljenja dva prirodna broja. U prevodu prilikom deljenja celih brojeva. To nije isto što i deljenje dva decimalna broja:

5 / 2 = 2,5                     5 % 2 = 1

Modul primena u programiranju se najbolje može objasniti kad na primer želite da vidite da li je neki broj paran ili neparan. Tad je dovoljno broj modulo sa 2. Ukoliko nemate ostatak ili modulo između dva broja je 0, onda je broj paran.

5 % 2 = 1       // modulo od 5 i 2 ima ostatak, znači broj 5 je neparan

4 % 2 = 0       // modulo od 4 i 2 nema ostatak, znači broj 4 je paran



( Artimetički operatori u C++ programskom jeziku ) 

Za razliku od aritmetički operatora, operatori dodeljivanja se dele na inkrement i dekrement. Inkrement je uvećanje broja za 1 dok je dekrement smanjivanje broja 1. Operatori dodeljivanja su u programiranju nastali kao velika potreba jer se u programiranju često broj uvećava ili smanjuje za 1. npr. 

A = A + 1              // je isto što i inkrementiranje, piše se postfiksno ovako   A++

B = B – 1              // je isto što i dekrementiranje, piše se postfiksno ovako   B--


Ponekad će te u kodu viđati da inkrementiranje i dekrementiranje pišu i prefiksno ovako:

++A

--B

U jednostavnim zadacima nije ni bitno da li pišete prefiksno ili postfiksno inkrementiranje i dekrementiranje, ali u složenijim procedurama će vam rezultat biti drugačiji. Pogledajte ovaj kod:



#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
       int number = 5;
       cout << "Increment number 5 for 1: " << number++ << endl;
       cout << "Increment number 6 for 1: " << ++number << endl << endl;
       system("PAUSE");
       return 0;
}


Kad ovaj program pokrenemo, verovatno bi ste očekivali rezultat 6 i 7. Međutim dobićete ovo: 

Increment number 5 for 1: 5

Increment number 6 for 1: 7

Press any key to continue . . . 

U čemu je problem? Postfiksno inkrementiranje u našem primeru prvo ispisuje na ekranu promenjivu number zatim vrši inkrementiranje. Zbog toga umesto da nam ispiše 6 na ekranu, on nam prvo ispisuje 5 zatim vrši inkrementiranje. Prefiksno inkrementiranje prvo izvršava inkrementiranje, zatim vrši ispis na ekranu. Na ovakvoj logičkoj greški mnogi projekti su pali. Zato oprez. Ovo važi i za dekrementiranje. 

Šta su izrazi?

Izraz vam je sve što se može izračunati u vrednosti. Npr.

int number = 5 + 8;

Promenjiva number u ovom slučaju sadrži izraz 5 + 8 i automatski vraća vrednost 13 promenjivoj. Tako operatore dodele možemo prikazati izrazima:

A = A + 1       // je isto što i izraz A += 1

B = B – 1        // je isto što i izraz B -= 1


Ali za razliku operatora dodele nismo ograničeni na 1 niti samo na sabiranje i oduzimanje:

A = A + 5       // je isto što i izraz A += 5

B = B – 5        // je isto što i izraz B -= 5
C = C * 5        // je isto što i izraz C *= 5
D = D / 5         // je isto što i izraz D /= 5

E = E % 5       // je isto što i izraz E %= 5 

Šta su relacioni operatori?

Relacioni operatori su operatori koji određuju da li su dva broja jednaka, manja ili veća jedna od drugog:

  • Jednako ==
  • Nije jednako !=
  • Veće >
  • Veće ili jedenako >=
  • Manje <
  • Manje ili jednako <=
Relacioni operatori uvek vraćaju vrednost 1 ili 0 tj. true ili false. Takođe imajte u vidu da u C++ programskom jeziku jednako je == i nikako ne može biti = . To je najčešća greška kod programera,  posebno onih koji prelaze sa Visual Basic-a. U Visual Basic-u relacioni operator za jednako je =. 


( Relacioni operatori u C++ programskom jeziku )

Šta su logički operatori?

Logički opertaori su unarni i binarni operatori bazirani na osnovama logike. Unarni operator je operator koji deluje na jednu promenjivu (NOT) dok binarni na dve (AND i OR):

I (AND)                       // se piše     &&
ILI (OR)                     // se piše      ||
NEGACIJA (NOT)   // se piše      ! 

U matematici se računanje uglavnom vrši sa leve strane prema desnoj bez obzira na operator. Kod računara je to drugačije. Svi operatori imaju svoj prioritet. Npr.

int number = 5 + 3 * 3;          // matematički number = 24

                                                 // računarski number = 14


Kod računara je množenje veći prioritet od sabiranja što znači da računar prvo množi 3*3 zatim 5 sabire sa 9 i tako je rezultat 14. Ukoliko želite da rezultat bude 24 onda morate koristiti zagrade:

int number = (5 + 3) * 3;        //računarski number = 24

Koji su prioriteti operatora pogledajte u tabeli ovde.

Napravite jedan mali program koji će prezentovati operatore. Pokrenite Visual Studio 2015, novi Win32 Console Application i nazovite ga Operators. Importujte iomanip standardnu datoteku zaglavlja u projekat. Ova datoteka sadrži nekoliko funkcija koje koristimo kad nam trebaju različiti formati.  


#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
      
    return 0;
}

Napravićemo dve integer promenjive koje sadrže neke celobrojne vrednosti i njih prvo prikazati korisniku. 

int number1 = 23;
       int number2 = 5;
      
       cout << "number1 = " << number1 << endl;
       cout << "number2 = " << number2 << endl << endl;


Ove promenjive ćemo iskoristiti da prezentujemo svih 5 artimetičkih operatora. 


cout << number1 << " + " << number2 << " = " << number1 + number2 << endl;
       cout << number1 << " - " << number2 << " = " << number1 - number2 << endl;
       cout << number1 << " * " << number2 << " = " << number1 * number2 << endl;
       cout << number1 << " / " << number2 << " = " << number1 / number2 << endl;
       cout << number1 << " % " << number2 << " = " << number1 % number2 << endl << end

Zatim koristimo funkciju boolalpha iz iomanip standarne datoteke. Zahvaljujući ovoj funkciji, umesto 1 za tačno ili 0 za netačno, nama će se na ekranu prikazivati true ili false

cout << boolalpha;    // present 1 and 0 like as true and false

Posle ove linije koda svaki relacioni operator će u programu ispisivati umesto 1 true i umesto 0 false vrednost.

cout << number1 << " > " << number2 << " : " <<  (number1 > number2) << endl;
       cout << number1 << " >= " << number2 << " : " << (number1 >= number2) << endl;
       cout << number1 << " < " << number2 << " : " << (number1 < number2) << endl;
       cout << number1 << " <= " << number2 << " : " <<(number1 <= number2) << endl;
       cout << number1 << " == " << number2 << " : " << (number1 == number2) << endl << endl;
Zatim ćemo isključiti formatiranje, pozivajući drugu funkciju noboolean i prezentovati iste podatke.

cout << number1 << " > " << number2 << " : " <<  (number1 > number2) << endl;
       cout << number1 << " >= " << number2 << " : " << (number1 >= number2) << endl;
       cout << number1 << " < " << number2 << " : " << (number1 < number2) << endl;
       cout << number1 << " <= " << number2 << " : " <<(number1 <= number2) << endl;
       cout << number1 << " == " << number2 << " : " << (number1 == number2) << endl << endl
I na kraju ćemo dodati par linija koda koje će nam prezentovati primer inkrementiranja i dekrtementiranja promenjivi number1 i number2.  


cout << "Increment of 23 = " << ++number1 << endl;
       cout << "Decrement of 5 = " << --number2 << endl << endl;

Da se prozor konzole nebi posle izvršavanja odmah zatvorio i pre nego što vidimo rezultate na ekranu, dodajte sistemsku naredbu za pauziranje dok korisnik ne pritisne bilo koji taster sa tastature. 


system("PAUSE");

Proverite da li ste celi program dobro kodirali bez grešaka; ceo kod treba da izgleda ovako:



#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
       int number1 = 23;
       int number2 = 5;
      
       cout << "number1 = " << number1 << endl;
       cout << "number2 = " << number2 << endl << endl;
       cout << number1 << " + " << number2 << " = " << number1 + number2 << endl;
       cout << number1 << " - " << number2 << " = " << number1 - number2 << endl;
       cout << number1 << " * " << number2 << " = " << number1 * number2 << endl;
       cout << number1 << " / " << number2 << " = " << number1 / number2 << endl;
       cout << number1 << " % " << number2 << " = " << number1 % number2 << endl << endl;
       cout << boolalpha;  // present 1 and 0 like as true and false
       cout << number1 << " > " << number2 << " : " <<  (number1 > number2) << endl;
       cout << number1 << " >= " << number2 << " : " << (number1 >= number2) << endl;
       cout << number1 << " < " << number2 << " : " << (number1 < number2) << endl;
       cout << number1 << " <= " << number2 << " : " <<(number1 <= number2) << endl;
       cout << number1 << " == " << number2 << " : " << (number1 == number2) << endl << endl;
       cout << noboolalpha; // stop present 1 and 0 like as true and false
       cout << number1 << " > " << number2 << " : " << (number1 > number2) << endl;
       cout << number1 << " >= " << number2 << " : " << (number1 >= number2) << endl;
       cout << number1 << " < " << number2 << " : " << (number1 < number2) << endl;
       cout << number1 << " <= " << number2 << " : " << (number1 <= number2) << endl;
       cout << number1 << " == " << number2 << " : " << (number1 == number2) << endl << endl;
       cout << "Increment of 23 = " << ++number1 << endl;
       cout << "Decrement of 5 = " << --number2 << endl << endl;
       system("PAUSE");
       return 0;
}
 
Kad pokrenete program dobićete ovakve rezultate:


number1 = 23

number2 = 5


23 + 5 = 28

23 - 5 = 18

23 * 5 = 115

23 / 5 = 4

23 % 5 = 3


23 > 5 : true

23 >= 5 : true

23 < 5 : false

23 <= 5 : false

23 == 5 : false


23 > 5 : 1

23 >= 5 : 1

23 < 5 : 0

23 <= 5 : 0

23 == 5 : 0


Increment of 23 = 24

Decrement of 5 = 4


Press any key to continue . . .  


Kako to sve izgleda možete pogledati i na video-u:




( C++ Tutorial - 3. Operators )