You are on page 1of 14

Skripta za Raunare i programiranje

Izudin Deli

Primjer 1.
Uitati niz od 10 elemenata i nai sumu lanova na parnim i proizvod elemenata
na neparnim mjestima. Sumu i proizvod odtampati u glavnom programu.
! 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 2.
Uitati 20 elemenata niza A, sortirati ih u rastuem redosljedu i odtampati.
! ucitati niz A od 20 elemenata, napisati prog. za sortiranje u rastucem redosljedu
dimension A(20)
print*, 'Program za sortiranje el. niza A u rastucem 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) .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

Skripta za Raunare i programiranje

Izudin Deli

Primjer 3.

Uitati matricu A(44) i matricu B(44), onda nai matricu C kao proizvod matrica
A i B.
Ci,j = Ai,j x Bi,j
! 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 4.

U glavnom programu uitati varijable A i B i pozivom funkcijskog potprograma


izraunati sumu tih varijabli.
! 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
2

Skripta za Raunare i programiranje

Izudin Deli

Primjer 5.
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

!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
3

Skripta za Raunare i programiranje

Izudin Deli

Primjer 6.
U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom
funkcijskog potprograma izraunati kombinaciju:
I!
K
J ! I J !
! 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
Primjer 7.
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.
! 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)
4

Skripta za Raunare i programiranje

Izudin Deli

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
Primjer 8.
Uitati matricu A(44). Nai sumu elemenata iznad glavne dijagonale. Zatim nai
maksimalni elemenat (vrijednost) i njegove indekse. Sve to obraditi pomou opteg
potprograma.
! 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

Skripta za Raunare i programiranje

Izudin Deli

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
Primjer 9.
Uitati matricu A(44). Nai sumu elemenata ispod glavne dijagonale. Sve to
obraditi pomou opteg potprograma.
! 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

Skripta za Raunare i programiranje

Izudin Deli

Primjer 10.
Napraviti program za proraun reakcija, momenata savijanja i transverzalnih sila
na desetinama raspona proste grede optereene ravnomjernim kontinuiranim
optereenjem.
real m,t,q,l
print*, 'program za proracun m i t sila proste grede'
print*, 'za ravnomjerno kontinuirano opterecenje'
print*, 'na desetini raspona grede'
print*, 'unesite staticki raspon grede kao realan broj'
print*, 'staticki raspon grede l='
read*, l
print*, 'unesite vrijednost opterecenja kao realan broj'
print*, 'vrijednost opterecenja q='
read*, q
r=q*l/2
print*, 'reakcije oslonca su= ',r
print*, 'momenti savijanja na desetinama raspona'
do 10 i=0,10
m=r*(i*l/10)-q*(i*l/10)**2/2
print*, i,m
10 continue
print*, 'transverzalne sile na desetinama raspona'
do 20 k=0,10
t=r-q*(k*l/10)
print*, k,t
20 continue
stop
end
Primjer 11.
program vjezba2
!
!
!

ovaj program manipulise sa vektorima


i racuna prosjecnu vrijednost za nekoliko unijetih ocjena
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
print*,'************************************';

Skripta za Raunare i programiranje

Izudin Deli

zbir=0
! inicijalizacija (davanje pocetne vrijednosti)
unos: do i=1,5
print*,'unesite ocjene iz predmeta'
print*,i,'predmet: ',predmeti(i)
read(*,*)ocjene(i)
zbir=zbir+ocjene(i)
end do unos
print*,'********************************';
prosjek=0.2*zbir
! efikasnije je mnozenje nego dijeljenje /5
print*,'PROSJECNA OCJENA IZNOSI ',prosjek
end program vjezba2
Pimjer 12.
program vjezba3
! 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
end program vjezba3

Skripta za Raunare i programiranje

Izudin Deli

Primjer 13.
!
!

program vjezba4
ovaj program racuna povrsinu 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
racunamo stranice
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*, '*******************************************************************'
print*, 'Povrsina trougla iznosi',P
end program vjezba5

Primjer 14.
program vjezba5
! ovaj program racuna vrijednost reakcija,momenta savijanja i maksimalnih
napona za prostu gredu opterecenu kontinualnim opterecenjem.
! Dato je: L,l1,l2,q,W;
implicit none
INTEGER i,N;
REAL:: Ra,Rb,L,l1,l2,q,M(30),x,dx,W;
N=30;
print*, 'UNESI RASPON GREDE L[m]'
read(*,*) L
print*, 'UNESI POLOZAJ 1 KONTINUALNOG OPTERECENJA l1[m]'
read(*,*) l1
print*, 'UNESI DUZINU KONTINUALNOG OPTERECENJA l2[m]'
read(*,*) l2
print*, 'UNESI VRIJEDNOST KONTINUALNOG OPTERECENJA q[kN/m]'
read(*,*) q
print*, 'UNESI VRIJEDNOST OTPORNOG MOMENTA PRESJEKA [cm3]'
read(*,*) W
! reakcije oslonaca
Ra=q*l2*(L-l1-0.5*l2)/L
Rb=q*l2-Ra
! moment savijanja duz raspona
dx=L/N

Skripta za Raunare i programiranje

Izudin Deli

do i=1,N
x=i*dx
if (x.le.l1) then
M(i)=Ra*x
else if (x.ge.l1.and.x.le.l1+l2) then
M(i)=Ra*x-q*(x-l1)*(x-l1)/2.
else
M(i)=Rb*(L-x)
end if
end do
print*, 'REAKCIJE U OSLONCIMA IZNOSE: Ra=',Ra,'kN ','Rb=',Rb,'kN'
print*, 'MOMENT SAVIJANJA [kNm] i MAKSIMALNI NAPON [kN/cm2]'
do i=1,N
print*, i,M(i),100.*M(i)/W
end do
end program vjezba5
Primjer 15.
!
!

100

program vjezba_6
ovaj program vrsi sortiranje datog niza prema velicini clanova
Nakon sortiranja, originalni i sortirani niz se ispisuju na ekran
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
format(i5,5x,i5)
end program vjezba_6

10

Skripta za Raunare i programiranje

Izudin Deli

Primjer 16.
!
!

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)
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
Primjer 17.
!
!

program vjezba8
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';
11

Skripta za Raunare i programiranje

101

Izudin Deli

read(*,*) alfa;
call Rotacija(X,alfa,Xrot)
print*,'Zarotirani vektor ima koordinate:'
do i=1,3
write(*,101), i,Xrot(i)
end do
format(i3,3x,f8.3,/)
end program vjezba8

!********************************************************

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

12

Skripta za Raunare i programiranje

Izudin Deli

Primjer 18.
!
!

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

13

Skripta za Raunare i programiranje

Izudin Deli

Primjer 19.
!

10

program vjezba10
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)
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 vjezba10

14

You might also like