You are on page 1of 48

ZADACI ZA VJEŽBE IZ PREDMETA

RAČUNARI I PROGRAMIRANJE

1
PRIMJER: 1
Napisati program u fortranu za izracunavanje povrsine trougla primjenom Heronovog obrasca
sa proizvoljnim unosom dužina stranica trougla.

Rješenje:

PRIMJER: 2
Učitati niz A od 8 elemenata, naći sumu članova niza A.
Sumu niza A odštampati u glavnom programu.

Rješenje:
! 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
Učitati niz B od 6 elemenata, naći proizvod članova niza B.
Proizvod niza B odštampati u glavnom programu.

Rješenje:
! 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

2
end
PRIMJER: 4
Učitati niz A od 10 elemenata, naći proizvod i sumu niza.
Proizvod i sumu niza A odštampati u glavnom programu.

Rješenje:
! 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
Učitati niz A od 20 elemenata, sortirati ih u rastucem redoslijedu te odstampati u glavnom
programu.

Rješenje:
! 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.

Rješenje:
! 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

4
PRIMJER: 7
Progrm nalazi najveci zajednicki djelilac dva zadana prirodna broja.

Rješenje:
! 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
Učitati niz od 10 elemenata i naći sumu članova na parnim i proizvod elemenata na neparnim
mjestima. Sumu i proizvod odštampati u glavnom programu.

Rješenje:
! Suma parnih i proizvod neparnih elemenata niza A
dimension A(10)
print*, 'Program za sabiranje parnih i množenje 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

5
PRIMJER: 9
Napisati program u Fortranu koji izračunava prosječnu vrijednost unešenog niza od N
elemenata ili npr. izračunavanje prosječne vrijednosti za nekoliko unijetih ocjena.

Rješenje:
! 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.

Rješenje:
! 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

6
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.

Rješenje:
! 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) koristeći obrazac.  c  *  f  32 .
5
9
Za temperature od 30 do 60 F, sa korakom 2F.
Rješenje:
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

7
end

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

8
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 sljedeće: T < 0 - smrzavanje; T < 10 – hladno; T < 20 – umjereno;T < 30 – toplo;T>30-
vrlo toplo.
Rješenje:
! 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
9
end
PRIMJER: 14 (Funkcijski podprogram)
U glavnom programu učitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog potprograma
izračunati kombinaciju:
I!
K 
J !  I  J !
Rješenje:
! 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
Učitati x,y koordinate 10 tačaka. Napisati funkcijski potprogram koji će da računa rastojanja
datih tačaka sa kordinatom XA = 0.5 i YA = 1.0, te naći najveću i najmanju dužinu u glavnom
programu.

Rješenje:
! 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 računa elemente trajektorije kod kosog hica koristeći poziv za
traject funkciju.

Rješenje:
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 određuje reakcije i dimenzionira prostu gredu za slučaj prikazan na slici.
Greda je okruglog poprečnog presjeka. SLIKA

Rješenje:
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)
Učitati matricu A(4×4) i matricu B(4×4), onda naći matricu C kao proizvod matrica A i B.
Ci,j = Ai,k x Bk,j

Rješenje:
! 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(4×4)'
do 10 i=1,4
do 10 j=1,4
print*, i,j
read*, A(i,j)
10 continue
print*, 'Unesite elemente matrice B(4×4)'
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 učitati varijable A i B i pozivom funkcijskog potprograma izračunati sumu
tih varijabli.

Rješenje:
! 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 učitati varijablu X, te pomoću funkcijskog potprograma odrediti:
X2 ako je X>5
f(X)= X2+2 ako je X=5
5X ako je X<5
Rješenje:
!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 VJEŽBU:
IZRACUNATI VRIJEDNOST Y SA KORISTENJEM NAREDBI ZA „BLOKOVSKI USLOVNI
PRELAZAK I LOGICKI USLOVNI PRELAZAK“ ZA DATO Y I DATE USLOVE.

! X2 ZA X>0
! Y = 2X ZA X=0
! X ZA X<0

18
PRIMJER: 21
Učitati matricu A(4×4). Naći sumu elemenata iznad glavne dijagonale. Zatim naći maksimalni
elemenat (vrijednost) i njegove indekse. Sve to obraditi pomoću opšteg potprograma -
subroutine racun.

Rješenje:
! 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
Učitati matricu A(4×4). Naći sumu elemenata ispod glavne dijagonale. Sve to obraditi pomoću
opšteg potprograma - subroutine racun.

Rješenje:
! 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
koristeći cramerov metot i podprogram subroutine cramer.

Rješenje:
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 VJEŽBU
ZADATAK: 1
Napisati program koji pretvara inc u cm.

Rješenje:
! 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
Učitati niz A od 20 elemenata, sortirati ih u opadajućem redoslijedu.

Rješenje:
! 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.

RJEŠENJE:
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 NAJVEĆEG PREMA NAJMANJEM.
BROJEVI SE KREĆU U PODRUČJU OD 1 DO 100, A GENERIRAJU SE SLUČAJNO, POMOĆU GENERATORA
PSEUDOSLUČAJNIH BROJEVA.

RJEŠENJE:
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-pređeni put: Koriste se obrasci za slobodni_pad.

Rješenje:
! 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.

Rješenje:
! 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?

Rješenje:
Uopšteno Rješenje:
! 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.
RJEŠENJE:
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
29
print*, 'Povrsina trougla iznosi',P
end program ponavljanje_6
PRIMJER:7
Napisati program koji manipulise sa vektorima i racuna prosjecnu vrijednost za nekoliko unijetih
ocjena.
RJEŠENJE:
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.
RJEŠENJE:
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'

30
end if
END PROGRAM ponavljanje_8
PRIMJER 9

Nacrtati dijagram toka i napisati kod programa u fortranu koji će učitati n elemenata niza A, zatim naći
sumu elemenata niza A. Sumu elemenata niza A uporediti sa brojem 6.
Ukoliko je izračunata suma < 6 izračunati i ispisati suma + 6/2.
suma > 6 izračunati i ispisati suma - 9/3.

RJEŠENJE:

! 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 učitati dva niza, izvrsiti sabiranje
prvih elemanata nizova te izvrsiti sabiranje zadnjih elemenata nizova. Nakon sabiranja pojedinih
elemenata nizova naći koji je zbir veći i odštampati 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 slučaj 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 slučaj 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, ugrađene funkcije, (dodatni zadaci)
PRIMJER: 1
Napisati program u fortranu koji vrši Multiplikaciju matrica dimenzija , A(3,3) i B(3,3). A zatim
vrsi provjeru pomocu ugrađene funkcije za množenje matrica.

RJEŠENJE:
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
UGRAĐENE 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:
Učitati matricu A(3,3) i matricu B (3,3), zatim naći 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 VRŠI PRONALAŽENJE 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