Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 44

Principi programiranja

as II
Tip podataka float
Osnovno o algoritmima
FLOAT
Realni brojevi u pokretnom zarezu (nazivaju se float ili real)
zauzimaju 4 ili 8 bajtova memorije raunara (za nas manje bitno).
Primjer kod 4-bajtnog (32-bitnog) zapisa:
prvi bit je predznak
0 pozitivan broj
1 negativan
23 bita za zapis osnovice realnog broja 8 bita za zapis eksponenta
npr. 234 10
6
Domen i operacije kod float-a
Iz datog naina zapisa slijede i ogranienja u pogledu
najmanjeg i najveeg broja koji se moe zapisati
pomou float-a, kao i preciznosti koju float moe da
tretira (oigledno, broj t ne moe da se zapie
beskonano precizno).
A=B+C gdje su A, B i C float-i se obavlja na isti nain
kao to je bilo opisano za cijele brojeve, ali sa tom
razlikom to se za privremene promjenljive u
registrima ostavlja prostor i tumae na nain
pogodan za float.
Domen i operacije kod float-a
A=B+C gdje su A i C float, a B cijeli broj se obavlja na
sljedei nain:
kompajler vidi da se sabiraju razliiti tipovi podataka, uoava se
da je za smjetaj float-a potrebno vie prostora;
za operande operacije sabiranja u registrima procesora se
zauzme prostor kao da je u pitanju sabiranje float-a;
to znai da se prilikom presipanja B iz memorije u registre B
konvertuje u float;
ovo se naziva implicitnom konverzijom;
zatim se operacija obavi kao za float;
opisana operacija nema efekta na promjenljivu B u memoriji,
ve samo na privremenu promjenljivu (kojoj se ne moe
pristupiti iz programa) u registrima.
Domen i operacije kod float-a
A=B+C, gdje su B i C float-i, a A cijeli broj:
obavlja se operacija kao kod floata i rezultat (privremena
promjenljiva) smjesti u registre procesora kao float;
sada rezultat treba presuti iz registara procesora u
memorijsku lokaciju za promjenljivu A;
kako je A cijeli broj dolazi do odsjecanja necjelobrojnog
dijela.
Na primjer, A=2.3+4.1 rezultuje u ovom sluaju u A=6.
A=B+C gdje su B i C cijeli, a A float:
Operacija se obavi kao za cijele, a zatim dobijeni rezultat
prebaci u promjenljivu koja je float.
Domen i operacije kod float-a
Na primjer, A=B/C gdje su B i C cijeli brojevi B=4 i
C=3 daje A=1 bez obzira da li je u pitanju float ili
cijeli broj.
Isto to daje operacija na konstantama: A=4/3.
Operacija A=4.0/3.0 daje: A=1.333....338 ako je A
float
decimalni zarez u
programiranju
12 trojki i 13.-ta osmica ako je float sa 4 bajta
memorije (slino i kod 8-bajtog zapisa float-a)
Zbog ogranienja u memoriji operacije sa floatima daju greku koja je
kod 4-bajtnog zapisa reda veliine 1 10
-13
po operaciji. Za mali broj
operacija greka je relativno mala, a recimo za 1 10
12
operacija greka je
reda veliine broj_operacija x greka_za_operaciju=1 10
-1
, odnosno ne
moe se uzeti kao pouzdana ak ni na prvu decimalu.
Operacije kod floata i zapis konstanti
Float se moe primjenljivati u svim relacijama poreenja
sa pravilima kao u matematici.
Dozvoljeni zapisi konstanti tipa float su:
1, -134, 23 kao cijeli broj, ali ako ce cijeli broj pridruuje float-u
A=-134;
1.0, 2.34, -0.35, .34 ak i za cijeli broj se moe koristiti taka da
bi naglasila da je u pitanju float ako je to potrebno; ako broj
pone sa . to podrazumjeva da je nula ispred;
1e6, 1e-12 3.456e-3 ovo je tzv. eksponencijalni zapis gdje eb
oznaava 10
b
; tako je 3.456 10
-3
.


Implicitna i eksplicitna konverzija
Ako promjenljive razliitih tipova podataka uestvuju
u operacijama i raunar jednu promjenljivu prebaci u
vii tip podatka (tip podatka koji zauzima veu
memoriju u registru) da bi izvrio odgovarajuu
operaciju nad usklaenim operandima to se naziva
implicitnom konverzijom.
Korisnik moe da izvri eksplicitnu konverziju (ovo se
preporuuje) kojom se podeava u kakvom e se
obliku pojaviti promjenljive u pojedinim operacijama.
Npr. INT2FLOAT(I)+B i FLOAT2INT(F)+A
konvertuj cijeli broj u float
konvertuj float u cijeli broj
Napomena!!!
Neki programski jezici e odraditi operaciju A=B/C
ako je A float kao da je operacija sa float-ima bez
obzira to je na lijevoj strani.
Ovo obino rade matematiki paket (npr. MATLAB i
MATHEMATICA) koji su namjenjeni za matematika
izraunavanja, a ne klasini vii programski jezici.
Mi emo ovu problematiku tretirati kao kod viih
programskih jezika.
Algoritamski koraci
Mi emo podrazumjevati sljedee algoritamske korake:
Alokaciju promjenljivih (zauzimanje memorijskog prostora za
promjenljive);
Unos podataka;
Sekvencu;
Selekciju;
Ciklus;
Izlaz podataka;
Smatraemo da se dealokacija (brisanje promjenljivih) obavlja
automatski od strane kompajlera);
Program moe da ima izostavljen neki od predmetnih koraka ili vie
pojedinih koraka;
Program moe pozivati potprograme;
Program ima poetak i kraj.
Poetak i kraj
Oznake
Start
End
Pseudo kod
Svaki algoritamski korak emo predstavljati
grafikom oznakom i pseudo kodom koji je
razliit od bilo kog programskog jezika, a opet
veoma slian kodu tzv. paskaloidnih jezika u
koje spadaju svi jezici koji se ue na VR.

Poetak programa neemo predstavljati pseudo
kodom, dok e oznaka za kraj biti END.
Alokacija promjenljivih
Oznaka
A: FLOAT
B: INTEGER
C: CHAR
D: LOGICAL
Strelica stie od starta programa
Dozvoljeni naziv promjenljive praen dvotakom
i nazivom tipa te promjenljive.
Ovaj se korak mora obaviti prije bilo koje druge naredbe.
U okviru pseudo koda se moe navesti na isti nain kao ovdje bez
isprekidanih linija okolo.
UNOS I IZLAZ U PROGRAM
Korisniki ili na neki drugi nain moraju biti zadate
vrijednosti promjenljivih nad kojima se vre
operacije. Ovaj dio se naziva unos podataka. Rezultat
programa se prikazuje ili na neki pogodan nain
koristi. Taj dio se naziva izlazom podataka.
Oznake
N,A
Ulaz
X1,C
Izlaz
Pseudokod
Input N,A

Output X1,C
SEKVENCA
Oznaka Pseudo kod
X=2
X=2 Pojedinana naredba
X=A+B
Y=X*X
Z=Y-2
Niz naredbi.
Strelice ukazuju na redosljed
izvravanja. Ako se izostave
podrazumjeva se odozgo na
dolje u programu.
X=A+B
Y=X*X
Z=Y-2
Selekcija
Oznaka
X>0
Y=X
Da
Ne
Tumaenje
Ako je X vee od nule
postavi vrijednost Y na
vrijednost X. Ako nije
ne ini nita.
Pseudo kod
IF(X>0)
Y=X
ENDIF
Selekcija Apsolutna vrijednost
Primjer raunanja apsolutne vrijednosti broja.
Apsolutna vrijednost (oznaka |X|) je jednaka samom
broju X ako je vei ili jednak od nule, a X ako je
manji od nule.
Matematiki se ovo moe oznaiti kao:


, ako je 0,
| |
, u ostalim slucajevima.
X X
X
X
>

Selekcija - Primjer
START
X:FLOAT
Y:FLOAT
X>0
Y=X
X
Y=-X
Y
END
DA
NE
Pseudo kod
X:FLOAT
Y:FLOAT
INPUT X
IF X>0
Y=X
ELSE
Y= - X
ENDIF
OUTPUT Y
END
Sloena selekcija
2
4
2 4
4 0 ili 1
drugdje
X X
X X
Y
X X
X

>

< s

= =

Sloena selekcija - primjer


Dat je samo dio gdje je
prikazana selekcija, a ostalo
dodajte sami za vjebu.
X>4
2<Xs4
X 0vX1
Bolje je zapisati kao X>2.Xs4, a ak
je dovoljno i X>2 (zato?)
estougaona oznaka se moe koristiti za
sloenije uslove umjesto romba.
DA
NE
NE
DA
DA
NE
Y=X
2
Y=X

Y=4

Y=-X

Sloena selekcija Kompaktniji zapis
X
Y=X
2
Y=X

X>4 2<Xs4
X0vX1
ostalo
Y=4

Y=-X

PSEUDO KOD

IF X>4
Y=X*X
ELSEIF X>2
Y=X
ELSEIF X0vX1
Y=4
ELSE
Y=-X
ENDIF

od studenata e se traiti manje kompaktan
zapis (pogledajte prethodni slajd)
Ciklus
Ciklus ili petlja je dio algoritma koji se ponavlja vie
puta. Postoje:
ciklusi koji se ponavljaju tano odreen broj puta;
ciklusi koji se ponavljaju dok je zadovoljen logiki uslov.
Poto je drugi tip neto optiji samo e on biti
izuavan.
Oznaka
WHILE USLOV=T
naredbe ***
DA
NE
Pseudokod
WHILE USLOV=T
NEKE NAREDBE
ENDWHILE
Ciklus - Primjer
Izvriti sumiranje brojeva od 1 do N.
START
N:INTEGER
S:INTEGER
I:INTEGER
S
END
DA NE
N
S=0
inicijalizacija; mi ne znamo koji su
podaci stajali na memorijskoj lokaciji
koja je dodjeljena promjenljivoj S i
moramo postaviti S na 0 u ovom
sluaju da bi sumiranje vrili od 0
I=0
WHILE I<N
I=I+1
S=S+I
Ciklus Primjer Pseudo kod
I: INTEGER
S:INTEGER
N:INTEGER
INPUT N
S=0
I=0
WHILE I<N
I=I+1
S=S+I
ENDWHILE
OUTPUT S
END
Algoritam se mora testirati!
Testiranje se obavlja tako to se
pretpostavi neka (ili nekoliko)
karakteristinih vrijednosti ulaza
(npr. N=5) i provjeri da li e
rezultat na kraju biti ispravan.

Za domai napraviti program koji
nalazi proizvod N prvih prirodnih
brojeva: 1 2 3... N=N! (ita se N
faktorijel). Zapamtite 0!=1.
Ciklus - Primjer
Prethodni primjer je bio primjer ciklusa koji se
izvrava tano odreen broj puta. Sljedei primjer je
ciklus koji se izvrava dok je zadovoljen uslov.

Izvriti sumiranje prirodnih brojeva koje korisnik
zadaje do trenutka kada se unese negativan broj ili
nula. Negativan broj ili nulu ne treba sabirati i im se
pojavi neka takva vrijednost treba prekinuti dalje
izvravanje.
Ciklus Primjer
START
S:INTEGER
I:INTEGER
S
END
DA
I
S=0
WHILE I>0
S=S+I
Za vjebu ili domai
napiite pseudo kod
za ovaj algoritam.
NE
Selekcije i ciklusi- Napomene
Unutar jednog ciklusa (selekcije) moe se nalaziti
drugi ciklus (selekcija).
Unutranja selekcija se mora zatvoriti istovremeno ili
prije spoljanje. Ne smije nikada da se zatvara
kasnije (ciklusi, odnosno selekcije, se ne mogu sjei).
Moe se matematiki dokazati da se svaki
algoritamski rjeiv problem moe rijeiti korienjem
jedne sekvence, jednog ciklusa i jedne selekcije.
Naravno, unutar svakog od djelova mogu opet
postojati ugnjedeni drugi elementi.
dokazali Bohm i
Jacopini 1966-te godine
Algoritam 1/10
Odrediti vei od dva unesena cijela broja.
Deset jednostavnih algoritama
START
A:INTEGER
B:INTEGER
END
A,B
A>B
B A
DA
NE
PSEUDOKOD
A:INTEGER
B:INTEGER
INPUT A,B
IF A>B
OUTPUT A
ELSE
OUTPUT B
ENDIF
END
Na osnovu ovog programa
napisati algoritam i pseudo
kod za odreivanje manjeg
od dva cijela broja kao i za
algoritam koji tampa kakav
je odnos brojeva. Npr. A je
jednako B ili A je vee od B.
Algoritam 2/10
Napisati program koji rauna stepen broja:
Y=X
N
. N je prirodan broj.
Uoiti da vai: X
0
=1 dalje X
N
=X*X
N-1
.
Deset jednostavnih algoritama
START
X:FLOAT
Y:FLOAT
N:INTEGER
END
X,N
Y=1
WHILE N>0
Y=Y*X
N=N-1
DA
Y
PSEUDO KOD
X:FLOAT
Y:FLOAT
N:INTEGER
INPUT X,N
Y=1
WHILE N>0
Y=Y*X
N=N-1
ENDWHILE
OUTPUT Y
END
Algoritam 2/10
Probajte za domai da realizujete program
koji odreuje stepen X
N
, gdje je N lan skupa
cijelih brojeva.

Pomo. Ako je N>0 algoritam ostaje isti kao u
prethodnom sluaju. Za N<0 moe se koristiti
injenica da je X
-N
=1/X
N
pa se nakon
uitavanja promjenljivih uzme X=1/X i N=-N i
ponovi procedura za prirodne brojeve. U
drugom sluaju treba izbjei mogunost da je
X=0.
Deset jednostavnih algoritama
Algoritam 3/10
Odrediti ostatak pri dijeljenju dva prirodna broja.

Uzmimo primjer: Pri dijeljenju 9 sa 4 ostatak je 1 jer je
2x4+1=9. Olakavajua okolnost je to to raunar
kada dijeli cijele brojeve daje cijeli broj ako korisnik
ne zatrai konverziju podataka.
Deset jednostavnih algoritama
START
N,M:INTEGER
P,O:INTEGER
M,N
P=M/N
O=M-P*N
O
END
PSEUDO KOD
N,M,P,O:INTEGER
INPUT M,N
P=M/N
O=M-P*N
OUTPUT O
END
Algoritam 3/10

Za vjebu sami napiite program koji u sluaju da su
uneseni brojevi manji od nule tampa obavjetenje
da ne moe da odredi ostatak dijeljenja.

Takoe pokuajte da razmislite o varijanti da vam
ostatak dijeljenja sa negativnim brojem zaista treba.
Kako biste modifikovali algoritam?
Deset jednostavnih algoritama
Algoritam 4/10
Unesen je prirodan broj. Odrediti sumu njegovih cifara.

Posmatrajmo broj 324. Suma njegovih cifara je 3+2+4=9.
Najjednostavniji nain da se ovo odredi je da se kreira
jedna promjenljiva koja e da uva podatke o sumi cifara
broja i da se inicijalizuje na nulu (S=0). Zatim se odredi
ostatak dijeljenja broja sa 10 (to je broj 4, S=4) i podjeli
broj sa 10 (dobija se rezulatat 32). 32 se zatim podjeli sa
10 (dobija se 3) i ostatak je 2 koje se pridoda 4 iz
prethodnog sluaja (S=6). Dobijeno 3 se podijeli sa 10
rezultat je nula i ostatak 3 se pridoda dosadanjoj sumi
(S=9). Kada se dobije rezultat 0 moe se obustaviti dalja
procedura.
Deset jednostavnih algoritama
Algoritam 4/10
Deset jednostavnih algoritama
START
N:INTEGER
S:INTEGER
END
N
S=0
WHILE N>0
S=S+N-(N/10)*10
DA
S
N=N/10
NE
!!!
!!!Obratite panju
na ovaj korak!!!
PSEUDO KOD
N,S:INTEGER
INPUT N
S=0
WHILE N>0
S=S+N-(N/10)*10
N=N/10
ENDWHILE
OUTPUT S
END
Algoritam 4/10
Za vjebu modifikovati predmetni algoritam da
pronalazi sumu cifara i negativnih brojeva.

Mogua modifikacija na poetku algoritma:
Deset jednostavnih algoritama
N<0
N=-N
DA
NE
Algoritam 5/10
Procesori obino barataju sa 4 osnovne matematike radnje
i sve ostale nastoje da svedu na osnovne matematike
operacije.

Za raunanje funkcije f(x) se koristi razvoj u Taylor-ov red:

f(x)=f(0)+f(0)x+f(0)x
2
/2!+f(0)x
3
/3!+...+f
(n)
(0)x
n
/n!+...
Deset jednostavnih algoritama
vrijednost funkcije f(x) u taki x=0
izvodi funkcije f(x) u taki x=0
faktorijel n!=1 2 3 ... n
raunanje se prekida kada lan f
(n)
(0)x
n
/n!
postane manji od neke zadate vrijednosti
Algoritam 5/10
Odrediti vrijednost e
x
=exp(x), za zadato x, sumirajui
Taylor-ov red dok ne dobijemo lan manji po
apsolutnoj vrijednosti od 0.0001.

e se naziva Ojlerovim brojem koji priblino iznosi
e~2.7182818... .
Svi izvodi funkcije exp(x) su jednaki exp(x).
Kako je exp(0)=1 Taylor-ov red se onda svodi na:
f(x)=1+x+x
2
/2!+x
3
/3!+...+x
n
/n!+...
Deset jednostavnih algoritama
Algoritam 5/10
Deset jednostavnih algoritama
START
X,Y,T:FLOAT
N:INTEGER
X
Y
END
Y=1
N=1
T=1
WHILE T>0.0001vT<-0.0001
DA
T=T*X/N
Y=Y+T
N=N+1
!!! Interesantan korak.
Protumaiti ga!
NE
Algoritam 5/10
Deset jednostavnih algoritama
Pseudo kod
X,Y,T:FLOAT
N:INTEGER
INPUT X
Y=1
N=1
T=1
WHILE T>0.0001vT<-0.0001
T=T*X/N
Y=Y+T
N=N+1
ENDWHILE
OUTPUT Y
END
Algoritam 5/10
Pokuajte sami za da odradite funkciju sin(x) iji je razvoj u
Taylorov red:
f(x)=x-x
3
/3!+x
5
/5!-...+(-1)
n
x
2n+1
/(2n+1)!+...
Uradite sami sljedei zadatak. Pokazuje se da sin(x) raunat
prethodnom formulom je efikasan za x u granicama od -t/4 do
t/4. Za x van ovih granica (pretpostavlja se da je x u
granicama od -t/2 do t/2) efikasnije je koristiti relaciju
sin(x)=cos(t/2-x). Razvoj u Taylorov red funkcije kosinus je:
f(x)=1-x
2
/2!+x
4
/4!-...+(-1)
n
x
2n
/2n!+...
Napisati program koji kombinuje ova dva reda u zavisnosti od
uneene vrijednosti za x. Napomena: t ~3.1415926...

Deset jednostavnih algoritama
Algoritam 6/10
Napisati program koji rauna korjene kvadratne
jednaine u zavisnosti od unesenih vrijednosti a, b, c:
ax
2
+bx+c=0. Prepostaviti da se trae rjeenja u
skupu realnih brojeva.
Za a=0 i b
2
-4ac>0 jednaina ima dva rjeenje:



Za a=0 i b
2
-4ac=0 jednaina ima jedno rjeenje: x=-
b/2a.
Deset jednostavnih algoritama
2
1
4
2
b b ac
x
a
+
=
2
2
4
2
b b ac
x
a

=
Algoritam 6/10
Za a=0 i b
2
-4ac<0 jednaina nema rjeenje u skupu
realnih brojeva.
Za a=0 i b=0 jednaina ima jedno rjeenje: x=-c/b.
Za a=0 i b=0 i c=0 sistem je nemogu.
Za a=0 i b=0 i c=0 sistem je trivijalan (beskonano
mnogo rjeenja).

Rjeavanje zahtjeva vei broj selekcija.


Deset jednostavnih algoritama
Algoritam 6/10
DA
NE
Deset jednostavnih algoritama
START
A,B,C:FLOAT
X1,X2,X:INTEGER
A,B,C
B*B-4*A*C>0.A=0
X1=(-B+KvKor(B*B-4*A*C))/(2*A)

X1=(-B-KvKor(B*B-4*A*C))/(2*A)

X1,X2
B*B-4*A*C0.A=0
X=-B/(2*A)

X
DA
NE
B*B-4*A*C<0
Nema rjeenja
DA
NE
A0.B=0
X=-C/B

DA
X
B0.C=0
Nema rjeenja
NE
Trivijalno
DA
NE
Algoritam 6/10
Deset jednostavnih algoritama
END
PSUEDO KOD
A,B,C:FLOAT
X,X1,X2:FLOAT
INPUT A,B,C
IF B*B-4*A*C>0.A=0
X1=(-B+KvKor(B*B-4*A*C))/(2*A)
X2=(-B-KvKor(B*B-4*A*C))/(2*A)
OUTPUT X1,X2
ELSEIF B*B-4*A*C0.A=0
X=-B/(2*A)
OUTPUT X
ELSEIF B*B-4*A*C<0
OUTPUT NEMA RJEENJA
ELSEIF A0.B=0
X=-C/B
OUTPUT X
ELSEIF B0.C=0
OUTPUT NEMA RJEENJA
ELSE
OUTPUT TRIVIJALNO
ENDIF
END
Algoritam 6/10
Na narednom asu emo se upoznati sa nainom
izraunavanja kvadratnog korjena.

Oblik naredbe OUTPUT TEKST oznaava tampanje
niza karaktera stringa.
Deset jednostavnih algoritama

You might also like