Professional Documents
Culture Documents
poprimiti.
-32768 i 32767
• Na primjer, neka je stanje u 16-bitnom registru:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
je 65535=216-1.
Cjelobrojni tip podataka(3/3)
#include <stdio.h>
int main()
{
int a;
unsigned int b;
a=-1;
b=a;
printf(“\n a=%d b=%u”,a,b);
return 0;
}
• Izvođenje ovog programa daje rezultat:
a = -1 b = 65535 (uz pretpostavku da tip int u konkretnoj implementaciji C-a
zauzima 16 bitova)
34542000=3.4542·107
0.000000101=1.01·2-7
1010.11=1.01011 ·23
• Ovakav zapis brojeva nazivamo normalizirani zapis.
Realni tip podataka(2/3)
Na prvom mjestu
0.000000101=1.01·2 -7
je uvijek jedinica.
1010.11=1.01011 ·23
• Kod gore prikazanog načina zapisa binarnih brojeva, na prvom mjestu je
uvijek jedinica.
float
precizan prikaz
deklaracije varijabli
double realnog tipa
long
- float a;
- double b;
- long double c;
IEEE standard zapisa realnih brojeva
(IEEE-Institute of Electrical and Electronics Engineers)
P K M
31 30 23 22 0
- 1 negativan broj
- 0 pozitivan broj
- binarni eksponent+127
- raspon binarnog eksponenta je -126 - 127
- raspon karakteristike je 0 - 255
• Izračunajmo karakteristiku:
K= 2 + 127=129
129(10) =10000001(2)
Kada su svi bitovi karakteristike i svi bitovi mantise jednaki nuli, onda se
radi o prikazu realnog broja 0.
• Gornji dogovor ima za posljedicu da postoje “pozitivna nula” i “negativna nula”, pri
čemu su oba prikaza ravnopravna. Dogovor je da se pri usporedbi ta dva prikaza
smatraju jednakim.
predznak
karakteristika mantisa
Zapis +, - i “not a number”
0 11111111 00000000000000000000000
• Svi bitovi mantise su 0, karakteristika ima vrijednost 255, a bit predznaka je 0.
Prikaz “broja” - je:
1 11111111 00000000000000000000000
• Ako karakteristika ima vrijednost 255, te postoje bitovi mantise koji nisu 0, onda se
zapis klasificira kao
not a number (nije broj)
• Ovakav zapis se može dobiti zbog toga što je prilikom izvođenja neke operacije
došlo do greške.
0 11111111 10000000000000000000001
• Binarni operatori:
+ sabiranje
- oduzimanje
* množenje
/ dijeljenje
% modulo
2*x+5
(a+b)/2
• Brojevi 2 i 5 u gornjim izrazima su konstante.
• Znakovi {*, +, /} predstavljaju operatore
• Varijable x, a i b predstavlaju varijable,odnosno, operande.
• Pošto kod početnika uperator pridruživanja unosi određene dileme jer ih podsjeća na
značenje znaka = u matematici, na ovom mjestu bi ta zabuna trebala da se ukloni.
• Značenje naredbe
i=i+1;
je:
……. …….
i 8 9
….. …..
Primjer (operator modulo)
#include <stdio.h>
int main()
{
int a,b,o;
a=7;
b=3;
o=a%b;
printf(“\n Ostatak dijeljenja %d i %d je %d.“,a,b,o);
return 0;
}
Izvođenjem programa dobit će se:
Ostatak dijeljenja 7 i 3 je 1.
Prioritet operatora
x=a/b+c*d
• Na primjer, u izrazu:
s=(x*(a-b)+1)/2
• Unarni opertori.
x=x+1; x++;
x=x-1; x--;
• Ako operator stoji ispred varijable, onda se vrijednost varijable prvo promijeni a
zatim se promijenjena vrijednost koristi u izrazu.
• Ako operator stoji iza varijable, onda se u izrazu uzima trenutna vrijednost
varijable, a tek nakon izračunavanja izraya se promijeni vrijednost varijable.
y=++x;
y=x++;
varijabli y će se pridružiti vrijednost varijable x (a to je 100), a zatim će se povećati za
1 vrijednost varijable x.
(2*x+y)++
5.672++
Kontrola toka programa
………….
• Kod proceduralnih programskih jezika naredbe se
izvršavaju sekvencijalno, a to znači redoslijedom
kojim su napisane. Naredba n
Naredba +2
…………..
Naredba za jednostruki izbor
if (uvjet)
{ NE
blok naredbi; uvjet
}
DA
• Uvjet može biti bilo koji aritmetički ili logički izraz.
• Blok naredbi može imati jednu ili više naredbi. blok narebi
• Uvjet je istinit ako je rezultat izraza različit od nule.
• Ako je uvjet istinit, blok naredbi se izvršava.
• U suprotnom, naredbe koje se nalaze u bloku se preskaču.
………….
Primjer(naredba za jednostruki izbor)
#include <stdio.h>
int main()
{
int a,b;
printf(“\n Unesite prvi cijeli broj”);
scanf(“%d”,&a);
printf(“\n Unesite drugi cijeli broj”);
scanf(“%d”,&b);
if (a==b)
{
printf(“\n Unijeli ste iste brojeve”);
}
}
………….
• Opći oblik naredbe za jednostruki izbor je:
if (uvjet) DA NE
uvjet
{
blok naredbi1;
}
blok narebi 1 blok narebi 2
else
{
blok naredbi2;
}
………….
• Uvjet može biti bilo koji aritmetički ili logički izraz.
• Ako je uvjet ispunjen (vrijednost izraza je različita od 0, izvršava se blok naredbi1 i
preskače blok naredbi2.
• U suprotnom(uvjet nije ispunjen, tj. izraz ima vrijednost 0), izvršava se blok narebi2,
a preskače se blok naredbi1.
Primjer (naredba za dvostruki izbor)
#include <stdio.h>
int main()
{
int br;
printf(“\n Unesite cijeli broj”);
scanf(“%d”,&br);
if (br%2)
{
printf(“\n Unijeli ste neparan broj”);
}
else
{
printf(“\n Unijeli ste paran broj”);
}
return 0;
}
Višestruki izbor
(if-else if-else)
if (uvjet 1)
{
• Ovakav oblik naredbi if-else if-else
blok naredbi 1;
} omogućava uzastopno ispitivanje niza
else if (uvjet 2) uvjeta.
{
blok naredbi 2; • Ako je bilo koji uvjet istinit (različit od nule)
} izvršava se blok naredbi pridružen tom
……………..
else if (uvjet n-1) uvjetu, dok se svi ostali blokovi naredbi
{ preskaču
blok naredbi n-1;
} • Broj uvjeta nije ograničen
else
• Uvjet može biti logički ili aritmetički izraz
{
blok naredbi n;
}
Primjer (program za rješavanje kvadratne jednadžbe)
int main()
{
float a, b, c, x1, x2, x1Re, x2Re, x1Im, x2Im, t, D;
else if (D == 0)
{
x1 = -b/(2*a);
printf (”\n Rjesenja su: x1=x2=%f\n", x1);
}
else Blok naredbi koji će
{ se izvršiti ako je
diskriminanta D
t = sqrt(-D);
jednaka nuli
x1Re = -b/(2*a);
x2Re = x1Re;
x1Im = t/(2*a);
x2Im = -x1Im;
printf (”\n Rjesenja su: x1 = (%f,%f)\n", x1Re, x1Im);
printf (” x2 = (%f,%f)\n", x2Re, x2Im);
Blok naredbi koji će
}
se izvršiti ako je
return 0; diskriminanta D
} negativna
Programska petlja for
• izraz1 pridružuje kontrolnoj varijabli petlje početnu vrijednost. Ovaj izraz se izvršava
samo jednom. Ako trebamo všše naredbi u izrazu, onda ih odvajamo zarezom
• izraz3 definira na koji način se mijenja kontrolna varijabla. Izraz se izvršava nakon
svakog prolaska kroz petlju. Ako trebamo više naredbi u izrazu, odvajamo ih zarezom.
Primjer
• Ispis na monitoru niza brojeva od 1 do 10
#include <stdio.h>
int main()
{
int broj;
for(broj=1; broj<=10; broj++)
printf(“%d”, broj);
return 0;
}
• Iza naredbe for nema oznake početka bloka naredbi, jer se blok naredbi u ovom
primjeru sastoji od samo jedne naredbe, pa tada oznake početka i kraja bloka
naredbi nisu potrebne.