Uvod u programiranje

Maja Čić


Detalji izraza

Izraz je dio koda programa koji predstavlja ili računa neku vrijednost. Izraz može biti konstanta, varijabla, poziv funkcije ili više ovakvih elemenata kombiniranih operatorima (npr. + ili >). Vrijednost izraza može se pridati varijabli, koristiti kao ulazna vrijednost izlaznog potprograma ili pomoću operatora povezati s drugim vrijednostima u složeniji izraz.

Glavni tvorbeni dijelovi izraza su literali (kao npr. 674, 3.14, true ili 'x'), varijable i pozivi funkcija (funkcija je potprogram koji vraća vrijednost). Konstante, varijable i pozivi funkcija su jednostavni izrazi. Složeniji izrazi se tvore korištenjem operatora za kombiniranje jednostavnih izraza. Kad u jednom izrazu postoji više operatora, javlja se problem prioriteta, koji određuje kako će se operatori grupirati pri procjenjivanju, tj. koji će operator imati prednost pri izvođenju. Npr. u izrazu a + b * c, prvo se izračunava b * c, a zatim se a zbraja s rezultatom. Kaže se da množenje ima prioritet u odnosu na zbrajanje. Ukoliko se želi zaobići zadane prioritete potrebno je koristiti zagrade, (a + b) * c  će prvo zbrojiti, a zatim pomnožiti vrijednosti.


Aritmetički operatori

Aritmetički operatori uključuju zbrajanje (+), oduzimanje (-), množenje (*) i dijeljenje (/). Mogu se koristiti na vrijednostima bilo koje numeričke vrste: byte, short, int, long, float, ili double. Kad računalo izvršava jednu od ovih operacija, vrijednosti koje uzima u račun moraju biti iste vrste. Ukoliko se vrste varijabli u računu razlikuju, računalo će jednu od varijabli prevesti u drugu vrstu. Npr. pri računanju 37.4 + 10 računalo prevodi cjelobrojnu vrijednost 10 u realnu vrijednost 10.0 i zatim izračunava 37.4 + 10.0. Iako su 10 i 10.0 naizgled iste vrijednosti, računalo ih interno promatra sasvim različito. Najčešće računalo ovu pretvorbu obavlja automatski. Rezultat operacije (nakon što je jedna od varijabli prevedena u drugu vrstu) je iste vrste kao i varijable na kojima je operacija izvršena. Rezultat množenja dviju cjelobrojnih varijabli je cjelobrojna varijabla, rezultat množenja double varijabli je opet double. Oprez je potreban kod operatora dijeljenja. Rezultat dijeljenja dviju cjelobrojnih varijabli je cijeli broj, a eventualni ostatak kod dijeljenja se odbacuje, npr. 7 / 2 je 3, a ne 3.5, 1 / N je 0 za svaki cijeli broj N veći od 1 (za dobiti točno rješenje ovog izraza potrebno je pretvoriti jednu varijablu u real: 1.0/N). Java ima i operator koji računa ostatak cjelobrojnog dijeljenja. Taj operator označava se znakom %. Primjeri ostatka cjelobrojnog dijeljenja: 7 % 2=1, 34577 / 100 = 77, 50 / 8 = 2. Najčešća primjena ovog operatora je pri ispitivanju da li je broj N paran ili neparan: ako je N % 2 = 0 broj N je paran, a ako je 1 broj N je neparan. Druga česta primjena je dijeljivost brojeva: broj N je dijeljiv s M ako je N % M = 0.

Posljednji važni operator je unarni minus, koji daje negativnu vrijednost broja. Tako, na primjer, operacije -x i (-1)*x daju jednake rezultate.


Inkrement i dekrement

Dodavanje i oduzimanje 1 postojećoj vrijednosti neke varijable vrlo su česti postupci u programiranju. Uobičajeni zapis tih operacija je:

	brojac  =  brojac + 1;
	brojac  =  brojac - 1;

Postupak izvođenja ovih izraza je da se uzme stara vrijednost varijable, izračuna se koliko iznosi ta vrijednost uvećana (ili umanjena) za 1 i rezultat se sprema kao nova vrijednost varijable. Drugi način zapisivanja ovih postupaka je:

	brojac++;
	brojac--;

++ i -- se nazivaju operatori inkrementa (++) i dekrementa (--) i mogu se primijeniti na svim vrstama numeričkih varijabli i na char varijablama.


Relacijski operatori

Java podržava logičke (boolean) varijable i izraze za opis uvjeta koji mogu biti true ili false. Jedan od načina stvaranja logičkog izraza je usporedba dviju vrijednosti pomoću relacijskog operatora. Relacijski operatori ispituju da li su dvije vrijednosti jednake, jedna veća od druge... Relacijski operatori u Javi su:

	A == B       Da li je A "jednak" B?
	A != B       Da li je A "različit od" B?
	A < B        Da li je A "manji od" B?
	A > B        Da li je A "veći od" B?
	A <= B       Da li je A "manji ili jednak" B?
	A >= B       Da li je A "veći li jednak" B?

Ovi operatori mogu se koristiti za uspoređivanje bilo koje vrste numeričkih vrijednosti i vrijednosti vrste char. Za znakove, operatori < i > su određeni prema odgovarajućim Unicode vrijednostima znakova, pri čemu treba voditi računa o tome da to nije jednako abecednom redoslijedu. Operatori == i != mogu biti korišteni za uspoređivanje logičkih vrijednosti kao u ovom primjeru:

	boolean istiZnak;
	istiZnak = ((x > 0) == (y > 0));

Logički operatori

U govornom jeziku korištenjem riječi "i", "ili" i "ne" se mogu izgraditi složeni uvjeti. Iste takve riječi postoje i u Javi i zovu se logički operatori. Namjena im je, kao i u govornom jeziku, stvaranje manje ili više složenih uvjeta.

Logički operator "i" se zapisuje kao && i služi slaganju dviju logičkih vrijednosti.

Tablica istine za logički operator "i":
 A    B   A & B
0 0 0
0 1 0
1 0 0
1 1 1

Logički operator "ili" se zapisuje kao ||, s tablicom istine:
 A    B   A || B
0 0 0
0 1 1
1 0 1
1 1 1

Logički operator "ne" je unarni operator, označava se kao: ! i zapisuje se ispred elementa i mijenja njegovu logičku vrijednost iz true u false ili iz false u true.


Uvjetni operator

Uvjetni operator je ternarni operator, tj. ima tri elementa. Piše se u obliku:

	logički izraz ? izraz-1 : izraz -2

Računalo ispituje vrijednost logičkog izraza i ako je vrijednost true izvršava izraz -1, a ako je false izvršava izraz-2. Izraz u primjeru pridjeljuje vrijednost N / 2 varijabli broj ako N paran broj, a vrijednost ( 3 * N + 1 ) ako je N neparan broj:

	broj = (N % 2 == 0) ? (N/2) : (3*N+1);



Operator pridjeljivanja

Operator pridjeljivanja = pridjeljuje varijabli s lijeve strane vrijednost izraza s desne strane operatora. Računalo po potrebi mijenja vrijednost izraza da bi odgovarala vrsti varijable u koju se upisuje. Ovo prevođenje se obavlja isključivo kad može biti obavljeno bez promjene značenja vrijednosti. Primjeri pridjeljivanja:

	int a;
	double x;
	short b;
	a = 17;
	x = A;	// a se prevodi u double
	b = A;	// nije dozvoljeno, nema automatskog prevođenja iz int u short
		// jer neke int vrijednosti nadilaze opseg short varijabli

Kad se želi obaviti prevođenje tipova varijabli koje se ne može obaviti automatski, koristi se izričita pretvorba tipova (type casting) tako da se željena vrsta varijable upisuje u zagrade ispred vrijednosti koju se želi pretvoriti. Na primjer:

	double a;
	int b;
	a = 17.7;
	b = (int)a;  // a se izričito prevodi u integer. b poprima vrijednost 17.


[ prethodna stranica | Početak | sljedeća stranica ]