You are on page 1of 48

ZADACI ZA VJEBE IZ PREDMETA

RAUNARI I PROGRAMIRANJE

PRIMJER: 1
Napisati program u fortranu za izracunavanje povrsine trougla primjenom Heronovog obrasca
sa proizvoljnim unosom duina stranica trougla.
Rjeenje:
PRIMJER: 2
Uitati niz A od 8 elemenata, nai sumu lanova niza A.
Sumu niza A odtampati u glavnom programu.
Rjeenje:
! suma elemenata niza A
dimension A(8)
print*,'program za sabiranje elemenata miza A'
print*,'Unesite 8 elemenata niza A'
! unosenje elemenata niza A
do 1 I=1,8
read*,A(I)
1 continue
! Operacija sa elementima niza A
S=0
do 2 I=1,8
S=S+A(I)
2 continue
! stampanje sume elemenata niza A
print*,'Suma je=',S
! zaustavljanje programa
stop
end
PRIMJER: 3
Uitati niz B od 6 elemenata, nai proizvod lanova niza B.
Proizvod niza B odtampati u glavnom programu.
Rjeenje:
! Proizvod elemenata niza B
dimension B(6)
print*,'Program za izracunavanje proizvoda elemenata niza B'
print*,'Unesite 6 elemanata niza B'
! Unosenje elemenata niza B
do 1 I=1,6
read*,B(I)
1 continue
! Operacija sa elementima niza B
P=1
do 2 I=1,6
P=P*B(I)
2 continue
! Stampanje proizvoda niza B
print*,'proizvod je=',P
! zaustavljanje programa
stop
end
2

PRIMJER: 4
Uitati niz A od 10 elemenata, nai proizvod i sumu niza.
Proizvod i sumu niza A odtampati u glavnom programu.
Rjeenje:
! Proizvod i suma elemenata niza A
dimension A(10)
print*,'Program za izracunavanje proizvoda i sume elemenata niza A'
print*,'Unesite 10 elemanata niza A'
! Unosenje elemenata niza A
do 1 I=1,10
read*,A(I)
1 continue
! Operacije sa elementima niza A
P=1
S=0
do 2 I=1,10
S=S+A(I)
P=P*A(I)
2 continue
! Stampanje proizvoda i sume niza A
print*,'proizvod je=',P,'Suma je=',S
! zaustavljanje programa
stop
end
PRIMJER: 5
Uitati niz A od 20 elemenata, sortirati ih u rastucem redoslijedu te odstampati u glavnom
programu.
Rjeenje:
! niz od 20 elemenata u rastujucem redoslijedu
dimension A(20)
print*,'program za sortiranje ele. niza A u rastujucem redoslijedu'
print*,'unesite 20 elemenata niza A'
do 10 i=1,20
read*,A(i)
10 continue
! sortiranje elemenata
do 20 i=1,19
do 15 j=i+1,20
if(A(i).lt.A(j)) go to 15
c=A(i)
A(i)=A(j)
A(j)=c
15 continue
20 continue
print*,'Sortirani elementi niza A su:'
do 30 j=1,20
print*,A(j)
30 continue
stop
end
3

PRIMJER: 6
Program ucitava N cijelih brojeva i nalazi: najvecu,najmanju i prosjecnu vrijednost.
Rjeenje:
! Program ucitava N cijelih brojeva i nalazi
! najvecu,najmanju i prosjecnu vrijednost
! Deklaracija promjenjljivih
INTEGER::N,I
REAL::MINIM,MAXIM,SUMA,PROSVR,BROJ
! Ucitavanje broja N
print*,'Koliko ima ukupno brojeva (N>o):'
read*,N
! Ucitavanje prvog broja
print*,' Unesite prvi broj:'
read*,BROJ
MINIM=BROJ
MAXIM=BROJ
SUMA=BROJ
! Ucitavanje ostalih brojeva
do 10 I=2,N (ako umjesto broja 2 stavimo broj 1 u DO petlji vidjeti izlaz!!!)
print*,'I ostali brojevi:'
read*,BROJ
SUMA=SUMA+BROJ
IF (BROJ.LT.MINIM)THEN
MINIM=BROJ
ELSE IF (BROJ.GT.MAXIM)THEN
MAXIM=BROJ
END IF
10 continue
! Racunanje prosjecne vrijednosti i stampanje rezultata
PROSVR=SUMA/N
print*,'Minimalna vrijednost je :',MINIM
print*,'Maximalna vrijednost je :',MAXIM
print*,'Prosjecna vrijednost je :',PROSVR
STOP
END

PRIMJER: 7
Progrm nalazi najveci zajednicki djelilac dva zadana prirodna broja.
Rjeenje:
! Progrm nalazi najveci zajednicki djelilac
! dva zadana prirodna broja
! Deklaracija promjenjljivih
INTEGER::I,J,N,R,POM
! Ucitavanje podataka
print*,'Unesite dva cijela prirodna broja:'
read*,I,J
! Racunanje najveceg zajednickog djelilca NZD
print*,'NZD brojeva ',I,' i',J,' je:'
IF (I.NE.MIN(I,J)) THEN
POM=I
I=J
J=POM
END IF
R=MOD(I,J)
DO WHILE (R.NE.0)
I=J
J=R
R=MOD(I,J)
END DO
print*,J
STOP
END
PRIMJER: 8
Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata na neparnim
mjestima. Sumu i proizvod odtampati u glavnom programu.
Rjeenje:
! Suma parnih i proizvod neparnih elemenata niza A

dimension A(10)
print*, 'Program za sabiranje parnih i mnoenje neparnih elemenata niza A'
print*, 'Unesite 10 elemenata niza A'
! unosenje elemenata niza A

do 1 I=1,10
read*, A(I)
1 continue
! operacija sa elementima niza A

P=1
S=0
do 2 I=1,5
S=S+A(2*I)
P=P*A(2*I-1)
2 continue
! stampanje sume i proizvoda niza A

print*, 'Suma je= ' ,S, 'Proizvod je= ' ,P


! zaustavljanje programa

stop
end

PRIMJER: 9
Napisati program u Fortranu koji izraunava prosjenu vrijednost uneenog niza od N
elemenata ili npr. izraunavanje prosjene vrijednosti za nekoliko unijetih ocjena.
Rjeenje:
! Program srednje ocjene iz programiranja i racunara
! Ucitavamo 6 ocjena i trazimo srednju vrijednost
real::n1,n2,n3,n4,n5,n6, SRV=0.0, Suma=0.0
integer::n=6,CB
print*,'unesite ocjene iz predmeta Rac i Prog'
read*,n1,n2,n3,n4,n5,n6
Suma=n1+n2+n3+n4+n5+n6
SRV=Suma/n
CB=Suma/n
print*,' Suma elemenata je:',Suma
print*,' Srednja vrijednost je:',SRV
print*,' Srednja vrijednost cijeli broj je:',CB
end program
PRIMJER: 10
Napisati program koji za zadane vrijednosti duzine predjenog puta, vremena za koje je taj put
predjen i ukupno potrosenog goriva racuna i stampa prosjecnu brzinu automobila i prosjecnu
potrosnju goriva.
Rjeenje:
! program za racunanje prosjecne potrosnje goriva
! dekleracija varijabli
real:: brzina,vrijeme,duzinaputa,ukpotr,prpotr
! ucitavanje podataka
print*,' predjeno rastojanje u (km)'
read*,duzinaputa
print*,' vrijeme trajanja voznje u (h)'
read*, vrijeme
print*,' ukupno potroseno goriva u (l)'
read*, ukpotr
! racunanje i ispisivanje rezultata
brzina=duzinaputa/vrijeme
prpotr=100*ukpotr/duzinaputa
print*,' prosjecna brzina je:',brzina,' (km/h)'
print*,' prosjecna potrosnja goriva je:',prpotr,' (l/100km)'
stop
end

PRIMJER: 11
Izracunati ukupnu i neto zaradu nekog radnika ako je zadana cijena po jednom satu i ukupan
broj sati rada. Na dio zarade koji prelazi 900 km, placa se 10% poreza na dohodak.
Rjeenje:
! Program racuna ukupnu i neto zaradu nekog radnika ako je zadano
! cijena po jednom satu rada i ukupan broj sati na dio zarade koji prelazi
! 900 km placa se 10% porez na dohodak
! deklaracija varijabli
real:: netzar,ukzar,brsati,zarsat,grzar,porez,odbici
parameter (grzar=900.0, porez=10.0)
! ucitavanje podataka
print*,' ukupan broj sati:'
read*,brsati
print*,' zarada po satu:'
read*,zarsat
! racunanje rezultata
ukzar=brsati*zarsat
if (ukzar.lt.900.0) goto 30
odbici=ukzar*porez/100
netzar=ukzar-odbici
! stampanje rezultata
30 print*,'ukupna zarada:',ukzar
print*,'za isplatu:',netzar
stop
end
PRIMJER: 12: Demonstracija rada do petlje
Napisati program koji pretvara temperaturu izracunatu u stepenima Farenhajta (Qf) u stepene
celizijuse (Qc) koristei obrazac. c * f 32 .
5
9

Za temperature od 30 do 60 F, sa korakom 2F.


Rjeenje:
PRVI SLUCAJ
! pretvaranje temperature u stepenima fahrenhajta
! u stepene celizijusa po zadatom obrascu
! TCELZ=(5.0/9.0)*(TFRNHT-32)
! stampanje odgovarajuce tabele
! dekleracija promjenjljivih i definisanje konstanti
real:: TCELZ,TFRNHT,TFPOC,TFKRAJ,TKORAK
parameter (TFPOC=30.,TFKRAJ=60.,TKORAK=2.)
! stampanje zaglavlja tabele
print 10
10 format(4x,'t(F)
t(C)'/4x,'------+------+')
TFRNHT=TFPOC
! pretvaranje temperature u stepene celizijusa i stampanje
20 TCELZ=(5.0/9.0)*(TFRNHT-32)
print 30,INT(TFRNHT),TCELZ
30 format(5x,I3,F8.2)
TFRNHT=TFRNHT+TKORAK
if(TFRNHT.LE.TFKRAJ) go to 20
stop
end
7

Izlaz na ekran
DRUGI SLUCAJ SA DO PETLJOM
! Pretvaranje temperature sa do petljom
! deklaracija varijabli
real:: TECELZ,TFRNHT,TFPOC,TFKRAJ,TFKORAK
parameter (TFPOC=30.,TFKRAJ=60.,TKORAK=2)
print 10
10 format (4x,'t(F) t(C)'/4x,'-----+-----+')
do 1 TFRNHT=TFPOC,TFKRAJ,TKORAK
TCELZ=(5.0/9.0)*(TFRNHT-32.0)
print 20, INT (TFRNHT),TCELZ
1 continue
20 format (5x,I3,F8.2)
stop
end
Demonstracija rada do petlje
! demonstracija do petlje
integer:: brojac,poc,kraj,korak
parameter (poc=1,kraj=10,korak=1)
N=0
do 10 brojac=poc,kraj,korak
N=N+1
10 continue
print 20, N
20 format (5x,'petlja izvrsena',I3,'puta')
stop
end

PRIMJER: 13: Primjer za pokazivanje rada IF THEN I ELSE


Napisati program u fortranu koji za unesene vrijednosti temperature koje su zadate u intervalu
od:
0 do 300C ispisuje sljedee: T < 0 - smrzavanje; T < 10 hladno; T < 20 umjereno;T < 30 toplo;T>30vrlo toplo.

Rjeenje:
! program za pokazivanje if then i else if uslova
10 print*,'unesi temperaturu u C'
read*,C
IF(C.le.0) then
print*,'smrzavanje'
else
IF(C.le.10) then
print*,'hladno'
else
IF(C.le.20) then
print*,'umjereno'
else
IF(C.le.30) then
print*,'toplo'
else
print*,'vrlo toplo'
end if
end if
end if
end if
print*,'zeliteli ponoviti unos unesite odg broj?'
print*,' Da unesite 1'
print*,' Ne unesite 0'
read(*,*) ponovo
if (ponovo.eq.1) go to 10
stop
end
IF THEN ELSE IF USLOV ZA ISTI PRIMJER
! program za pokazivanje if then i else if uslova
10 print*,'unesi temperaturu u C'
read*,C
IF(C.le.0) then
print*,'smrzavanje'
else if(C.le.10) then
print*,'hladno'
else if(C.le.20) then
print*,'umjreno'
else if(C.le.30) then
print*,'toplo'
else
print*,'vrlo toplo'
end if
print*,'zeliteli ponoviti unos unesite odg broj?'
print*,' Da unesite 1'
print*,' Ne unesite 0'
read(*,*) ponovo
if (ponovo.eq.1) go to 10
stop
end
9

PRIMJER: 14 (Funkcijski podprogram)


U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog potprograma
izraunati kombinaciju:
K

I!
J ! I J !

Rjeenje:
! proracun kombinacije k=i!/[j!(i-j)!]
integer A,B,C,fakt
! i=prvi broj
! j=drugi broj
! k=rezultat
print*, 'Program za racunanje broja kombinacija'
print*, 'Unesite prvi,pa drugi broj kombinacije'
read*, I,J
A=fakt(I)
B=fakt(J)
C=fakt(I-J)
K=A/(B*C)
print*, 'Prvi broj je= ' ,I, ' Drugi broj je= ',J, ' Broj kombinacija je= ',K
stop
end
integer function fakt(L)
fakt=1
do 10 N=1,L
fakt=fakt*N
10 continue
return
end

10

PRIMJER: 15
Uitati x,y koordinate 10 taaka. Napisati funkcijski potprogram koji e da rauna rastojanja
datih taaka sa kordinatom XA = 0.5 i YA = 1.0, te nai najveu i najmanju duinu u glavnom
programu.
Rjeenje:
! ucitati x,y koordinate 10 tacaka.napisati funkcijski potprogram koji ce da racuna rastojanja datih tacaka
od tacke sa Koordinatom xa=0,5 i y=1,0. naci najvecu i najmanju duzinu u glavnom programu
dimension x(10),y(10),d(10)
print*, 'Program za racunanje rastojanje tacaka od tacke'
print*, 'Xa=0,5 i Y=1,0'
print*, 'Unesite koordinate 10 tacaka a(x,y)'
do 10 i=1,10
print*, 'Tacka broj',i
read*, x(i),y(i)
10 continue
xa=0.5
ya=1.0
do 20 i=1,10
d(i)=duzina(x(i),y(i),xa,ya)
20 continue
dmax=d(1)
dmin=d(1)
do 30 i=1,10
if (dmax.lt.d(i)) then
dmax=d(i)
else if (dmin.gt.d(i)) then
dmin=d(i)
end if
30 continue
print*, 'Maksimalna duzina je= ',dmax,' minimalna duzina je= ',dmin
stop
end
function duzina(a,b,c,d)
duzina=sqrt((a-c)**2+(b-d)**2)
return
end

11

PRIMJER: 16
Napisati program u Fortranu koji rauna elemente trajektorije kod kosog hica koristei poziv za
traject funkciju.
Rjeenje:
program Putanja
!ovaj program racuna elemente trajektorije kod kosog hica
!koristeci poziv za traject funkciju
implicit none
integer:: i,N;
real:: g,PI
! fizicke konstante
real::alfa,Vo,D,T,x,y
real::traject
g = 9.806
pi = 3.1415926
print*, 'Unesi ugao izbacivanja alfa i pocetnu brzinu Vo'
read(*,*) alfa,Vo
alfa = alfa * pi / 180.0
! prevedi u radijane
D=Vo*Vo*sin(2.*alfa)/g
! maximalni domet
print*, 'maximalni domet D za date parametre iznosi',D,'[m]'
T=2.*Vo*sin(alfa)/g
print*, 'Vrijeme leta T za date parametre iznosi',T,'[s]'
print*, 'Unesi broj tacaka na trajektoriji'
read(*,*) N
print*, ' tacke trajektorije su '
do i=0,N
x=i*D/N
y=traject(x,alfa,Vo,g)
print*, i,x,y
end do
end program Putanja
!********************************************************************
real function traject(x,alfa,Vo,g)
implicit none
real x,y,alfa,Vo,g
traject = tan(alfa)*x - g*(1.+tan(alfa)*tan(alfa))*x*x/(2.*Vo*Vo)
return
end

12

PRIMJER: 17
Napisati program koji odreuje reakcije i dimenzionira prostu gredu za sluaj prikazan na slici.
Greda je okruglog poprenog presjeka. SLIKA
Rjeenje:
Program prosta_greda
! Program racuna staticke velicine proste grede
! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka
! Eksplicitno deklarisanje velicina koje se koriste u programu
implicit none
real::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;
10 continue
print*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'
read(*,*)L,l1,l2 ! unos velicina u slobodnom formatu
if(l1+l2.ge.L) then
print*,'Pogresan unos podataka'; go to 10
end if
! unos vrijednosti za sile F1 i F2
print*,'Unesite vrijednosti sila F1 i F2, u (kN)'
read(*,*)F1,F2
! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)
read(*,*)SigmaDoz
! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0
Ra=(F2*l2+F1*(L-l1))/L
Rb=F1+F2-Ra
print*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb
! Momenti savijanja u tackama 1 i 2
! Mmax=maksimalni moment savijanja
M1=Ra*l1
M2=Rb*l2
Mmax=M1
if(M2.gt.Mmax) Mmax=M2;
! dimenzionisanje precnika grede
d=(32*Mmax/(3.14159*SigmaDoz))**0.33333
print*,'potrebni precnik grede iznosi',d,' (mm)'
end program prosta_greda

13

Primjer prosta gleda bez if uslova


Program prosta_greda
! Program racuna staticke velicine proste grede
! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka
! Eksplicitno deklarisanje velicina koje se koriste u programu
implicit none
real::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;
print*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'
read(*,*)L,l1,l2 ! unos velicina u slobodnom formatu
! unos vrijednosti za sile F1 i F2
print*,'Unesite vrijednosti sila F1 i F2, u (kN)'
read(*,*)F1,F2
! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)
read(*,*)SigmaDoz
! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0
Ra=(F2*l2+F1*(L-l1))/L
Rb=F1+F2-Ra
print*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb
! Momenti savijanja u tackama 1 i 2
! Mmax=maksimalni moment savijanja
M1=Ra*l1
M2=Rb*l2
Mmax=M1
if(M2.gt.Mmax) Mmax=M2;
! dimenzionisanje precnika grede
d=(32*Mmax/(3.14159*SigmaDoz))**0.33333
print*,'potrebni precnik grede iznosi',d,' (mm)'
end program prosta_greda

14

UPISAN ISPIS MAKSIMALNOG MOMENTA


Program prosta_greda
! Program racuna staticke velicine proste grede
! i dimenzionise gredu okruglog, konstantnog poprecnog presjeka
! Eksplicitno deklarisanje velicina koje se koriste u programu
implicit none
real::l1,l2,L,F1,F2,Ra,Rb,M1,M2,Mmax,SigmaDoz,d;
print*,'Unesite vrijednosti rastojanja L,l1,l2, u (mm)'
read(*,*)L,l1,l2 ! unos velicina u slobodnom formatu
! unos vrijednosti za sile F1 i F2
print*,'Unesite vrijednosti sila F1 i F2, u (kN)'
read(*,*)F1,F2
! unos dozvoljenog naprezanja SigmaDoz, u (kN/mm2)
read(*,*)SigmaDoz
! Izracunavanje reakcija u osloncima Ra i Rb, sumaMb=0
Ra=(F2*l2+F1*(L-l1))/L
Rb=F1+F2-Ra
print*,'Reakcije oslonaca iznose Ra=',Ra,'Rb=',Rb
! Momenti savijanja u tackama 1 i 2
! Mmax=maksimalni moment savijanja
M1=Ra*l1
M2=Rb*l2
Mmax=M1
if(M2.gt.Mmax) Mmax=M2;
print*,'Maksimalni moment je=',Mmax
! dimenzionisanje precnika grede
d=(32*Mmax/(3.14159*SigmaDoz))**0.33333
print*,'potrebni precnik grede iznosi',d,' (mm)'
end program prosta_greda

15

PRIMJER: 18 (MATRICE)
Uitati matricu A(44) i matricu B(44), onda nai matricu C kao proizvod matrica A i B.
Ci,j = Ai,k x Bk,j
Rjeenje:
! Naci proizvod matrica A i B, kao matricu C

dimension A(4,4), B(4,4), C(4,4)


print*, 'Program za racunanje proizvoda dvije matrice'
print*, 'Unesite elemente matrice A(44)'
do 10 i=1,4
do 10 j=1,4
print*, i,j
read*, A(i,j)
10 continue
print*, 'Unesite elemente matrice B(44)'
do 20 i=1,4
do 20 j=1,4
print*, i,j
read*, B(i,j)
20 continue
print*, 'Proizvod matrica A i B je: '
do 30 i=1,4
do 30 j=1,4
C(i,j)=0
do 40 k=1,4
C(i,j)=C(i,j)+A(i,k)*B(k,j)
40 continue
print*, i,j
print*, C(i,j)
30 continue
stop
end
PRIMJER: 19
U glavnom programu uitati varijable A i B i pozivom funkcijskog potprograma izraunati sumu
tih varijabli.
Rjeenje:
! funkcijski potprogram
print*, 'Program za sabiranje varijabli pomocu funkcijskog potprograma'
print*, 'Unesite varijablu a'
read*, a
print*, 'Unesite varijablu b'
read*, b
suma=f(a,b)
print*, 'Suma varijabli a i b je =',suma
stop
end
function f(a,b)
f=a+b
return
end
16

PRIMJER: 20
U glavnom programu uitati varijablu X, te pomou funkcijskog potprograma odrediti:
X2
f(X)= X2+2
5X

ako je X>5
ako je X=5
ako je X<5

Rjeenje:
!program za odredjivanje funkcije
!
x**2
x>5
! f(x)= x**2+2
x=5
!
5x
x<5
print*, 'Unesite nepoznatu x'
read*, x
y=f(x)
print*, 'Trazena funkcija je = ',y
stop
end
function f(x)
if(x.gt.5)f=x**2
if(x.eq.5)f=x**2+2
if(x.lt.5)f=5*x
return
end
!program za odredjivanje funkcije
!
x**2
x>5
! f(x)= x**2+2 x=5
!
5x
x<5
print*, 'Unesite nepoznatu x'
read*, x
y=f(x)
print*, 'Trazena funkcija je = ',y
stop
end
function f(x)
if (x.gt.5) then
f=x**2
print*, 'Posto je x>5 vrijednost funkcije je f(x)=x**2'
else
if (x.eq.5) then
f=x**2+2
print*, 'Posto je x=5 vrijednost funkcije je f(x)=x**2+2'
else
end if
if (x.lt.5) then
f=5*x
print*, 'Posto je x<5 vrijednost funkcije je f(x)=5*x'
end if
end if
return
end

17

PRIMJER:20*
Napisati program koji nakon unosa vrijednosti X1 i X2 vrsi izracunavanje vrijednosti Y .
X1+X2 ZA X1<X2
Y = X1*X2 ZA X1=X2
X1-X2 ZA X1>X2
! PROGRAM ZA IZRACUNAVANJE VRIJEDNOSTI FUNKCIJE
! KORISTECI ARITMETICKI USLOVNI PRELAZAK
!
X1+X2 ZA X1<X2
! Y = X1*X2 ZA X1=X2
!
X1-X2 ZA X1>X2
! DEKLARACIJA VARIJABLI
INTEGER::Y,X1,X2
PRINT*,'UNESITE VRIJEDNOSTI X1 I X2'
READ*,X1,X2
IF(X1-X2)10,20,30
10 CONTINUE
Y=X1+X2
GO TO 40
20 CONTINUE
Y=X1*X2
GO TO 40
30 CONTINUE
Y=X1-X2
40 CONTINUE
PRINT*,'VRIJEDNOST FUNKCIJE Y JE=',Y
STOP
END
PRIMJER ZA VJEBU:
IZRACUNATI VRIJEDNOST Y SA KORISTENJEM NAREDBI ZA BLOKOVSKI USLOVNI
PRELAZAK I LOGICKI USLOVNI PRELAZAK ZA DATO Y I DATE USLOVE.
!
X2
! Y = 2X
!
X

ZA X>0
ZA X=0
ZA X<0

18

PRIMJER: 21
Uitati matricu A(44). Nai sumu elemenata iznad glavne dijagonale. Zatim nai maksimalni
elemenat (vrijednost) i njegove indekse. Sve to obraditi pomou opteg potprograma subroutine racun.
Rjeenje:
! suma elemenata iznad glavne dijagonale i max. elem. matrice
! m= prvi indeks
! n= drugi indeks
dimension a(4,4)
print*, 'Program za racunanje sume elemenata iznad glavne dijagonale i max. elem. matrice unesite
elemente matrice a(4x4)'
do 10 i=1,4
do 10 j=1,4
print*, i,j
read*, a(i,j)
10 continue
call racun(a,suma,m,n,pmax)
print*, 'Suma elemenata iznad glavne dijagonale je= ' ,suma, 'Maksimalni element matrice', pmax, 'prvi
indeks ' ,m, 'drugi indeks' ,n
stop
end
subroutine racun(b,s,m,n,pmax)
dimension b(4,4)
s=0
do 20 i=1,4
do 20 j=1,4
if (i.lt.j) then
s=s+b(i,j)
end if
20 continue
pmax=b(1,1)
m=1
n=1
do 30 i=1,4
do 30 j=1,4
if (pmax.lt.b(i,j)) then
pmax=b(i,j)
m=i
n=j
end if
30 continue
return
end

19

PRIMJER: 22
Uitati matricu A(44). Nai sumu elemenata ispod glavne dijagonale. Sve to obraditi pomou
opteg potprograma - subroutine racun.
Rjeenje:
! suma elemenata ispod glavne dijagonale
dimension a(4,4)
print*, 'program za racunanje sume elemenata ispod'
print*, 'glavne dijagonale matrice'
print*, ' '
print*, 'unesite elemente matrice a(4x4)'
do 10 i=1,4
do 10 j=1,4
print*, i,j
read*, a(i,j)
10 continue
call racun(a,suma)
print*, 'suma ispod glavne dijagonale',suma
stop
end
subroutine racun(b,s)
dimension b(4,4)
s=0
do 20 i=1,4
do 20 j=1,4
if (i.gt.j) then
s=s+b(i,j)
end if
20 continue
return
end

20

PRIMJER: 23
Napisati program za rjesavanje linearnog sistema jednacina sa tri nepoznate
koristei cramerov metot i podprogram subroutine cramer.
Rjeenje:
program LinSistem
!ovaj program kramerovom metodom rjesava
!sistem od tri linearne jednacine
implicit none
integer:: i,j,u;
real:: A(3,3),B(3),X(3);
do i=1,3
print*, 'Unesi koeficijente i konstantu za jednacinu',i
read(*,*) (A(i,j),j=1,3),B(i)
end do
call cramer(A,B,X,u)
if (u.eq.1) print*,'Rjesenje sistema je',(X(i),i=1,3)
end program LinSistem
!*****************************************
subroutine cramer(A,B,X,u)
implicit none
integer::i,u
real:: A(3,3),B(3),X(3),detsis,det,A1(3,3),A2(3,3),A3(3,3);
!sistem ima rjesenje u=1, sistem nema rjesenja u=0
detsis=det(A)
u=1
if (detsis.eq.0) then
print*,'sistem nema rjesenja'
u=0
return
end if
A1=A; A2=A; A3=A;
do i=1,3
A1(i,1)=B(i)
A2(i,2)=B(i)
A3(i,3)=B(i)
end do
X(1)=det(A1)/detsis; X(2)=det(A2)/detsis; X(3)=det(A3)/detsis
return
end subroutine cramer
!***************************************
real function det(A)
implicit none
real A(3,3)
det=A(1,1)*A(2,2)*A(3,3) + A(1,2)*A(2,3)*A(3,1) + A(2,1)*A(3,2)*A(1,3) - &
& A(3,1)*A(2,2)*A(1,3) - A(2,1)*A(1,2)*A(3,3) - A(3,2)*A(2,3)*A(1,1)
return
end

21

PRIMJER:24
program vjezba24
! ovaj program primjenom potprograma racuna
! prostornu rotaciju vektora X
implicit none
integer:: i;
real::X(3),Xrot(3),alfa;
print*,'Unesi komponente vektora Xi, i=1,2,3';
do i=1,3
print*, 'komponenta',i
read(*,*) X(i)
end do
print*, 'Unesi ugao rotacije oko Z ose, alfa';
read(*,*) alfa;
call Rotacija(X,alfa,Xrot)
print*,'Zarotirani vektor ima koordinate:'
do i=1,3
write(*,101), i,Xrot(i)
end do
101
format(i3,3x,f8.3,/)
end program vjezba24
!********************************************************

subroutine Rotacija(Xin,fi,Xout)
implicit none
integer::i,j;
real:: Xin(3),fi,Xout(3),T(3,3)
fi = fi*3.14159/180.d0
! pretvorba stepeni u radijane
T=0.d0
T(1,1)=cos(fi)
T(1,2)=sin(fi)
T(2,1)=-1.*sin(fi)
T(2,2)=cos(fi)
T(3,3)=1.
call matvec(T,Xin,Xout)
return
end subroutine Rotacija
!******************************************************

subroutine matvec(T,Xin,Xout)
! ova subroutina mnozi matricu T i vektor Xin
implicit none
integer::i,j
real::T(3,3),Xin(3),Xout(3)
Xout=0.d0
do i=1,3
do j=1,3
Xout(i)=Xout(i)+T(i,j)*Xin(j)
end do
end do
return
end subroutine matvec
22

ZADACI ZA SAMOSTALNU VJEBU


ZADATAK: 1
Napisati program koji pretvara inc u cm.
Rjeenje:
! Program koji pretvara inc u cm
! Deklaracija promjenjljivih
real:: INC,CMUINC,CM
parameter (CMUINC=2.54)
! Ucitavanje ulaznih podataka
print*,'Unesi duzinu u INCIMA'
read*,INC
! stampanje duzine u centimetrima
CM=INC*CMUINC
print*, INC,'INCA IZNOSI',CM,'cm'
stop
end
ZADATAK: 2
Uitati niz A od 20 elemenata, sortirati ih u opadajuem redoslijedu.
Rjeenje:
! ucitati niz A od 20 elemenata, napisati prog. za sortiranje u opad redosljedu
dimension A(20)
print*, 'Program za sortiranje el. niza A u opad redosljedu'
print*, 'Unesite 20 elemenata niza A'
do 10 i=1,20
read*, A(i)
10 continue
! sortiranje elemenata
do 20 i=1,19
do 15 j=i+1,20
if (A(i) .gt. A(j)) go to 15
c=A(i)
A(i)=A(j)
A(j)=c
15 continue
20 continue
print*, 'Sortirani elementi niza A su:'
do 30 j=1,20
print*, A(j)
30 continue
stop
end

23

ZADATAK:2*
PRIMJER:2*
Napisati program koji vrsi sortiranje datog niza prema velicini clanova.
Nakon sortiranja, originalni i sortirani niz ispisati na ekranu.
RJEENJE:
program ponavljanje_2
!
Deklaracija varijabli
implicit none
integer:: N,i,j,Niz1(100),Niz1Copy(100),Max;
print*, 'Unesi broj clanova niza N, N<100'
read(*,*) N
do i=1,N
print*, 'Unesi clan niza',i
read(*,*) Niz1(i)
end do
Niz1Copy=Niz1 ! sacuvati originalni niz
do j=1,N-1
do i=1,N-j
if (Niz1(i).gt.Niz1(i+1)) then
Max=Niz1(i)
! zamjena mjesta clanova niza
Niz1(i)=Niz1(i+1)
Niz1(i+1)=Max
end if
end do
end do
print*, 'Originalni i sortirani niz iznose'
do i=1,N
write(*,100) Niz1Copy(i),Niz1(i)
end do
100
format(i5,5x,i5)
end program ponavljanje_2

24

PRIMJER:2 (BUBBLE_SORT metod)


KREIRATI PROGRAM U FORTRANU ZA SORTIRANJE NIZA BROJEVA OD NAJVEEG PREMA NAJMANJEM.
BROJEVI SE KREU U PODRUJU OD 1 DO 100, A GENERIRAJU SE SLUAJNO, POMOU GENERATORA
PSEUDOSLUAJNIH BROJEVA.

RJEENJE:
PROGRAM BUBBLE_SORT
IMPLICIT NONE
INTEGER::N
REAL, DIMENSION(:), ALLOCATABLE::X
REAL:: TEMP,BR
INTEGER::I,J
WRITE(*,'("BROJ CLANOVA: N=")')
READ(*,*)N
ALLOCATE (X(N))
CALL RANDOM_SEED()
DO I=1,N
CALL RANDOM_NUMBER(BR)
X(I)=INT(BR*100+1)
END DO
WRITE (*,'("NESORTIRANI NIZ GLASI:")')
DO I=1,N
WRITE(*,'(F8.2)') X(I)
END DO
DO I=1,N
DO J=I+1,N
IF (X(J)>X(I))THEN
TEMP=X(I)
X(I)=X(J)
X(J)=TEMP
END IF
END DO
END DO
WRITE(*,'(/,"SORTIRANI NIZ GLASI:")')
DO I=1,N
WRITE (*,'(F8.2)') X(I)
END DO
DEALLOCATE (X)
END PROGRAM BUBBLE_SORT

25

ZADATAK: 3
Napisati program koji prati kretanje tijela tako da izracunava njegovu trenutnu visinu na svakih
0.5 sekundi od pocetka do kraja njegovog puta, potrebne vrijednosti se unose sa tastature.
t-vrijeme,v-visina(polozaj tijela),s-preeni put: Koriste se obrasci za slobodni_pad.
Rjeenje:
! Napisati program koji prati kretanje tijela tako da
! izracunava njegovu trenutnu visinu na svakih 0.5 sekundi
! od pocetka do kraja njegovog puta
! t-vrijeme,v-visina(polozaj tijela),s-predjeni put
PROGRAM slobodni_pad
! Deklaracija varijabli
REAL::s,t,v,h
REAL::g=9.81
! Ucitavanje vrijednosti
PRINT*,'Unesite visinu h u (m)'
READ*,h
DO 10 I=1,h
t=0.5*I
s=g*t*t/2
v=h-s
IF (v.LE.0)stop
PRINT*,'vrijeme je:',t
PRINT*,'predjeni put je:',s
PRINT*,'visina (polozaj tijela) je:',v
10 CONTINUE
STOP
END

26

PRIMJER - Vertikalni hitac


! Program za izracunavanje putanje vertikalnog hica
! ako je neko tijelo baceno vertikalno u vis brzinom v
! predjeni putse racuna pomocu obrasca s=v*t-g/2*t
PROGRAM vertikalni_hitac
IMPLICIT NONE
! Deklaracija varijabli
REAL::s,v,t
REAL::g=9.81 !Gravitaciona konstanta(m/s**2)
! Unesite pocetne vrijednosti
v=20.0
t=10.0
! Proracun predjenog puta
s=v*t-g/2.0*t**2
! Stampanje rezultata
PRINT*,'Predjeni put je:',s
STOP
END PROGRAM vertikalni_hitac
(rezultat je -290,05)
DRUGI NACIN KADA ZADAVAMO v i t
! Program za izracunavanje putanje vertikalnog hica
! ako je neko tijelo baceno vertikalno u vis brzinom v
! predjeni putse racuna pomocu obrasca s=v*t-g/2*t
! za koristenje ulazno izlaznog toka
! moguce je napisati racunanje predjenog puta
! za bilo koju pocetnu brzinu i u bilo kojem vremenskom trenutku
PROGRAM vertikalni_hitac1
IMPLICIT NONE
! Deklaracija varijabli
REAL::s,v,t
REAL::g=9.81 !Gravitaciona konstanta(m/s**2)
! Unesite pocetne vrijednosti
PRINT*,'Unesite pocetnu brzinu v u (m/s):'
READ*,v
PRINT*,'Unesite vremenski trenutak t u (s):'
READ*,t
! Proracun predjenog puta
s=v*t-g/2.0*t**2
! Stampanje rezultata
PRINT*,'Predjeni put je:',s
STOP
END PROGRAM vertikalni_hitac1

27

ZADATAK: 4
Napisati program koji rjesava kvadratnu jednacinu u opstem obliku ax**2+b*x+c=0.
Rjeenje:
! program rjesava kvadratnu jednacinu u opstem obliku a1x**2+a2*x+a3=0
implicit none
integer:: i,ponovo;
real:: a(3),jed1,jed2;
real:: X1,X2;
real:: DIS;
10 continue
print*, 'UNESITE VRIJEDNOSTI ZA KOEFICIJENTE a,b,c'
do i=1,3
read(*,*) a(i)
end do
DIS=a(2)**2-4.*a(1)*a(3);
! uslov
If (DIS.lt.0.) then
print*, 'negativna diskriminanta, jednacina nema realno rjesenje'
else
X1=(-1.*a(2)+sqrt(dis))/(2.*a(1))
X2=(-1.*a(2)-sqrt(dis))/(2.*a(1))
jed1=a(1)*X1**2+a(2)*X1+a(3)
jed2=a(1)*X2**2+a(2)*X2+a(3)
print*, '******************************************************************'
print*, 'Rjesenja date jednacine iznose X1=',X1,'X2=',X2
print*, '******************************************************************'
print*, 'PROVJERA, jed1=',jed1
print*, 'PROVJERA, jed2=',jed2
end if
! ponoviti postupak
print*, 'Zelis li ponoviti unos,unesi odgovarajuci broj ?'
print*, 'DA ---- unesi 1'
print*, 'NE ---- unesi 0'
read(*,*) ponovo
if (ponovo.eq.1) go to 10
stop
end

28

ZADATAK: 5
Napisati program u fortranu za slucaj da iz dva grada istovremeno polaze dva automobila sa
poznatim rastojanjem izmedju gradova s, automobili se krecu sa konstantnim brzinama v 1 i v2.
Izracunati nakon kojeg vremena i na kom dijelu puta posebno predjenog od dva vozila e se
susresti automobili?
Rjeenje:
Uopteno Rjeenje:
! IZRACUNAVANJE VREMENSKOG SUSRETA DVA AUTOMOBILA
! DEKLARACIJA VARIJABLI
REAL::s,t,s1,s2,v1,v2
! UCITAVANJE PODATAKA
Print*,'Unesite rastojanje izmedju dva grada s u km'
Read*,s
Print*,'Unesite brzinu kretanja v1 automobila I u km/h'
Read*,v1
Print*,'Unesite brzinu kretanja v2 automobila II u km/h'
Read*,v2
! IZRACUNAVANJE REZULTATA I USPOREDBA
t=s/(v1+v2)
s1=v1*t
s2=v2*t
! Stampanje rezultata
Print*,'Vrijeme susreta automobila je',t,' h'
Print*,'Automobil I preci ce put od ',s1,' km do susreta'
Print*,'Automobil II preci ce put od ',s2,' km do susreta'
Stop
End
PRIMJER:6
Napisati program u fortranu za izracunavanje povrsine trougla primjenom Heronovog
obrasca ako su zadate koordinate vrhova trougla.
RJEENJE:
program ponavljanje_6
! Racunanje povrsine trokuta za koji su date koordinate vrhova
! primjenom Heronove formule P=sqrt(s(s-a)(s-b)(s-c)); s=(a+b+c)/2
implicit none
real:: K(3,2);
! koordinate vrhova
real:: a,b,c,s,P; !stranice i povrsina
integer i,j;
do i=1,3
print*, 'Unesi koordinate vrha',i,' X eneter Y'
do j = 1,2
read(*,*) K(i,j)
end do
end do
! racunanje stranica
a=sqrt((K(2,2)-K(1,2))**2 + (K(2,1)-K(1,1))**2)
b=sqrt((K(2,2)-K(3,2))**2 + (K(2,1)-K(3,1))**2)
c=sqrt((K(3,2)-K(1,2))**2 + (K(3,1)-K(1,1))**2)
s=0.5*(a+b+c)
!poluobim trougla
P=sqrt(s*(s-a)*(s-b)*(s-c)) !Heronov obrazac
print*, 'Povrsina trougla iznosi',P
29

end program ponavljanje_6


PRIMJER:7
Napisati program koji manipulise sa vektorima i racuna prosjecnu vrijednost za nekoliko unijetih
ocjena.
RJEENJE:
program ponavljanje_7
!
deklaracija varijabli
implicit none
integer:: i,ocjene(5),zbir;
real:: prosjek;
character:: predmeti*10
!(rijec sa 10 slovnih mjesta)
dimension predmeti(5)
!(vektor sa 5 elemenata)
print*,'UNESI LISTU PREDMETA (1-5)'
do i=1,5
print*,i,'predmet: '
read(*,*) predmeti(i)
end do
zbir=0
! inicijalizacija (davanje pocetne vrijednosti)
unos: do i=1,5
print*,'unesite ocjenu iz predmeta'
print*,i,'predmet: ',predmeti(i)
read(*,*)ocjene(i)
zbir=zbir+ocjene(i)
end do unos
prosjek=0.2*zbir
! efikasnije je mnozenje nego dijeljenje /5
print*,'PROSJECNA OCJENA IZNOSI ',prosjek
end program ponavljanje_7
PRIMJER: 8
Naci presjeciste tacaka pravca zadate jednacinom: ax+by+c=0 sa koordinatnim osama.
RJEENJE:
PROGRAM ponavljanje_8
implicit none
!Deklaracija varijabli
real::a,b,c
!Unesite koeficijente pravca
print*,'Unesite koef. pravca ax + by + c = 0'
print*,'unesite koef.a'
read*,a
print*,'unesite koef.b'
read*,b
print*,'unesite koef.c'
read*,c
!Presjeciste s apscisom
if(a/=0) then
print*,' Presjeciste s apscisom je=:',-c/a
else
print*,'Pravac je horizontalan'
end if
!Presjeciste s ordinatom
if(b/=0) then
print*,' Presjeciste s ordinatom je=:',-c/b
else
print*,'Pravac je vertikalan'
end if
30

END PROGRAM ponavljanje_8


PRIMJER 9
Nacrtati dijagram toka i napisati kod programa u fortranu koji e uitati n elemenata niza A, zatim nai
sumu elemenata niza A. Sumu elemenata niza A uporediti sa brojem 6.
Ukoliko je izraunata suma < 6 izraunati i ispisati suma + 6/2.
suma > 6 izraunati i ispisati suma - 9/3.
RJEENJE:
! Suma elemanata niza A i usporedba
dimension A(100)
REAL::Z,USLOV1,USLOV2,i,n,ponovo
10 continue
print*,'program za sabiranje i usporedbu elemenata niza A'
print*,'koliko ima elemanata niza A'
read*,n
print*,'ucitavanje elemenata niza A'
do 1 i=1,n
read*,A(i)
1 continue
! Operacije sa elementima niza A
Z=0
do 2 i=1,n
Z=Z+A(i)
2 continue
! Stampanje sume elemenata niza A
print*,'Suma je =',Z
! Usporedba
if (Z.le.6)then
USLOV1=Z+(6/2)
print*,'posto je Z<6 ispunjen je prvi uslov'
print*,'Uslov jedan iznosi =',USLOV1
else
USLOV2=Z-(9/3)
print*,'posto je Z>6 ispunjen je drugi uslov'
print*,'Uslov dva iznosi =',USLOV2
end if
print*,'Zelite li nastaviti unos unesite odgovarajuci broj'
print*,' Da ----- unesite 1'
print*,' Ne ----- unesite 0'
read(*,*)ponovo
if(ponovo.eq.1) go to 10
! Zaustavljanje programa
stop
end

31

PRIMJER 10
Nacrtati dijagram toka i napisati fortranski kod za program koji e uitati dva niza, izvrsiti sabiranje
prvih elemanata nizova te izvrsiti sabiranje zadnjih elemenata nizova. Nakon sabiranja pojedinih
elemenata nizova nai koji je zbir vei i odtampati ga.
! Dva Niza
dimension A(100),B(100)
real:: i,Na,Nb,C,D
print*,'program dva niza'
10 continue
print*,'koliko ima elemenata niza A'
read*,Na
print*,'unesite elemenate niza A'
do 1 i=1,Na
read*,A(i)
1 continue
print*,'koliko ima elemenata niza B'
read*,Nb
print*,'unesite elemenate niza B'
do 2 i=1,Nb
read*,B(i)
2 continue
! operacije sa elementima nizova
C=A(1)+B(1)
D=A(Na)+B(Nb)
if(C.gt.D)then
print*,'Vrijednost C veca je od D i iznosi=',C
else if (C.eq.D)then
print*,'Brojevi su jednaki i vrijednost C je =',C,' i vrijednost D je=',D
else
print*,'Vrijednost D je veca i iznosi=',D
end if
print*,'Zelite li nastaviti unos unesite odgovarajuci broj'
print*,' Da ----- unesite 1'
print*,' Ne ----- unesite 0'
read(*,*)ponovo
if(ponovo.eq.1) go to 10
! Zaustavljanje programa
stop
end

32

PRIMJER:11
Napisati fortranski kod programa koji ucitava tri cijela broja te nalazi razliku najveceg i zbira preostala
dva broja.
! Program koji ucitava tri cijela broja te nalazi razliku
! najveceg i preostala dva
IMPLICIT NONE
INTEGER::A,B,C,ponovo
REAL::Razlika
10 continue
print*,' Unesite tri cijela broja'
read*,A,B,C
if(A.gt.B.and.A.gt.C)then
Razlika=A-(B+C)
Print*,' Posto je A>B i A>C razlika je=',Razlika
else if(B.gt.A.and.B.gt.C)then
Razlika=B-(A+C)
Print*,' Posto je B>A i B>C razlika je=',Razlika
else
Razlika=C-(A+B)
Print*,' Posto je C>A i C>B razlika je=',Razlika
end if
print*,'Zelite li nastaviti unos unesite odgovarajuci broj'
print*,' Da ----- unesite 1'
print*,' Ne ----- unesite 0'
read(*,*)ponovo
if(ponovo.eq.1) go to 10
! Zaustavljanje programa
stop
end

33

PRIMJER: 12
SELECT CASE NAREDBA
Napisati fortranski kod programa koji ucitava jedan cijeli broj te ispituje da li je taj broj manji od 1, u
podrucju 1-10, veci od 10 i jednak broju 10.
PROGRAM broj
IMPLICIT NONE
! DEKLARACIJA VARIJABLI
INTEGER:: br
! UNOS BROJA
PRINT*,'UNESITE POZITIVAN CIJELI BROJ'
READ*,br
! PROVJERA UNESENOG BROJA
IF (br.le.0) THEN
PRINT*,'NE DOZVOLJEN UNOS BROJA'
STOP
END IF
! ISPITIVANJE UNESENOG BROJA
SELECT CASE (br)
CASE (1:9)
PRINT*,'UNESENI BROJ JE U PODRUCJU 1-10'
CASE (10)
PRINT*,'UNESENI BROJ JE :10'
CASE DEFAULT
PRINT*,'UNESENI BROJ JE > OD 10'
END SELECT
! KRAJ PROGRAMA
END PROGRAM broj

34

PRIMJER: 13
Jednostavan sluaj koristenja SELECT CASE naredbe kod programa KALKULATOR
Program unosi dva cijela broja te na osnovu zeljenog unosa operatora vrsi izracunavanje unesenih
brojeva.
IMPLICIT NONE
! Jednostavan sluaj programiranja kalkulatora
INTEGER:: I, J, K
CHARACTER:: Operator
DO
PRINT *, 'Unesite dva cijela broja'
READ *, I, J
PRINT *, 'Unesite zeljeni tip operatora u program'
read '(A)', Operator
Kalkulator:&
SELECT CASE (Operator)
CASE ('+') Kalkulator
K=I+J
PRINT *, 'Suma unesenih brojeva je', K
CASE ('-') Kalkulator
K = I-J
PRINT *, 'Razlika unesenih brojeva je', K
CASE ('/') Kalkulator
K=I/J
PRINT *, 'Rezultat Dijeljenja unesenih brojeva je', K
CASE ('*') Kalkulator
K=I*J
PRINT *, 'Rezultat Mnozenja unesenih brojeva je', K
CASE DEFAULT Kalkulator
EXIT
END SELECT Kalkulator
END DO
END

35

Operacije sa matricama, ugraene funkcije, (dodatni zadaci)


PRIMJER: 1
Napisati program u fortranu koji vri Multiplikaciju matrica dimenzija , A(3,3) i B(3,3). A zatim
vrsi provjeru pomocu ugraene funkcije za mnoenje matrica.
RJEENJE:
program mnozenje
!
ovaj program vrsi multiplikaciju matrica A(3,3)i B(3,3)
implicit none;
integer:: i,j,k;
real:: A(3,3),B(3,3),C(3,3),D(3,3)
!
inicijalizacija matrica
A=0.;B=0.;C=0.;D=0.;
do i=1,3
print*,'unesi red',i
read*, (A(i,j),j=1,3)
end do
print*, '________________Unesi matricu B_________________'
do i=1,3
print*, 'unesi red',i
read*, (B(i,j),j=1,3)
end do
write(*,10) ! dva prazna reda radi odvajanja matrica
do i=1,3
print*, (A(i,j),j=1,3)
end do
write(*,10)
10
format(2/)
do i=1,3
print*, (B(i,j),j=1,3)
end do
! mnozenje matrica
do i=1,3
do j=1,3
do k=1,3
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
write(*,10)
do i=1,3
print*, (C(i,j),j=1,3)
end do
D=matmul(A,B)
! poziv sistemskoj funkciji za mnozenje matrica
A=D-C
! kontrola, A=0.
Write(*,10)
do i=1,3
print*, (A(i,j),j=1,3)
end do
end program mnozenje

36

UGRAENE FUNKCIJE ZA MAKSIMAL,MINIMALNI i SUMU ELEMENATA MATRICE


MAKSIMALNI ELEMENT MATRICE
Program 2
!
ovaj program ucitava matricu 3,3 i nalazi maksimalni elemenat
implicit none
integer:: i,j,X
real:: A(3,3)
print*,'----------------Unesite elemente matrice A -------------'
do i=1,3
print*,'unesi red',i
read*, (A(i,j),j=1,3)
end do
Print*,'elementi matrice A'
do i=1,3
print*, (A(i,j),j=1,3)
end do
10
format(2/)
X=MAXVAL (A)
PRINT*,'MAKSIMALNI ELEMENAT MATRICE JE',X
end program 2
MINIMALNI ELEMENAT MATRICE A 4,4
program vjezba3
!
ovaj program ucitava matricu 4,4 i nalazi minimalni elemenat
implicit none
integer:: i,j,X
real:: A(4,4)
print*,'----------------Unesite elemente matrice A -------------'
do i=1,4
print*,'unesi red',i
read*, (A(i,j),j=1,4)
end do
Print*,'elementi matrice A'
do i=1,4
print*, (A(i,j),j=1,4)
end do
10
format(2/)
X=MINVAL (A)
PRINT*,'MINIMALNI ELEMENAT MATRICE JE',X
end program vjezba3
SUMA ELEMENAT MATRICE
program vjezba4
!
ovaj program ucitava matricu 4,4 i nalazi sumu elemenata
implicit none
integer:: i,j,X
real:: A(4,4)
print*,'----------------Unesite elemente matrice A -------------'
do i=1,4
print*,'unesi red',i
read*, (A(i,j),j=1,4)
end do
Print*,'elementi matrice A'
do i=1,4
print*, (A(i,j),j=1,4)
end do
10
format(2/)
X=SUM(A)
PRINT*,'SUMA ELEMENAT MATRICE JE',X
end program vjezba4

37

PRIMJER 2:
Uitati matricu A(3,3) i matricu B (3,3), zatim nai zbir matrica kao matricu C i razliku kao matricu D
program vjezba2
!
ovaj program vrsi sabiranje i oduzimane matrica A(3,3)i B(3,3)
implicit none;
integer:: i,j,k;
real:: A,B,C,D
dimension A(3,3), B(3,3), C(3,3), D(3,3)
print*, '________________Unesi matricu A_________________'
do 10 i=1,3
do 10 j=1,3
print*, i,j
read*, A(i,j)
10 continue
print*, '________________Unesi matricu B_________________'
do 20 i=1,3
do 20 j=1,3
print*, i,j
read*, B(i,j)
20 continue
! Operacije sa matricama A i B
do 30 i=1,3
do 30 j=1,3
C(i,j)=A(i,j)+B(i,j)
D(i,j)=A(i,j)-B(i,j)
30 continue
Print*,'Zbir matrica A i B je matrica C'
do 40 i=1,3
Print*, (C(i,j),j=1,3)
40 continue
Print*,'Razlika matrica A i B je matrica D'
do 50 i=1,3
Print*, (D(i,j),j=1,3)
50 continue
stop
end program vjezba2

38

PRIMJER: 3
! Ucitati matricu AK(4,4) i matricu B(3,3),
! Naci zbir (ZE4) elemenata 4 kolone matrice AK
! Proizvod (PDB) dijagonalnih elemenata matrice B.
! Ako je dobiveni zbir ZE4 veci od dobivenog proizvoda PDB
! Izracunati razliku ZE4 i PDB u protivnom izracunati
! Proizvod dobivenog ZE4 i PDB
! Stampati ZE4 i PDB
Program matrice_AB
REAL,DIMENSION(4,4)::AK
INTEGER,DIMENSION (3,3)::B
Print*,'Unesi elemente matrice AK'
Read*,((AK(i,j),j=1,4),i=1,4)
Print*,'Unesi elemente matrice B'
Read*,((B(i,j),j=1,3),i=1,3)
ZE4=0
do i =1,4
ZE4=ZE4+AK(i,4)
end do
PDB=1.0
do i =1,3
PDB=PDB*B(i,i)
end do
If (ZE4.GT.PDB) THEN
R = ZE4-PDB
Print*,'Razlika je =',R
else
PRO=ZE4*PDB
Print*,'Proizvod je =',PRO
End if
Stop
End Program matrice_AB

39

PRIMJER 4:
Ucitati matricu A k tog reda gdje je k>3. Izracunati aritmeticku sredinu prva tri reda matrice A. Ispisati
elemente matrice A i aritmeticku sredinu.
Program asredina
implicit none;
integer::i,j,k
integer,parameter::max_dimenzija=10
real::A(max_dimenzija,max_dimenzija)
real::sredina
Print*,'Dimenzija kvadratne matrice A je kxk unesite dimenziju k'
read*,k
Print*,'unesite elemente matrice A'
do i=1,k
print*,'unesi red',i
read*,(A(i,j),j=1,k)
end do
print*,' '
do i=1,k
print*,(A(i,j),j=1,k)
end do
sredina=0.0
do i=1,3
do j=1,k
sredina=sredina+A(i,j)
end do
end do
sredina=sredina/(3.0*k)
print*,' '
print*,'Aritmeticka sredina prva tri reda matrice A je=',sredina
stop
end program asredina

40

PRIMJER:5
PROGRAM ZA NALAZENJE MAKSIMALNOG el na dijagonali matrice
Program maxel_na_dijagonali_matrice
implicit none;
integer::i,j,k
real::A,maksidijag
dimension A(4,4)
Print*,'unesite elemente matrice A'
do i=1,4
print*,'unesi red',i
read*,(A(i,j),j=1,4)
end do
print*,' '
do i=1,4
print*,(A(i,j),j=1,4)
end do
maksidijag=A(1,1)
do 10 i=1,4
if (maksidijag.lt.A(i,i))then
maksidijag=A(i,i)
end if
10 continue
print*,' '
print*,'Maksimalni element na dijagonali matrice A=',maksidijag
stop
end program maxel_na_dijagonali_matrice

41

PRIMJER:6
PROGRAM VRI PRONALAENJE maksimalnog elementa u matrici i minimalnog elementa na
dijagonali matrice.
Program elementi
implicit none;
integer::i,j,k
real::A,maksielement,minieldijagonale
dimension A(4,4)
Print*,'unesite elemente matrice A'
do i=1,4
print*,'unesi red',i
read*,(A(i,j),j=1,4)
end do
print*,' '
print*,'------ ELEMENTI MATRICE A ----------'
do i=1,4
print*,(A(i,j),j=1,4)
end do
maksielement=A(1,1)
minieldijagonale=A(1,1)
do 10 i=1,4
do 10 j=1,4
if (maksielement.lt.A(i,j))then
maksielement=A(i,j)
end if
10 continue
do 20 i=1,4
if (minieldijagonale.gt.A(i,i))then
minieldijagonale=A(i,i)
end if
20 continue
print*,' '
print*,'(REZULTATI)'
print*,'Maksimalni element matrice A je=',maksielement
print*,'Minimalni element na dijagonali matrice A je=',minieldijagonale
stop
end program elementi

42

PRIMJER:7
Program sumaelemenata_matrice
implicit none;
integer, parameter::max_dimenzija=20
real::A(max_dimenzija,max_dimenzija)
real:: sumael=0.0
integer:: k,i,j
Print*,' Kvadratna matrica A je dimenzija k x k (unesite koliko je k)'
Read*,k
Print*,' Elemnti matrice A'
Print*,'Unesite elemente matrice A'
do i=1,k
print*,'unesi red',i
read*,(A(i,j),j=1,k)
end do
print*,' '
Print*,'Formirana matrica ima izgled'
do i=1,k
print*,(A(i,j),j=1,k)
end do
do i=1,k
do j=1,k
sumael=sumael+A(i,j)
end do
end do
Print*,' Suma elemenata matrice A je:',sumael
stop
end program sumaelemenata_matrice
PRIMJER:8
Program trag_matrice
implicit none;
integer, parameter::max_dimenzija=20
real::A(max_dimenzija,max_dimenzija)
real:: trag=0.0
integer:: k,i,j
Print*,' Kvadratna matrica A je dimenzija k x k (unesite koliko je k)'
Read*,k
Print*,' Elemnti matrice A'
Print*,'Unesite elemente matrice A'
do i=1,k
print*,'unesi red',i
read*,(A(i,j),j=1,k)
end do
print*,' '
Print*,'Formirana matrica ima izgled'
do i=1,k
print*,(A(i,j),j=1,k)
end do
do i=1,k
trag=trag+A(i,i)
end do
Print*,' Trag ili zbir el na glavnoj dijagonali matrice A je:',trag
43

stop
end program trag_matrice
PRIMJER:9
PROIZVOD EL MATRICE I minimalni elemenat na sporednoj dijagonali
Program proizvod_minelspdijagonale
implicit none;
integer, parameter::max_dimenzija=20
real::A(max_dimenzija,max_dimenzija)
real:: proizvodel=1.0, minielspdijagonale
integer:: k,i,j,jmin
Print*,' Kvadratna matrica A je dimenzija k x k (unesite koliko je k)'
Read*,k
Print*,' Elemnti matrice A'
Print*,'Unesite elemente matrice A'
do i=1,k
print*,'unesi red',i
read*,(A(i,j),j=1,k)
end do
print*,' '
Print*,'Formirana matrica ima izgled'
do i=1,k
print*,(A(i,j),j=1,k)
end do
minielspdijagonale=A(1,k)
do 10 j=1,k
do 20 i=1,k
proizvodel=proizvodel*A(i,j)
20 continue
if(A(j,k+1-j).le.minielspdijagonale) then
minielspdijagonale=A(j,k+1-j)
jmin=j
end if
10 continue
Print*,' Proizvod el matrice A je:',proizvodel
Print*,' Minimalni element na sporednoj dijagonali matrice A je:',minielspdijagonale
stop
end program proizvod_minelspdijagonale

44

PRIMJER:10
PROIZVOD EL MATRICE I maksimalni elemenat na sporednoj dijagonali
Program proizvod_maxelspdi
implicit none;
integer, parameter::max_dimenzija=20
real::A(max_dimenzija,max_dimenzija)
real:: proizvodel=1.0, maxelspdi
integer:: k,i,j,jmax
Print*,' Kvadratna matrica A je dimenzija k x k (unesite koliko je k)'
Read*,k
Print*,' Elemnti matrice A'
Print*,'Unesite elemente matrice A'
do i=1,k
print*,'unesi red',i
read*,(A(i,j),j=1,k)
end do
print*,' '
Print*,'Formirana matrica ima izgled'
do i=1,k
print*,(A(i,j),j=1,k)
end do
maxelspdi=A(1,k)
do 10 j=1,k
do 20 i=1,k
proizvodel=proizvodel*A(i,j)
20 continue
if(A(j,k+1-j).gt.maxelspdi) then
maxelspdi=A(j,k+1-j)
jmax=j
end if
10 continue
Print*,' Proizvod el matrice A je:',proizvodel
Print*,' Maksimalni element na sporednoj dijagonali matrice A je:',maxelspdi
stop
end program proizvod_maxelspdi

45

PRIMJER:11
PROGRAM PRONALAZI MINIMALNI ELEMENAT U MATRICI
Program minimalnielement_matrice
implicit none;
integer::i,j,k
real::A,minimalnielmatrice
dimension A(4,4)
Print*,'unesite elemente matrice A'
do i=1,4
print*,'unesi red',i
read*,(A(i,j),j=1,4)
end do
print*,' '
print*,'------ ELEMENTI MATRICE A ----------'
do i=1,4
print*,(A(i,j),j=1,4)
end do
minimalnielmatrice=A(1,1)
do 10 i=1,4
do 10 j=1,4
if (minimalnielmatrice.gt.A(i,j))then
minimalnielmatrice=A(i,j)
end if
10 continue
print*,' '
print*,'(REZULTATI)'
print*,'Minimalni element matrice A je=',minimalnielmatrice
stop
end program minimalnielement_matrice

46

PRIMJER:12
Ucitati brojeve n i k te kvadratnu Matricu A reda n. Izracunaj sumu k tog reda i proizvod svih elemenata
matrice. Ispisi dobivene vrijednosti.
Program proizvod_zbirkreda
implicit none;
integer, parameter::max_dimenzija=20
real::A(max_dimenzija,max_dimenzija)
real:: proizvodel=1.0,suma=0.0
integer:: k,i,j,n
Print*,' Kvadratna matrica A je dimenzija n x n (unesite koliko je n)'
Read*,n
Print*,' Unesi broj k'
Read*,k
Print*,'Unesite elemente matrice A'
do i=1,n
print*,'unesi red',i
read*,(A(i,j),j=1,n)
end do
print*,' '
Print*,'Formirana matrica ima izgled'
do i=1,n
print*,(A(i,j),j=1,n)
end do
do 10 i=1,n
do 20 j=1,n
proizvodel=proizvodel*A(i,j)
20 continue
10 continue
do 40 j=1,n
suma=suma+A(k,j)
40 continue
Print*,' Proizvod el matrice A je:',proizvodel
Print*,' Suma k tog reda matrice A je:',suma
stop
end program proizvod_zbirkreda

47

48

You might also like