Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

Rjeeni primjeri - Fortran

Primjer 1 - Mjerenje temperatura


U svakoj od deset mjernih toaka toplinskog sustava izvedeno je N mjerenja temperature. Potrebno
je napisati program koji e odrediti minimalnu, maksimalnu i srednju izmjerenu temperaturu u svakoj
od mjernih toaka, te ukupnu minimalnu, maksimalnu i srednju temperaturu za sva mjerenja. Broj
mjerenja za jednu mjernu toku ne moe biti vei od 100.

Algoritam
o
o
o
o

Uitati broj mjerenja N


Ako je N manji od 2 ili vei od 100 ispisati poruku i zaustaviti program.
Unijeti izmjerene temperature za sve mjerne toke i sva mjerenja.
Postaviti poetne veliine:
Tmaxu = T1,1
Tminu = T1,1
Tsredu = 0.0

Za svaku mjernu toku unutar petlje izraunati:

Tmax,i = Ti,1
Tmin,i = Ti,1
Tsred,i = Ti,1 / N
o

Za svako mjerenje unutar petlje izraunati:


za Ti,j > Tmax,i Tmax,i = T i,j
za Ti,j < Tmin,i Tmin,i = T i,j

sumirati: Tsred,i = Tsred,i + Ti,j / N


o

Kraj petlje za mjerenja.

Tsredu = Tsredu + Tsred,i / 10


za Tmax,i > Tmaxu Tmaxu = Tmax,i
za Tmin,i < Tminu Tminu = Tmin,i
o
o

Kraj petlje za mjerne toke:


Ispisati Tminu, Tmaxu, Tsredu i za svaku mjernu toku:

i, Tmin,i, Tmax,i, Tsred,i

Program

C -------------------------------------------------------------------C Program : TEMP.FOR


C Namjena : Program za izracunavanje minimalne, maksimalne i srednje
C temperature u svakoj od 10 mjernih tocaka, te ukupne
C minimalne, maksimalne i srednje temperature.
C Ulaz : N, T(i,j), i=1,10, j=1,N
C Izlaz : Tminu, Tmaxu, Tsredu, Tmin(i), Tmax(i), Tsred(i), i=1,10
C --------------------------------------------------------------------

program TEMP

integer N ! Broj mjerenja


real T(10,100) ! Polje temperatura
real Tmin (10) ! Polje min. temp. za mjerne tocke
real Tmax (10) ! Polje max. temp. za mjerne tocke
real Tsred(10) ! Polje srednjih temp. za mjerne tocke
real Tminu ! Ukupna min. temp.
real Tmaxu ! Ukupna max. temp.
real Tsredu ! Ukupna srednja temp.

write ( 6, 10 )
10 format ( ' Broj mjerenja N: ', $)
read ( 5, * ) N

if ( N .LT. 2 .OR. N .GT. 100 ) then


write (6, 20) N
20 format(' Greska: N = ', i3, ', a mora biti 2 <= N <= 100')

stop
end if
write ( 6, 30 )
30 format ( ' ***** Unos temperatura T: *****' )

do i = 1, 10
do j = 1, N
write (6, 40) i, j
40 format(' T(', i2, ',', i3, '): ', $)
read ( 5, * ) T(i,j)
end do
end do
Tmaxu = T (1,1) ! Inicijalizacija pocetnih
Tminu = T (1,1) ! velicina za Tmaxu, Tminu
Tsredu = 0.0 ! i Tsredu
do i = 1, 10
Tmax (i) = T(i,1)
Tmin (i) = T(i,1)
Tsred(i) = T(i,1) / FLOAT(N)
do j = 2, N
if ( T(i,j) .GT. Tmax(i) ) then
Tmax(i) = T(i,j)
end if
if ( T(i,j) .LT. Tmin(i) ) then
Tmin(i) = T(i,j)
end if
Tsred(i) = Tsred(i) + T(i,j) / FLOAT(N)
end do
Tsredu = Tsredu + Tsred(i) / 10.0

if ( Tmax(i) .GT. Tmaxu ) then


Tmaxu = Tmax(i)
end if
if ( Tmin(i) .LT. Tminu ) then
Tminu = Tmin(i)
end if
end do

write ( 6, 50 ) Tminu, Tmaxu, Tsredu


50 format ( 3x, 'Tminu = ', g10.3, /,
> 3x, 'Tmaxu = ', g10.3, /,
> 3x, 'Tsredu = ', g10.3 )

do i = 1, 10
write ( 6, 60 ) i, Tmin(i), Tmax(i), Tsred(i)
60 format( 3x, 'Tocka: ', i3, 3x, 'Tmin = ', g10.3,
* 3x, 'Tmax = ', g10.3, 3x, 'Tsred = ', g10.3 )
end do
stop
end

Primjer 2 - Sortiranje
Sortirati niz od N realnih brojeva u rastui niz.

Algoritam
o
o
o
o
o

Uitati N
Uitati niz realnih brojeva Xi, i=1,N
Petlja j = 1, N-1
Petlja i = 1, N-j
U sluaju da je Xi > Xi+1 zamijeniti mjesta na slijedei nain:

Ispisati sortirani niz.

y = Xi
Xi = Xi+1
Xi+1 = y

Program u FORTRAN-u (Bubble sort)

C -------------------------------------------------------------------C Program : SORT.FOR


C Namjena : Program za sortiranje niza od N clanova u rastuci niz
C Ulaz : N, X(i), i=1,N
C Izlaz : Sortirani niz X(i), i=1,N
C --------------------------------------------------------------------

Program SORT

real X(100) ! Niz realnih brojeva za sortiranje


integer N

write (6, 10)


10 format (' Broj clanova niza N: ', $)
read (5, *) N

write (6, 20)


20 format (' ***** Clanovi niza X: *****')

do i = 1, N
write (6, 30) i
30 format(' X(', i3, '): ', $)
read (6, *) X(i)
end do

do j = 1, N-1
do i = 1, N-j
if ( X(i) .GT. X(i+1) ) then
y = X(i)
X(i) = X(i+1)
X(i+1) = y
end if
end do
end do

write (6, 40)


40 format(' ***** Sortirani niz *****')
do i = 1, N
write (6, 50) i, X(i)
50 format(3x, 'X(',i3, ') = ' F10.3 )
end do

end

Primjer 3 - Bisekcija
Nainiti program koji e odrediti nultoku funkcije f(x) = 0 u intervalu [x1, x2] uz odreenu tonost ,
metodom bisekcije. Za izraunavanje vrijednosti funkcije f(x) nainiti funkcijski potprogram.

Algoritam
o

Uitati granice intervala x1 i x2 te traenu tonost .

Provjeriti da li funkcija u zadanom intervalu mijenja predznak:


ne, ispisati poruku i zaustaviti program.

Petlja koja se prekida kada se zadovolji jedan od uvjeta:

o
o
o

Izraunati meutoku:
Provjeriti uvjete. Ako su zadovoljeni ispisati vrijednost nultoke.
Provjeriti u kojoj polovici inetervala funkcija mijenja predznak:

Ponovo izraunati meutoku s novim vrijednostima x1 i x2

Program u FORTRAN-u

C -------------------------------------------------------------------C Program : BISEKC.FOR


C Namjena : Program za pronalazenje nultocke funkcije u zadanom
C intervalu [x1, x2] metodom bisekcije.
C Primjer: y = x^3 - 1.5 u intervalu [1, 2] uz eps = 1.E-6
C x0 = 1.144714
C Ulaz : x1, x2, eps
C Izlaz : x0
C --------------------------------------------------------------------

Program BISEKC

. Ako

real x1 ! Donja granica intervala


real x2 ! Gornja granica intervala
real Eps ! Trazena tocnost
real x0 ! Polovina intervala ili nultocka

write (6, 10)


10 format(' Donja granica intervala x1 : ', $)
read (5, *) x1
write (6, 20)
20 format(' Gornja granica intervala x2 : ', $)
read (5, *) x2
write (6, 30)
30 format(' Trazena tocnost .........eps: ', $)
read (5, *) Eps

if (FUN(x1) * FUN(x2) .GT. 0.0) then


write (6, 40)
40 format(' U zadanom intervalu funkcija ne mijenja predznak')
stop
end if

do while (.TRUE.)
x0 = (x1 + x2) / 2.0
if ( ABS(x2-x1) .LE. Eps .OR. ABS(FUN(x0)) .LE. Eps) then
write (6, 50) x0
50 format( ' Nultocka x0 = ', g12.7)
stop
end if

if (FUN(x1) * FUN(c) .LT. 0.0) then


x2 = x0
else
x1 = x0
end if
end do
end

C ..... Funkcija: y = x^3 - 1.5


real function FUN(x)
real x ! Argument funkcije
FUN = x**3 - 1.5 ! Vrijednost funkcije
return
end

Primjer 4 - Punjenje spremnika

Potrebno je odrediti visinu h do koje


je spremnik radijusa R u obliku kugle
ispunjen tekuinom zadanog
volumena Vzad uz tonost .
Volumen kuglina odsjeka je:

.
Zadano: R, Vzad,

Algoritam
o
o

Uitati ulazne podatke: R, Vzad, .


Inicijalizirati poetne vrijednost:
h = R - pretpostavljena poetna visina,
h1 = R / 10 - pretpostavljeni poetni korak za poveavanje visine,
h2 = R / 10 - pretpostavljeni ppoetni korak za smanjivanje visine.

o
o

Petlja koja se prekida kada se zadovolji uvjet:


Izraunati volumen kao funkciju pretpostavljene visine h prema gore navaedenoj formuli.

o
o

. Ako je uvjet zadovoljen ispisati visinu


Provjeriti uvjet za prekid iteracije:
h i zaustaviti program.
Ako uvjet nije zadovoljen provjeriti da li je izraunati volumen vei od zadanog

S novom vrijednou h ponovo izraunati volumen.

Program

C -------------------------------------------------------------------C Program : SPREM.FOR


C Namjena : Izracunavanje visine h do koje je spremnik (u obliku
C kugle polumjera R) ispunjen tekucinom zadanog volumena
C Vzad, uz tocnost Eps.
C Ulaz : R, Vzad, Eps
C Izlaz : h
C --------------------------------------------------------------------

Program SPREM

real R ! Polumjer kuglastog spremnika


real Vzad ! Zadani volumen tekucine
real Eps ! Trazena tocnost
real Vizr ! Izracunati volumen
real dh1, dh2 ! Korekcije visine
real Pi ! Konstanta Pi

data Pi / 3.1415927 /

write (6, 10)


10 format(' Polumjer spremnika R: ', $)
read (5, *) R

write (6, 20)


20 format(' Zadani volumen Vzad : ', $)
read (5, *) Vzad

write (6, 30)


30 format(' Trazena tocnost Eps : ', $)
read (5, *) Eps

h = R ! Pocetni h
dh1 = R / 10.0 ! Pocetni korak za povecavanje
dh2 = R / 10.0 ! Pocetni korak za smanjivanje

do while (.TRUE.)
Vizr = 1.0 / 3.0 * h**2 * Pi * ( 3.0 * R - h )
if ( ABS(Vzad - Vizr) .LE. Eps) then
write (6, 40) h

40 format(' Visina tekucine h = ', f12.5)


stop
endif
if (Vizr .GT. Vzad) then
h = h - dh2
dh1 = dh2 / 2.0
else
h = h + dh1
dh2 = dh1 / 2.0
end if
end do

end

Primjer 5 - Vrijednost i derivacije polinoma


Za zadani polinom n-tog reda i argument x potrebno je izraunati vrijednost polinoma i vreijednosti
svih derivacija polinoma. Za polinom
vrijednost polinoma se moe izraunati po Hornerovoj shemi:

i zadani argument x,

Program

C -------------------------------------------------------------------C Program : POLI.FOR


C Namjena : Izracunavanje vrijednosti polinoma i svih derivacija
C polinoma zadanu vrijednost argumenta x
C Ulaz : N, A(i), i = 0, N
C Izlaz :
C --------------------------------------------------------------------

Program POLI
integer N ! Red polinoma
real A(21) ! Polje koeficijenata
real X ! Argument polinoma
real Y ! Vrijednost polinoma
real D(20) ! Vrijednosi derivacija
character NoviP ! Novi polinom (D/N)
character NoviX ! Novi argument X (D/N)

NoviP = 'D' ! Pocetne vrijednosti


NoviX = 'D' ! CHARACTER varijabli
do while (NoviP .EQ. 'D' .OR. NoviP .EQ. 'd')
write (6, 10)
10 format (' Red polinoma N: ', $)
read (5, 20) N
20 format (i3)
do i = 0, N
write (6, 30) i
30 format (' A(', i2, '): ', $)
read (5, 40) A(i+1)
40 format (f10.0)
end do ! Kraj petlje i = 0, N
do while (NoviX .EQ. 'D' .OR. NoviX .EQ. 'd')
write (6, 50)
50 format (' X : ', $)
read (5, 40) X
NA = N + 1
Y = VALUE(A, NA, X) ! Poziv funkcije VALUE
write (6, 60) Y

60 format (' P(X) = ', g15.7)


call DERIV (A, NA, X, D) ! Poziv potprograma DERIV
do i = 1, N
write (6, 70) i, D(i)
70 format (4x, i2, '. derivacija = ', g15.7)
end do ! Kraj petlje i = 1, N
write (6, 80)
80 format(' Novi argument X (D/N): ', $)
read(5, 100) NoviX
end do ! Kraj petlje NoviX
NoviX = 'D'
write (6, 90)
90 format(' Novi polinom (D/N) : ', $)
read(5, 100) NoviP
100 format(a1)
end do ! Kraj petlje NoviP

stop
end
C ---------------------------------------------------------------------C Funkcijski potprogram VALUE
C Namjena: Izracunavanje vrijednosti polinoma
C y = A0 + A1 x + A2 x^2 + A3 x^3 + ... + An x^n
C Horherovom shemom
C y = (...(An x + An-1)x + ...)x + A1 x + A0
C Nacin poziva: Y = VALUE (A, NA, X)
C Ulazni parametri: A - Vektor koeficijenata polinoma
C NA - Broj elamenata vaktora A
C X - Argument

C ---------------------------------------------------------------------real function VALUE (A, NA, X)


integer NA
real A(NA)
real X
if (NA .LE. 0) then
VALUE = 0.0
else
VALUE = A(NA)
do i = NA-1, 1, -1
VALUE = VALUE * X + A(i)
end do
endif
return
end
C ---------------------------------------------------------------------C Potprogram: DERIV
C Namjena: Izracunavanje svih derivacija zadanog polinoma
C y = A0 + A1 x + A2 x^2 + A3 x^3 + ... + An x^n
C Ulazni parametri: A - Vektor koeficijenata polinoma
C NA - Broj elemenata vektora A
C X - Argument
C Izlazni parametri: D - Vektor derivacija polinoma
C ---------------------------------------------------------------------subroutine DERIV (A, NA, X, D)
integer NA ! Broj elemenata vektora A
real A(NA) ! Vektor koeficijenat polinoma
real D(NA-1) ! Vektor derivacija polinoma]
real X ! Argument

integer ND ! Broj derivacija


integer i, j, K ! Indeksi petlji
ND = NA - 1
do j = 1, ND
K = ND - j + 1
do i = 1, K
A(i) = A(i+1) * FLOAT(i)
end do ! Kraj petlje i = 1, K
D(j) = VALUE (A, K, X)
end do ! Kraj petlje j = 1, ND
return

end

Primjer 6 - Oblikovanje ispisa matrice


Napraviti program koji e formirati i ispisati dvodimenzionalno polje slijedeeg oblika za zadani
sredinji broj N.

1 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 3 3 2 1
1 2 3 4 . . . 4 3 2 1
1 2 3 4 . N . 4 3 2 1
1 2 3 4 . . . 4 3 2 1
1 2 3 3 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1 1

Program
C --------------------------------------------------------------------

C Program : MATR.FOR
C Namjena : Formiranje i ispis matrice zadanog oblika
C Ulaz : N
C Izlaz : Matrica zadanog oblika
C --------------------------------------------------------------------

Program MATRICA
integer N ! Sredisnji broj
integer MAT(20,20) ! Matrica
write (6, 10)
10 format (' Sredisnji broj N: ', $)
read (5, *) N
M = 2 * N - 1
do i = 1, M
do j = i, (M-i+1)
MAT(j,i) = i
MAT(i,j) = i
MAT(M-i+1,j) = i
MAT(j,M-i+1) = i
end do
end do

do i = 1, M
write (6, 20) (MAT(i,j), j = 1, M)
20 format (20(1x,i2))
end do

end

You might also like