Top Banner
F O R T R A N Vežbe Autor: Milan Gocić Predmet: Informatika II Poslednje izmene: 10.12.2011.
51

Fortran vežbe

Jan 02, 2017

Download

Documents

danglien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Fortran vežbe

F O R T R A N

Vežbe Autor: Milan Gocić Predmet: Informatika II Poslednje izmene: 10.12.2011.

Page 2: Fortran vežbe

Informatika 2, Milan Gocić

2

SADRŽAJ

ČAS 1 ............................................................................................................................... 3 ČAS 2 ............................................................................................................................... 13 ČAS 3 ............................................................................................................................... 17 ČAS 4 ............................................................................................................................... 20 ČAS 5 ............................................................................................................................... 26 ČAS 6 ............................................................................................................................... 29 ČAS 7 ............................................................................................................................... 32 ČAS 8 ............................................................................................................................... 36 ČAS 9 ............................................................................................................................... 39 ČAS 10 ............................................................................................................................... 43

Page 3: Fortran vežbe

Informatika 2, Milan Gocić

3

- ČAS 1 -

Azbuka Fortan jezika

FORTRAN je programski jezik definisan nad skupom osnovnih i izvedenih simbola. Osnovne simbole čine slova engleske azbuke (velika i mala), cifre dekadnog brojnog sistema i specijalni znaci: S = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y, z,0,1,2,3,4,5,6,7,8,9,+,-,*,/,(,),=, , ,.,$,’, Δ} Izvedeni simboli su niske osnovnih simbola koje se koriste u okviru FORTRAN naredbi, ali po svojoj funkciji u naredbi imaju smisao jednog simbola. Izvedeni simboli koji se koriste u FORTRAN-u su:

a) znaci aritmetičkih operacija, b) logičke konstante, c) znaci logičkih operacija, d) relacijski znaci i e) službene reči.

Aritmetičke operacije

Logičke operacije

Logička operacija Simbol u FORTRAN-u

Operacija u matematici u FORTRAN-u

negacija .NOT. p¬ .NOT.P konjunkcija .AND. qp ∧ P.AND.Q disjunkcija .OR. qp ∨ P.OR.Q ekvivalencija .EQV. qp ⇔ P.EQV.Q ekskluzivna disjunkcija (isključivo ili) .XOR. qp ⊕ P.XOR.Q Relacije poređenja

Relacija poređenja Simbol u FORTRAN-u

Predikat u matematici u FORTRAN-u

manje od .LT. yx < X.LT.Y manje ili jednako .LE. yx ≤ X.LE.Y

jednako .EQ. yx = X.EQ.Y

različito .NE. yx ≠ X.NE.Y veće ili jednako .GE. yx ≥ X.GE.Y veće od .GT. yx > X.GT.Y

Aritmetička operacija

Simbol u FORTRAN-u

Operacija u matematici u FORTRAN-u

sabiranje + yx + X+Y oduzimanje - yx − X-Y množenje * yx ⋅ X*Y deljenje / ( )yxiliyx :/ X/Y

stepenovanje ** yx X**Y

Page 4: Fortran vežbe

Informatika 2, Milan Gocić

4

Službene reči

Službene reči su engleske reči koje se koriste u Fortranu kao simboli. Greške u pisanju ovih reči dovode do pojave sintaksnih grešaka pri prevođenju programa sa Fortran jezika na mašinski jezik. Službene reči ne mogu se koristiti kao simbolička imena. Primeri službenih reči: PROGRAM, END, READ, WRITE, SUBROUTINE, FUNCTION, IF, ELSE.

Elementarne konstrukcije FORTRAN jezika

Elementarne konstrukcije FORTRAN jezika su:

a) podatak, b) simboličko ime, c) struktura podataka i d) izraz.

Podatak Zapis informacije koja je predmet obrade na računaru zove se podatak. Podaci mogu da reprezentuju različite informacije u računaru pa se zato razlikuju po tipu. Prema tipu podatak može biti:

a) numerički (celobrojni i realni), b) logički, c) alfabetski i d) kompleksni.

Ako podatak predstavlja jednu veličinu koja se pri obradi na računaru, po pravilu, ne razlaže na elementarne delove, tada kažemo da je to elementarni podatak. Simboličko ime Simboličko ime je niska od jednog do šest slova i/ili cifara pri čemu prvi simbol mora biti slovo (kod nekih kompilatora 8, do najviše 31, gde se simboli preko 6 ili 8 ne uzimaju u obzir). Simboličko ime ne sme da sadrži specijalne znake i ne sme biti službena reč. Primer 1.1. Da li sledeće reči mogu biti simbolička imena ili ne? a) INDEKS _____DA_______________ b) LAMBDA _____DA_______________ c) Masa _____DA_______________ d) KOL. _____NE_______________ e) ČLAN _____NE_______________ f) MES-AR _____NE_______________ g) BAROMETAR _____DA_______________ h) PREZIME _____DA_______________ Izraz Izraz je zapis postupka kojim se definiše dobijanje (izračunavanje) jednog rezultujućeg podatka na osnovu jednog ili više podataka.

Prema vrsti podataka nad kojima se vrši izračunavanje izraz može biti: a) aritmetički, b) znakovni, c) logički i d) relacijski.

Page 5: Fortran vežbe

Informatika 2, Milan Gocić

5

Konstanta

Konstanta je veličina koja ne menja svoju vrednost tokom izvršenja programa. U FORTRAN jeziku postoje tri vrste konstanti:

• numeričke konstante, • logičke konstante, • alfabetske konstante (literali, Hollerith-konstante).

Numeričke konstante Numeričke konstante mogu biti:

• celobrojne (Integer) konstante, • realne konstante (u jednostrukoj ili dvostrukoj tačnosti), u obliku nepokretne tačke (Fixed point) i

pokretne tačke (Floating point), • kompleksne konstante, formirane od realnih konstanti za realni i imaginarni deo konstante, sa

jednostrukom i dvostrukom tačnošću, u obliku nepokretne i pokretne tačke, • oktalne konstante (za specijalno korišćenje), • heksadecimalne konstante (za specijalno korišćenje).

Logičke konstante Logičke konstante mogu biti:

• .TRUE. (tačno) i • .FALSE. (netačno).

Alfabetske konstante Alfabetske konstante se formiraju od niza ASCII karaktera koji su dodeljeni numeričkim konstantama po principu “jedno slovo u jedan bajt“.

Promenljiva Za razliku od konstanti, promenljive veličine ili kraće promenljive, menjaju svoju vrednost tokom izvršenja programa. Promenljive se označavaju nizom simbola koji mora da zadovolji sledeće uslove:

• prvi simbol mora biti slovo engleske azbuke ili specijalni znak ($), • ostali simboli mogu biti slova engleske azbuke, specijalni znak $ ili cifre dekadnog brojnog

sistema, • broj simbola u nizu je ograničen obično na 6 ili 8 simbola, zavisno od kompilatora (ostatak

simbola u nizu do najviše 31 se ne uzima u obzir). Niz simbola koji definiše promenljivu naziva se ime promenljive. Svaku promenljivu odlikuje:

• ime, • tip, • oblast definisanosti i • tekuća vrednost.

Page 6: Fortran vežbe

Informatika 2, Milan Gocić

6

Tip promenljive Promenljive mogu biti sledećeg tipa:

• celobrojne promenljive (INTEGER), • realne promenljive (REAL), • realne promenljive dvostruke tačnosti (DOUBLE PRECISION), • kompleksne promenljive (COMPLEX), • promenljive tipa LOGICAL (dodeljuju im se logičke vrednosti), • alfabetske promenljive ili promenljive tipa CHARACTER.

Deklarisanje vrste promenljivih

Postoje tri načina deklarisanja vrste promenljivih:

a) unutrašnja konvencija FORTRAN jezika, b) eksplicitna deklaracija i d) implicitna deklaracija. Pravila unutrašnje konvencije su: a) ako ime promenljive počinje slovom I, J, K, L, M ili N, to je celobrojna promenljiva, b) ako ime promenljive ne počinje jednim od prethodno navedenih slova, to je realna promenljiva. Opšti oblik eksplicitne deklaracije je

<tip> <lista>

gde su: <tip> - službena reč koja pripada skupu S={INTEGER, REAL, DOUBLE PRECISION (REAL*8), COMPLEX, LOGICAL, CHARACTER}

- <lista> - imena promenljivih međusobno razdvojena zapetama.

Opšti oblik implicitne deklaracije je IMPLICIT <tip> < lista>,

gde je IMPLICIT službena reč FORTRAN jezika koja označava implicitnu deklaraciju, <tip> - službena reč koja pripada skupu reči S={INTEGER, REAL, DOUBLE PRECISION

(REAL*8), COMPLEX, LOGICAL, CHARACTER} <lista> - spisak simbola kojima počinju imena promenljivih željenog tipa, međusobno razdvojenih

zarezima. Primer 1.2. Napisati implicitnu deklaraciju tipa promenljivih tako da sve promenljive čija imena počinju slovima A, B, C, D, E, F, budu promenljive tipa REAL, a promenljive čija imena počinju ostalim slovima abecede budu tipa INTEGER (celobrojne). Odgovor: IMPLICIT REAL (A-F), INTEGER (G-Z) Primer 1.3. Napisati implicitnu deklaraciju vrste promenljivih kojom će se obrnuti unutrašnja konvencija FORTRAN jezika, tj. celobrojne promenljive da postanu realne promenljive obične tačnosti, a realne promenljive da postanu celobrojne (INTEGER) promenljive. Odgovor: IMPLICIT REAL(I-N), INTEGER(A-H, O-Z)

Page 7: Fortran vežbe

Informatika 2, Milan Gocić

7

Format specifikacije Da bi se program mogao uspešno prevesti u izvršni program, moraju se zadovoljiti sledeća pravila za pisanje izvornog koda: kolona polje 1 komentar 1-5 obeležje naredbi 6 identifikator nastavka linije 7-72 naredbe 73-80 identifikacija (FORTRAN kompilator ignoriše te kolone)

Kao oznaka za komentar koristi se C u 1. koloni. Komentar se može naći u bilo kojem delu programa i bez značaja je za prevodilac FORTRAN programa i služi za lakše praćenje programa. Takođe se u programu mogu nalaziti i prazni redovi koji doprinose većoj preglednosti programa. U 6. koloni kada se označava nastavak prethodne linije može stajati bilo koji znak izuzev 0 ili blanko znaka, a najčešće se koristi *. Na ovaj način jedna naredba može biti zapisana u najviše 20 redova (zavisi od kompilatora). Ustanovljeni redosled naredbi u FORTRANu je sledeći:

1. PROGRAM, FUNCTION, SUBROUTINE ili BLOCK DATA naredba, 2. PARAMETER naredbe i/ili IMPLICIT naredbe, 3. ostale specifikacione naredbe (izuzev DATA naredbi), 4. funkcijske naredbe, 5. izvršne naredbe, 6. END naredba.

Dopunska pravila su: 1. Naredbe FORMAT i ENTRY se mogu nalaziti na bilo kojem mestu programske jedinice između prve naredbe programske jedinice i naredbe END, pri čemu se naredba ENTRY ne sme pojaviti u okviru programskih ciklusa definisanih naredbama DO i u okviru IF naredbe i njoj odgovarajuće ENDIF naredbe. 2. Sve specifikacione naredbe moraju prethoditi DATA naredbama. 3. PARAMETER naredbe se mogu međusobno izmeštati sa IMPLICIT naredbama i ostalim specifikacionim naredbama, izuzev DATA naredbama. Opisne naredbe koje specificiraju vrstu simboličkih imena konstanti moraju prethoditi naredbama PARAMETER koje definišu ta simbolička imena. Naredbe PARAMETER moraju prethoditi onim opisnim naredbama koje koriste simbolička imena konstanti definisana naredbama PARAMETER. 4. DATA naredbe se mogu međusobno izmeštati sa funkcijskim naredbama i izvršnim naredbama. 5. Komentari se mogu nalaziti na bilo kojem mestu programske jedinice. Mogu prethoditi prvoj naredbi programske jedinice i moraju prethoditi naredbi END. I specifikacija Koristi se za podatke tipa INTEGER (sva tri tipa). Opšti oblik:

n I k gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, I – slovo, koje ukazuje da je reč o opisu celobrojnog polja (engl. Integer), k – neoznačen ceo broj, koji određuje broj pozicija celobrojnog polja. F specifikacija Koristi se za podatke tipa REAL, DOUBLE PRECISION i COMPLEX (predstavljeni u fiksnom zarezu). Opšti oblik:

Page 8: Fortran vežbe

Informatika 2, Milan Gocić

8

n F k.d gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, F – slovo, koje ukazuje da je reč o opisu realnog broja (engl. Fixed point), k – neoznačen ceo broj, koji određuje broj pozicija realnog polja, d – neoznačen ceo broj, koji određuje broj decimalnih mesta brojnog podatka. E specifikacija Koristi se za podatke tipa REAL, DOUBLE PRECISION i COMPLEX (predstavljeni u pokretnoj zapeti, engl. Floating point). Opšti oblik: nE k.d gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, E – slovo, koje ukazuje da je reč o eksponencijalnom zapisu broja (engl. Exponential form), k – neoznačen ceo broj, koji određuje broj pozicija realnog polja, d – neoznačen ceo broj, koji određuje broj decimalnih mesta brojnog podatka. D specifikacija Koristi se za podatke tipa REAL, DOUBLE PRECISION i COMPLEX (predstavljeni u pokretnoj zapeti sa dvostrukom tačnošću). Opšti oblik: nD k.d gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, D – slovo, koje ukazuje da je reč o zapisu broja dvostruke tačnosti,

k – neoznačen ceo broj, koji ukazuje na broj pozicija u polju koje sadrži konstantu dvostruke tačnosti, d – neoznačen ceo broj, koji ukazuje na broj decimalnih mesta konstante dvostruke tačnosti. L specifikacija Koristi se za logičke vrednosti. Opšti oblik: nL k gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, L – slovo, koje ukazuje da je reč o zapisu logičke konstante, k – neoznačen ceo broj, koji određuje broj pozicija polja. A specifikacija Koristi se za podatke tipa CHARACTER. Opšti oblik: A k gde su: k – neoznačen ceo broj, koji određuje dužinu polja, A – slovo, koje ukazuje da je reč o alfabetskoj (slovnoj) konstanti. U slučaju da se navede parametar k to znači da se uzima k karaktera, a ako se ne navodi tada se za dužinu uzima specifikacija iz CHARACTER opisa. X specifikacija Definiše broj praznih mesta kod štampanja.

Page 9: Fortran vežbe

Informatika 2, Milan Gocić

9

Opšti oblik: nX gde su: n – neoznačen ceo broj, koji određuje broj ponavljanja, X – slovo, koje ukazuje da je reč o praznom polju. Primer 1.4. Sledeće konstante/ promenljive su realne/ celobrojne/ neispravne: konstanta/promenljiva realna/ celobrojna/ neispravno a) (X61) ____________________ ______ neispravno_____ b) 3.5E02 ______ konstanta______ ______ realna_________ c) PAUSE ____________________ ______ neispravno_____ d) YU126 _____ promenljiva_____ ______ realna_________ e) KAT _____ promenljiva_____ ______ celobrojna______ f) END ____________________ ______ neispravno_____ g) X+3 ____________________ ______ neispravno_____ h) INDEX _____ promenljiva_____ ______ celobrojna______ i) T1.4 ____________________ ______ neispravno_____ j) 42Y ____________________ ______ neispravno_____

Bibliotečke (INTRINSIC) funkcije

Matematika FORTRAN Opisa ABS(a) Apsolutna vrednost

MOD(a,b) Modularna aritmetika ae EXP(a) Eksponencijalna funkcija

ln a ALOG(a) Logaritamska funkcija alog10 ALOG10(a)

a SQRT(a) Kvadratni koren sin a SIN(a)

Trigonometrijske funkcije

cos a COS(a) tan a TAN(a) ctg a COTAN(a) asin a ASIN(a)

Inverzne trigonometrijske funkcije acos a ACOS(a) atan a ATAN(a) sinh a SINH(a)

Hiperbolične funkcije cosh a COSH(a) tanh a TANH(a)

Kodiranje aritmetičkih i logičkih izraza Aritmetički izraz se sastoji od jednog ili više argumenata međusobno razdvojenih aritmetičkim operacijama. Argumenti aritmetičkog izraza mogu biti: numeričke konstante i promenljive i bibliotečke matematičke funkcije. Aritmetički izraz se piše kao niz koji se sastoji od naizmeničnog smenjivanja argumenata i aritmetičkih operacija, pri čemu važi:

• niz počinje argumentom ili znakom minus (-), koji označava u tom slučaju promenu znaka prvog argumenta,

• niz se završava argumentom, • dva simbola aritmetičkih operacija ne smeju se pisati jedan do drugog, • vrednost aritmetičkog izraza se izračunava sa leva na desno, pri čemu važi sledeći prioritet:

izračunavanje vrednosti funkcije,

Page 10: Fortran vežbe

Informatika 2, Milan Gocić

10

stepenovanje, unarna operacija promene znaka, množenje i deljenje, sabiranje i oduzimanje.

Logički izraz je sastavljen od jednog ili više argumenata međusobno razdvojenih logičkim operacijama. Argumenti logičkog izraza mogu biti: logičke konstante i promenljive i predikti. Vrednost logičkog izraza se određuje izvršavanjem logičkih operacija s leva na desno, uz poštovanje sledećeg prioriteta:

• izračunavanje vrednosti predikata, • operacija .NOT. , • operacija .AND. , • operacija .OR. , • operacije .XOR. i .EQV. .

Ako zagradama nije drugačije definisano, važi sledeći prioritet operacija:

1. ** 2. *, / 3. +, - 4. // 5. .GT. .GE. .LT. .LE. .EQ. .NE. 6. .NOT. .AND. .OR. .EQV. .NEQV.

Prioritet operacija, kao i kod aritmetičkog izraza, može biti izmenjen upotrebom zagrada. Unutrašnji par zagrada ima najviši prioritet. Primer 1.5. Uz pomoć zagrada označiti kojim će se redosledom izvršiti operacije u sledećem izrazu

A+B*C.LT.D.AND.Q.

Odgovor: (((A+(B*C)).LT.D).AND.Q) Primer 1.6. Poređati sledeće operatore po prioritetu, počev od operatora sa najvećim prioritetom:

.AND., +, .LT., *, /, .NOT., .EQ.

Odgovor: *, /, +, .LT., .EQ., .NOT., .AND. Primer 1.7. Kodirati sledeće izraze na FORTRAN-u:

a) acab + , b) ⎟⎠⎞

⎜⎝⎛ −

cb8a23 , c) ( )1k3

3kba

+−+ , d) ( )2na2

31

− ,

e) ⎟⎠⎞

⎜⎝⎛ −+⎟

⎟⎠

⎞⎜⎜⎝

⎛+

2xarctgbcoseasinln 2

x

, f) ( )( )( )cpbpapp −−− .

Odgovor: a) A * B + A * C, b) 3 * (2 * A - 8 * B) / C, c) (A + B) * (3 * K + 1) / (K - 3), d) (2 * A - N) ** 2 / 3, e) ALOG(SQRT(ABS(SIN(A + EXP(X / 2)) + COS(B - ATAN(X / 2)))),

Page 11: Fortran vežbe

Informatika 2, Milan Gocić

11

f) SQRT(P * (P - A) * (P - B) * (P - C)). Specijalni slučajevi 1) )2**x(SIN)(xsin 2 ≡ 2) 2**)x(SIN)(xsin 2 ≡

3) )3/.5*(*x)(x3 5 ≡

Primer 1.8. Kodirati sledeći izraz xy2

eycos2.0xtgln ++ .

Odgovor: ALOG(SQRT(TAN(X)**2+0.2+COS(Y)/EXP(X*Y))). Primer 1.9. Sledeće matematičke izraze kodirati na FORTRANu korišćenjem obične i dvostruke tačnosti:

a) ( )22

3

xsinlnxxsin + , b)

xy

2

x

y

z

yx

⎟⎟⎠

⎞⎜⎜⎝

.

Odgovor: a) SQRT(SIN(SQRT(X)) + X ** 3) / ALOG(SIN(X * X)) ** 2, DSQRT(DSIN(DSQRT(X)) + X ** 3) / DALOG(DSIN(X * X)) ** 2, b) (X ** Y / Y ** X) ** 2 / Z * (Y / X). Primer 1.10. Sledeći aritmetički izrazi su celobrojni, realni ili neispravni: a) 5X+1.0 ____ neispravan_______ b) -0.4E+5*P ____ realan___________ c) .99E-4+2 ____ realan___________ d) 1/A-1 ____ realan___________ e) A+-B ____ neispravan_______ f) K**2E1 ____ neispravan_______ g) R**2.0 ____ realan___________ h) 2J*K*L ____ neispravan_______ i) AX+BX+X ____ neispravan_______ j) K**2E1 ____ neispravan_______ Primer 1.11. Ako je vrednost realnih i celobrojnih promenljivih

A = 6. I = 4 J = 3

izračunati vrednosti logičkih izraza: a) A.GT.4.0 ____________________ b) A.LE.3.0D-03 ____________________ c) I.EQ.J ____________________ d) 5.NE.I ____________________ e) I*J.GT.A ____________________ f) A**J.LT.A*I*J ____________________

Odgovor: a) .TRUE., b) .FALSE., c) .FALSE., d) .TRUE., e) .TRUE., f) .FALSE..

Primer 1.12. Za date vrednosti logičkih promenljivih

V = .TRUE.

Page 12: Fortran vežbe

Informatika 2, Milan Gocić

12

X = .TRUE. Y = .FALSE. Z = .FALSE.

izračunati vrednosti logičkih izraza: a) .NOT.Y ____________________ b) .NOT.V ____________________ c) V.AND.X ____________________ d) X.AND.Y ____________________ e) Z.AND.X ____________________ f) V.OR.X ____________________ g) X.OR.Y ____________________ h) Y.OR.Z ____________________

Odgovor: a) .TRUE., b) .FALSE., c) .TRUE., d) .FALSE., e) .FALSE., f) .TRUE., g) .TRUE., h) .FALSE.

Aritmetička naredba dodeljivanja

Naredba kojom se vrednost aritmetičkog izraza dodeljuje promenljivoj zove se aritmetička naredba. Opšti oblik je:

p = a

gde su: p - ime promenljive , a - aritmetički izraz. Dejstvo naredbe dodeljivanja je sledeće: izračunava se vrednost aritmetičkog izraza, izračunata vrednost se transformiše u tip podatka saglasno tipu promenljive kojoj se vrednost dodeljuje i dodeljuje se promenljivoj. Primer 1.13. Kodirati sledeću aritmetičku naredbu

x

2x

e1.7xcos3.3x2sin2.1ey

−+

= .

Odgovor: Y = SQRT((EXP(X / 2) + 1.2 * SIN(2 * X)) / (3.3 * COS(X) - 7.1 * EXP(X))). Primer 1.14. Kodirati sledeću logičku naredbu

.01x1xe02xaxx2y x

2

≤−∧−<∨>+−+

=

Odgovor: Y = SQRT((2+X-A*X**2)/(X+2)).GT.0.OR.EXP(X).LT.(X-1).AND.SQRT(X-1).LE.0. Primer 1.15. Napisati naredbu dodeljivanja vrednosti logičkog izraza

cac2b2cb

a≥∧≠−

+

logičkoj promenljivoj z. Odgovor: LOGICAL Z

Z = A / (B + C) - 2 * B.NE.2. * C.AND.A.GE.C

Page 13: Fortran vežbe

Informatika 2, Milan Gocić

13

- ČAS 2 -

Naredba ulaza

Opšti oblik naredbe ulaza READ(i, j) lista j FORMAT(formatirani_podaci) gde je: i – oznaka ulaznog uređaja (5) j – obeležje naredbe lista – imena promenljivih, međusobno razdvojena zarezima, kojima se dodeljuju brojne vrednosti sa ulaza, formatirani_podaci – koriste se formati specifikacija. Primer 2.1. Napisati naredbu za učitavanje vrednosti promenljivih A, B, C i opisnu naredbu FORMAT, ako se A nalazi u prvom slogu od 1. do 10. kolone sa 2 decimalna mesta, B u drugom slogu od 10. do 20. kolone sa 3 decimalna mesta, a C u četvrtom slogu od 21. do 30. kolone, sa 5 decimalnih mesta. Odgovor: READ(5, 20) A, B, C 20 FORMAT(F10.2/9X,F11.3//20X,F10.5) Primer 2.2. Napisati ulaznu naredbu READ sa odgovarajućom opisnom naredbom FORMAT za učitavanje sledećih brojnih vrednosti:

-0.2423 810 −

64276464.1 Dati izgled ulaznog sloga sa brojnim vrednostima. Odgovor: READ( 5, 10) A, B, C 10 FORMAT(F7.4,E6.1,F10.1) -0.24231.0E-864276464.1

Ponavljanje više opisa

Ako se više opisa ponavlja, tada se koristi oblik n(lista) gde je: n – određuje broj ponavljanja, lista – opisi polja, međusobno razdvojeni zarezima. Primer 2.3. Zapis oblika FORMAT(I2, F6.2, I2, F6.2, I2, F6.2) zapisati koristeći ponavljanja više opisa. Odgovor: FORMAT(3(I2, F6.2))

Page 14: Fortran vežbe

Informatika 2, Milan Gocić

14

Naredba izlaza Opšti oblik naredbe izlaza WRITE(i, j) lista j FORMAT(formatirani_podaci) gde je: i – oznaka izlaznog uređaja (6) j – obeležje naredbe lista – imena promenljivih, međusobno razdvojena zarezima, kojima se dodeljuju brojne vrednosti sa ulaza, formatirani_podaci – koriste se formati specifikacija. Primer 2.4. Za izvršnu naredbu WRITE (6, 10) X, Y, Z napisati opisnu naredbu FORMAT, tako da se: a) vrednosti X, Y i Z štampaju u jednom redu u proizvoljnom obliku, a iza tog reda preskaču tri prazna reda, b) preskoče 2 prazna reda, a u trećem se štampaju vrednosti X, Y i Z. Odgovor: a) 10 FORMAT(5X, 3F12.2///)

b) 10 FORMAT(//3F12.2)

DATA naredba Naredba za dodeljivanje početnih vrednosti je oblika DATA lista /podaci/ gde je: DATA - službena reč, lista - spisak imena promenljivih, imena nizova, imena elemenata nizova ili imena znakovnih podniski razdvojeni zarezima, podaci - spisak konstanti ili simboličkih imena konstanti koje se sleva nadesno dodeljuju elementima navedenim u listi, razdvojeni zarezima Primer 2.5. Napisati naredbu DATA za definisanje vrednosti promenljivih datih sledećim naredbama:

DEG=0.1743329 PI=3.1415926536 IT=42 N14=16 N16=14

Odgovor: DATA DEG, PI, IT, N14, N16 /0.1743329, 3.145926536, 42, 16, 14/ Primer 2.6. Napisati naredbu DATA za dodeljivanje vrednosti sledećih promenljivih:

Ime Vrsta (Tip) Vrednost ABC real, obična tačnost 4105.2 −⋅ BCD real, obična tačnost -4.2 JDE celobrojna -413 LEF celobrojna 19 TUV logička tačno VEX logička netačno

Napomena: Eksplicitno definisati vrstu promenljive, tamo gde je potrebno.

Page 15: Fortran vežbe

Informatika 2, Milan Gocić

15

Odgovor: LOGICAL TUV, VEX DATA ABC, BCD, JDE, LEF, TUV, VEX /2.5E-4, -4.2, -413, 19,.TRUE.,.FALSE./

Algoritam Postupak transformacije ulazne informacije u izlaznu informaciju naziva se algoritam. Osobine algoritama su:

• Definisanost: Svaki korak u algoritmu mora biti jednoznačno definisan. Skup pravila treba da je takav da se operacije koje definišu ta pravila mogu izvršavati sukcesivno jedna za drugom.

• Determinisanost (određenost): Vrednost koja se dobija posle izvršavanja svakog koraka

jednoznačno je određena vrednostima iz prethodnog koraka. Dejstva koja treba da se izvrše treba da budu strogo i nedvosmisleno određena u svim slučajevima i da ne ostavljaju mesta slobodnom donošenju odluke.

• Konačnost: Rad algoritma mora se završiti u konačnom broju koraka i za konačan interval vremena.

Broj koraka može biti proizvoljno veliki. Zbog ove osobine ponekad se kaže da algoritam predstavlja efektivnu proceduru za rešenje nekog problema.

• Rezultativnost: Algoritam mora dati rezultat za sve situacije za koje je kreiran. Zbog toga svaki

algoritam poseduje:

a) Ulaz: Algoritam poseduje određen broj (možda i jednak nuli) ulaznih podataka, odnosno veličina koje su zadate pre početka izvršenja algoritma.

b) Izlaz: Algoritam ima jednu ili više izlaznih veličina, odnosno veličina koje imaju

potpuno određeni odnos sa ulaznim podacima, a rezultat su obrade na osnovu primene algoritma.

• Masovnost: Algoritam treba da obezbedi rešavanje cele klase problema koji se razlikuju samo po

ulaznim veličinama.

Grafički prikaz simbola za označavanje dijagrama toka programa (algoritma)

Grafički simbol Opis

Granično mesto (početak, kraj, prekid). Upotrebljava se za predstavljanje početka i kraja postupka, procedure, procesa, kao i prekida ili odlaganja procesa.

Konektor (veznik). Ulazna ili izlazna priključna tačka između prekinutih linija toka.

Ulaz. Unos podataka preko ulazne jedinice (instrukcije ulaza).

Izlaz. Izlaz podataka preko izlazne jedinice (instrukcije izlaza).

Obrada (operacija, proces, radnja). Izvršenje operacije ili grupe operacija (instrukcije obrade).Odluka (uslovno grananje). Izbor pravca izvršenja algoritma zavisno od uslova (instrukcije provere uslova).

Modifikacija programa. Izvršenje operacija kojima se menjaju naredbe programa.

Page 16: Fortran vežbe

Informatika 2, Milan Gocić

16

Poziv potprograma. Izvršavanje potprograma prethodno zapisanog izvan glavnog programa (instrukcija poziva potprograma).

Linija toka (vezna linija). Prikazivanje redosleda veza između blokova.

Spajanje. Mesto spajanja dve linije.

Grananje. Jedna dolazna i više odlaznih grana.

Komentar (napomena). Objašnjenje, odnosno dodatni komentar ili kratko tumačenje operacije.

Programska struktura

Pod algoritamskom (programskom) strukturom podrazumeva se više koraka (komandi programskog jezika) koji čine jednu celinu. Postoje tri elementarne algoritamske strukture:

1. linijska, 2. razgranata i 3. ciklična.

Linijska struktura Naredbe koje se pri izvršavanju programa uvek izvršavaju u navedenom redosledu (sekvencijalno) čine linijsku strukturu. U ovom slučaju, nakon izvršenja jedne naredbe prelazi se na izvršenje naredbe koja neposredno sledi u programu (slika 2.1.). Linijski programi su programi u kojima se javljaju naredbe ulaza, obrade i izlaza. Ovi programi imaju smisla u slučajevima kada za razne vrednosti ulaznih veličina treba izvršiti složena izračunavanja.

Slika 2.1. Linijska struktura Primer 2.7. Sastaviti algoritam i napisati program kojim se izračunava zbir dva realna broja x i y. Na izlazu štampati njihov zbir.

PROGRAM ZAD READ(5, 10) X, Y 10 FORMAT(2F10.3) F = X + Y WRITE(6, 20) F 20 FORMAT(2X, ’F = ’, F10.3) STOP END

Page 17: Fortran vežbe

Informatika 2, Milan Gocić

17

Primer 2.8. Sastaviti algoritam i napisati program kojim se izračunava vrednost funkcije

yxx

x2yxf

4

−−⎟

⎠⎞

⎜⎝⎛ +

=

na osnovu unetih vrednosti za x i y. Na izlazu štampati vrednost funkcije.

PROGRAM ZAD READ(5, 10) X, Y 10 FORMAT(2F10.3) F = ((X + Y) / 2 * X) ** 4 - X / (X - Y) WRITE(6, 20) F 20 FORMAT(2X, ’F = ’, F10.3) STOP END

- ČAS 3 -

Razgranata struktura Naredbe uslovnog prelaska omogućuju grananja u programu, tako da se pri izvršavanju programa prolazi samo kroz jednu od mogućih grana. Ovakva programska struktura zove se razgranata struktura. Broj grana u razgranatoj strukturi može biti različit (dve, tri ili više), što zavisi od naredbe prelaska kojom se ostvaruje grananje u programu. If iskaz spada u blokovski uslovni prelazak, jer omogućuje da se u svakoj grani razgranate strukture može nalaziti blok naredbi. Uslov po kome se vrši prelazak predstavlja logički izraz čija vrednost može biti true ili false. Ako je vrednost izraza true, izvršava se blok naredbi B1 koji sledi iza naredbe prelaska IF, u suprotnom se izvršava blok naredbi B2 koji se piše iza rezervisane reči ELSE. Sintaksa IF-THEN-ELSE strukture ima oblik

IF(uslov) THEN B1 ELSE B2 ENDIF

Slika 3.1. IF-THEN-ELSE struktura

Primer 3.1. Sastaviti algoritam i napisati program kojim se za unetu realnu vrednost x izračunava vrednost funkcije

⎩⎨⎧

<−≥

==0. xx,

0, xx,xy

Na izlazu štampati rezultat oblika

Za uneto X = xxx.xxx dobija se Y = xxx.xxx.

Page 18: Fortran vežbe

Informatika 2, Milan Gocić

18

PROGRAM ZAD READ(5, 10) X 10 FORMAT(F7.3) IF (X.GE.0) THEN Y = X ELSE Y = -X ENDIF WRITE(6, 20) X, Y 20 FORMAT(2X, ’ZA UNETO X = ’, F7.3, ’DOBIJA SE Y = ’, F7.3) STOP END

U slučaju da ne postoji blok B2, tada ne treba pisati rezervisanu reč ELSE. Sintaksa ove strukture ima oblik

IF (uslov) THEN B1 ENDIF

Slika 3.2. If struktura

Primer 3.2. Sastaviti algoritam i napisati program za određivanje vrednosti

( )( ).s,rmax,qminy =

PROGRAM ZAD READ(5, 10) Q, R, S 10 FORMAT(3F10.3) IF (R.GT.S) THEN Y = R ELSE Y = S ENDIF IF (Q.LT.S) THEN Y = Q ENDIF WRITE(6, 20) Y 20 FORMAT(2X, ’Y = ’, F10.3) STOP END

Page 19: Fortran vežbe

Informatika 2, Milan Gocić

19

Na slici 3.3 prikazana je struktura u kojoj se u odrečnoj grani IF-THEN-ELSE strukture nalazi druga IF-THEN-ELSE struktura. Za ovakvu strukturu IF naredbi kaže se da su ugnježdene if naredbe.

Slika 3.3. IF-THEN-ELSE-IF struktura

Sintaksa strukture može se zapisati na dva načina:

1. pomoću IF-THEN-ELSE strukture 2. pomoću IF-THEN-ELSE-IF strukture

1. IF (uslov1) THEN 2. IF (uslov1) THEN B1 B1 ELSE ELSEIF (uslov2) THEN IF (uslov2) THEN B2 B2 ELSE ELSE B3 B3 ENDIF ENDIF ENDIF

Primer 3.3. Sastaviti algoritam i napisati program koji za zadate vrednosti x1 i x2 izračunava y po formuli

x2. x1je akox2, x1je akox2, x1je ako

x2,-x1 x2,x1 x2,x1

y>=<

⎪⎩

⎪⎨

⎧⋅+

=

PROGRAM ZAD READ(5, 10) X1, X2 10 FORMAT(2F10.3) IF (X1.LT.X2) THEN Y = X1 + X2 ELSEIF (X1.EQ.X2) THEN Y = X1 * X2 ELSE Y = X1 - X2 ENDIF WRITE(6, 20) Y 20 FORMAT(2X, ’Y = ’, F10.3) STOP END

Page 20: Fortran vežbe

Informatika 2, Milan Gocić

20

- ČAS 4 -

Ciklična struktura Ako se niz naredbi u programu može izvršiti više puta u toku izvršavanja programa, tada se kaže da ove naredbe obrazuju cikličnu strukturu. Među naredbama koje čine cikličnu strukturu mora postojati bar jedna naredba takva da omogućava izlazak iz ciklusa. Uslov pod kojim se izlazi iz ciklusa zove se izlazni kriterijum ciklusa. Ako je izlazni kriterijum broj ponavljanja ciklusa, tada se ciklus zove brojački ciklus. Ako je izlazni kriterijum dostignuta tačnost u procesu računanja, tada se ciklus zove iterativni ciklus. Za realizaciju iterativnih ciklusa koristi se dowhile struktura čija sintaksa ima oblik

DOWHILE (uslov) B ENDDO

Slika 4.1. Dowhile struktura

Primer 4.1. Sastaviti algoritam i napisati program za nalaženje najvećeg pozitivnog korena funkcije 4062x23xxf(x) 23 −+−= koristeći iterativnu formulu

23.x 0 = ,

K 1, 0,i 23,x62

x40x

i2

i1i =+−=+ .

Izračunavanje prekinuti kada bude zadovoljen uslov 5

i1i 10xx −+ ≤− .

PROGRAM ZAD X0 = 23. X1 = 40 / X0 * X0 - 62 / X0 + 23 DOWHILE (ABS(X1 - X0).GT.1.0E-5) X0 = X1 X1 = 40 / X0 * X0 - 62 / X0 + 23 END DO WRITE(6, 10) X1 10 FORMAT(2X, ’X1 = ’, F10.3) STOP END

Page 21: Fortran vežbe

Informatika 2, Milan Gocić

21

Primer 4.2. Sastaviti algoritam i napisati program za iterativno rešavanje sistema jednačina

03y2x

01x2xy3x42

2

=+−

=−+−

koristeći sledeće formule:

.2

3xy,1)1y3(x

21x n

1nnn1n+

=+−= ++

Iterativni proces prekinuti kada se ispune uslovi ε≤−+ n1n xx i ε≤−+ n1n yy . Na ulazu je data vrednost za ε i početne vrednosti za 0x i 0y . Na izlazu štampati rešenja sistema jednačina.

PROGRAM ZAD READ(5, 10) EPS, X0, Y0 10 FORMAT(3F10.3) X1 = 0.5 * SQRT(X0 * (3 * Y0 - 1) + 1) Y1 = SQRT((X0 + 3) / 2) DOWHILE (ABS(X1 - X0).GT.EPS .OR. ABS(Y1 - Y0).GT.EPS) X0 = X1 X1 = 0.5 * SQRT(X0 * (3 * Y0 - 1) + 1) Y0 = Y1 Y1 = SQRT((X0 + 3) / 2) END DO WRITE(6, 20) X1, Y1 20 FORMAT(2X, 2F10.3) STOP END

Primer 4.3. Sastaviti algoritam i napisati program kojim se izračunava i štampa vrednost funkcije ch x primenom sledećeg razvoja u red

. (2k)!xch x

0k

2k

∑+∞

=

=

Izračunavanje prekinuti kada relativna vrednost priraštaja sume postane manja od zadate vrednosti EPS. Napomena: Ovaj razvoj u red važi za 4x < .

Page 22: Fortran vežbe

Informatika 2, Milan Gocić

22

Rešenje:

Postoje dve vrste priraštaja sume:

1) apsolutna vrednost priraštaja sume: 1ii1i aSS ++ =− , 2) relativna vrednost priraštaja sume: 1i1i1ii1i /Sa)/SS(S ++++ =− .

Razvojem funkcije ch(x) u red dobija se:

...aa...aaa(2k)!xch x 1kk10

0kk

0k

2k+++++=== +

+∞

=

+∞

=∑∑ , pri čemu važi

(2k)!xa

2k

k = , k

222k22k1)2(k

1k a1)(2k2)(2k

x(2k)!1)(2k2)(2k

xx2)!(2k

xx1))!(k(2

xa+⋅+

=⋅+⋅+

=+

=+⋅

=+

+

1a 0 = c Zadatak izracunava sumu reda ch(x) c x- vrednost za koju se izracunava vrednost sume c EPS- apsolutna tacnost PROGRAM zad WRITE (6,10) 10 FORMAT (2X, 'Unesite vrednosti za x i EPS') c Unos vrednosti za x i EPS READ (5,20) x, eps 20 FORMAT (2E15.7) IF(ABS(x).LT.4) THEN a0 = 1. s = a0 k = 0 c Izracunavanje sume c k - broj iteracije c S - suma reda c a0- prvi clan reda DO WHILE (ABS(a0/s).GT.eps) a0 = x*x/((2*k+2)*(2*k+1))*a0 s = s+a0 k = k+1 END DO c Stampanje sume reda WRITE (6,30) s

30 FORMAT (2X, 'S=', E15.7) ELSE WRITE (6,40) 40 FORMAT (2X, 'Za red mora da vazi |X|<4.') ENDIF STOP END

Page 23: Fortran vežbe

Informatika 2, Milan Gocić

23

Brojački ciklus Za realizaciju brojačkog ciklusa koristi se DO petlja. Sintaksa DO petlje ima oblik

DO n I = m1,m2, m3 telo ciklusa

n CONTINUE

Slika 4.2. DO petlja pri čemu je:

n – obeležje poslednje naredbe u petlji, I – numerička promenljiva (ne može biti tipa COMPLEX) koja predstavlja brojač petlje, m1, m2, m3 – numerički izrazi, m1 – početna vrednost brojača petlje, m2 - krajnja vrednost brojača petlje, m3-korak promene ciklusne promenljive (u slučaju da je izostavljen podrazumeva se da je 1).

Primer 4.4. Sastaviti algoritam i napisati program za izračunavanje vrednosti funkcije 3x1926.41)x(f +⋅= za x = 1.00(0.2)2.00. Izlazna lista neka izgleda

X F(X) x.xx xxx.xx M M

Rešenje:

PROGRAM zad WRITE (6,10) 10 FORMAT (2X, 'X', 5X, 'F(X)') DO 30 X = 1.0, 2.0, 0.2 F = 41.926 * SQRT(1 + X ** 3) WRITE (6, 20) X, F 20 FORMAT (2X, F3.1, 5X, F6.2) 30 CONTINUE STOP END

Primer 4.5. Sastaviti algoritam i napisati program za izračunavanje vrednosti funkcije f(x,y) za n zadatih vrednosti x i y po formuli

( )⎪⎩

⎪⎨

>−=<

=.yxzaxy1,yxzaysinxcos,yxzay2sine

y,xf

x

Rezultate štampati u obliku tabele sa zaglavljem

Page 24: Fortran vežbe

Informatika 2, Milan Gocić

24

x y f(x,y) ---------------------------------------------- xxxx.xxx xxxx.xxx xxxxx.xxxx M M M

Rešenje:

c Argumenti programa c n - ukupan broj parova vrednosti x i y c x,y - vrednosti promenljivih za koje se izracunava funkcija f c f - funkcija od dve promenljive, x i y

PROGRAM zad WRITE (6,10) 10 FORMAT (2X, 'Unesite vrednost za n') READ (5,20) N 20 FORMAT (I3) c Stampanje zaglavlja WRITE (6, 30) 30 FORMAT (5X,'X',10X,'Y',10X,'F(X,Y)' / 2X,'----------------------') DO 70 I = 1, N WRITE (6, 40) 40 FORMAT (2X, 'Unesite vrednost za x i y') READ (5, 50) X,Y 50 FORMAT (2F8.3) IF (X.LT.Y) THEN F = EXP(X) * SIN(2 * Y) ELSE IF (X.EQ.Y)) THEN F = COS(X) * SIN(Y) ELSE F = 1 – X * Y END IF c Stampanje rezultata WRITE (6, 60) X, Y, F 60 FORMAT (2X,F8.3,2X,F8.3,2X,F10.4) 70 CONTINUE STOP END

Primer 4.6. Sastaviti algoritam i napisati program za izračunavanje vrednosti sume

.2.1n5.2nS

50

1n2∑

= ++

=

Page 25: Fortran vežbe

Informatika 2, Milan Gocić

25

Rešenje:

PROGRAM zad S = 0 DO 10 N = 1, 50, 1 S = S + (N + 2.5) / (N * N + 1.2) 10 CONTINUE WRITE (6, 20) S 20 FORMAT (2X, F6.2) STOP END

Primer 4.7. Sastaviti algoritam i napisati program za izračunavanje vrednosti sume

,3i5.3iS

n

3i1i∑≠= −

+=

za unetu vrednost n < 100. Rešenje:

PROGRAM zad READ(5, 10) N 10 FORMAT (I3) S = 0 DO 20 I = 1, N, 1 IF (I.NE.3) THEN S = S + (I + 3.5) / (I - 3) ENDIF 20 CONTINUE WRITE (6, 30) S 30 FORMAT (2X, F6.2) STOP END

Page 26: Fortran vežbe

Informatika 2, Milan Gocić

26

Primer 4.8. Sastaviti algoritam i napisati program za izračunavanje sume

.3j2jS

50

1i

i

3j1j

∑∑=

≠= −

+=

Rešenje:

PROGRAM zad S = 0 DO 20 I = 1, 50, 1 S1 = 0 DO 10 J = 1, I, 1 IF (J.NE.3) THEN S1 = S1 + (J + 2) / (J - 3) ENDIF 10 CONTINUE S = S + S1 20 CONTINUE WRITE (6, 30) S 30 FORMAT (2X, F6.2) STOP END

- ČAS 5 -

Jednodimenzioni niz Polje ili niz (engl. array) je kolekcija promenljivih istog tipa sa zajedničkim imenom. Za polje se može reći da je to skup homogenih elemenata podataka (istog tipa), gde je svakom elementu stavljen u korespondenciju uređeni niz celih brojeva (indeksa). Svakom elementu polja može se jednoznačno locirati na osnovu indeksa. Broj indeksa koji su dodeljeni svakom elementu polja naziva se dimenzionalnost polja. Broj elemenata polja naziva se veličina, rang ili dužina polja. U Fortranu polje može imati jednu ili više dimenzija. Primer 5.1. Sastaviti algoritam i napisati program kojim se uređuju elementi niza A u nerastući redosled. Broj elemenata niza A je N. Štampati niz A pre i posle sortiranja.

Rešenje:

Page 27: Fortran vežbe

Informatika 2, Milan Gocić

27

PROGRAM zad DIMENSION A(50) READ (5,10) n 10 FORMAT (I3) READ(5,20)(A(i),i=1,n) 20 FORMAT (5F10.5) WRITE (6, 30) (A(i),i=1,n) 30 FORMAT (2X,'VEKTOR A PRE UREDJIVANJA'/(5(2X,F10.5))) DO 40 i=1,n-1 DO 40 j=i+1,n IF (A(i).LE.A(j)) THEN pom=A(i) A(i)=A(j) A(j)=pom ENDIF 40 CONTINUE WRITE(6, 50) (A(i),i=1,n) 50 FORMAT (1X,'VEKTOR A POSLE UREDJIVANJA'/(5(2X,F10.5))) STOP END

2 7 5 8 1

2 7 5 8 1

2 5 7 8 1

2 5 7 1 8

2 5 7 1 8

2 5 1 7 8

2 5 1 7 8

2 1 5 7 8

2 1 5 7 8

1 2 5 7 8

N e s o r t i r a n i n iz

P rv i p ro la z

D ru g i p ro la z

T re ć i p ro la z

Č e tv r t i p ro la z

Page 28: Fortran vežbe

Informatika 2, Milan Gocić

28

Primer 5.2. Sastaviti algoritam i napisati program za određivanje položaja težišta složene površine A pomoću formula:

. yAA1y

,xAA1x

,AA

niit

niit

ni

=

=

=

Vrednost n je formata I3, dok su vrednosti iii y,x,A formata 6F10.3. Na izlazu štampati rezultat sledećeg izgleda:

A = xxxxxx.xxx XT = xxxxxx.xxx YT = xxxxxx.xxx

Rešenje: PROGRAM zad c Deklarisanje nizova DIMENSION nizA(100), x(100), y(100) DATA a, xt, yt /3* 0./ WRITE (6,10) 10 FORMAT (2X, 'Unesite vrednost za n') c Unos dimenzije niza READ (5,20) n 20 FORMAT (I3) WRITE (6,30) 30 FORMAT (2X,'Unesite vrednosti niza a') c Unos niza A READ (5,40) (nizA(i), i = 1,n) 40 FORMAT (6F10.3) WRITE (6,50) 50 FORMAT (2X, 'Unesite vrednosti niza x') c Unos niza X READ (5,60) (x(i), i = 1,n) 60 FORMAT (6F10.3) WRITE (6,70) 70 FORMAT (2X,'Unesite vrednosti niza y') c Unos niza Y READ (5,80) (y(i), i = 1,n) 80 FORMAT (6F10.3) DO 90 i = 1, n a = a+nizA(i) xt = xt+nizA(i)*x(i)

yt = yt+nizA(i)*y(i) 90 CONTINUE xt = xt/a yt = yt/a WRITE (6,120) a, xt, yt 120 FORMAT (2x,'A= ',F10.3/2x,'XT= ', F10.3/2x,'YT=', F10.3) STOP END

Page 29: Fortran vežbe

Informatika 2, Milan Gocić

29

Primer 5.3. Za zadate brojeve 1,...,100,i ,x i = sastaviti algoritam i napisati program za izračunavanje sume

∑∞+

= +

−=

1k2

i2i

i 1k

xcoskx

sin)x(S .

Sume računati sve dok je apsolutna vrednost sabranih članova veća od 510− . Izlazna lista neka izgleda

I X(I) S(X(I))

xxx xxxxx.xx xxxxx.xx M M M

Rešenje:

c k - broj iteracije c x - jednodimenzioni niz c n - dimenzija niza PROGRAM zad c Deklarisanje niza DIMENSION x(100) eps = 1.E-5 WRITE (6,10) 10 FORMAT (2X, 'Unesite vrednost za n') c Unos dimenzije niza READ (5,20) n 20 FORMAT (I3) WRITE (6,30) 30 FORMAT (2X,'Unesite vrednosti niza x') c Unos niza x READ (5,40) (x(i), i = 1, n) 40 FORMAT (8F8.2) c Stampanje zaglavlja WRITE (6,50) 50 FORMAT (2X, 'I', 10X, 'X', 10X, 'S(X(I))') DO 80 i = 1, n k = 1 s = (ABS(SIN(x(i)/k)-COS(x(i))**2))/(k**2+1) c Ispitivanje tacnosti postavljene uslovom zadatka DO WHILE (ABS(s).LE.eps) k = k+1 s = s+(ABS(SIN(x(i)/k)-COS(x(i))**2))/(k**2+1) END DO WRITE (6,60) i, x(i), s 60 FORMAT (2X, I3, 3X, F8.2, 3X, F8.2) 80 CONTINUE STOP END

Page 30: Fortran vežbe

Informatika 2, Milan Gocić

30

- ČAS 6 -

Dvodimenziono polje

Primer 6.1. Sastaviti algoritam i napisati program za nalaženje transponovane matrice AT na osnovu zadate matrice A

3x3431541532

A⎥⎥⎥

⎢⎢⎢

−−−

−−= .

Rešenje:

PROGRAM zad INTEGER a(3,3), b(3,3) DATA a/2, -3, -5, -1, 4, 5, 1, -3, -4/ DO 10 i = 1, 3 DO 10 j = 1, 3 b(i, j) = a(j, i) 10 CONTINUE WRITE (6, 20) 20 FORMAT (5x, 'Matrica A'/) WRITE (6, 30) ((a(i, j), i= 1,3), j=1,3)

30 FORMAT (5x, 3I5) WRITE (6, 40) 40 FORMAT (5x, 'Matrica B'/) WRITE (6, 50) ((b(i,j),i= 1,3),j=1,3) 50 FORMAT (5x, 3I5) STOP END

Primer 6.2. Sastaviti algoritam i napisati program za sabiranje matrica A i B, koje su definisane na sledeći način:

4x3215212040121

A⎥⎥⎥

⎢⎢⎢

−=

4x3132230512143

B⎥⎥⎥

⎢⎢⎢

−−

−= . Odštampati elemente rezultujuće matrice

BAC += .

Rešenje: PROGRAM zad INTEGER a(3, 4), b(3, 4), c(3, 4) DATA a/1, 2, -1, 0, 4, 0, 2, 1, 2, -5, 1, 2/ DATA b/3, -4, 1, 2, 1, 5, 0, 3, 2, -2, 3, -1/ DO 10 i = 1, 3 DO 10 j = 1, 4

Page 31: Fortran vežbe

Informatika 2, Milan Gocić

31

c(i, j) = a(i, j) + b(i, j) 10 CONTINUE WRITE (6, 20) 20 FORMAT (5x, 'Matrica C'/) WRITE (6, 30) ((c(i,j),i= 1,3),j=1,4) 30 FORMAT (5x, 4I5) STOP END

Primer 6.3. Sastaviti algoritam i napisati program za množenje dve celobrojne matrice A i B. Matrica A je reda m x n, a B je reda n x k.

Rešenje:

PROGRAM zad INTEGER A(20,20), B(20,20), C(20,20) READ(5,10) m,n,k 10 FORMAT(3I3) WRITE(6,20) m,n,k 20 FORMAT(2X,'M=',I3, 2X, 'N=',I3, 2X, 'K=',I2) c Citanje vrsta po vrsta READ(5,25) ((A(i,j),j=1,n),i=1,m) c Citanje kolona po kolona READ(5,25) ((B(i,j),i=1,n),j=1,k) 25 FORMAT(3I3) DO 30 i=1,m DO 30 j=1,k C(i,j)= 0 DO 30 t=1,n C(i,j)=C(i,j)+A(i,t)*B(t,j) 30 CONTINUE WRITE(6,40) 40 FORMAT(5X,'MATRICA A')

DO 60 i=1, m WRITE(6,50) (A(i,j),j=1,n) 50 FORMAT(10(2X,I3)) 60 CONTINUE

Page 32: Fortran vežbe

Informatika 2, Milan Gocić

32

c Stampanje vrsta po vrsta WRITE(6,70) 70 FORMAT(/,5X,'MATRICA B') DO 90 i=1,n WRITE(6,80) (B(i,j),j=1,k) 80 FORMAT(10(2X,I3)) 90 CONTINUE WRITE(6,100) 100 FORMAT(/,5X,'MATRICA C') DO 130 i=1,m WRITE(6,120) (C(i,j),j=1,k) 120 FORMAT(10(1X,I4)) 130 CONTINUE STOP END

- ČAS 7 -

Potprogrami - osnovni pojmovi Izvršni program se sastoji od programa ili od programa i jednog ili više potprograma. Ako se izvršni program sastoji od programa i potprograma, onda se za program kaže da je glavni program. Potprogram i glavni program obrazuju programske module. Programski modul iz koga se vrši prelazak na potprogram naziva se pozivajući programski modul. Upotreba potprograma omogućava da se jedanput napisan potprogram može koristiti u više različitih programa i formirati biblioteka potprograma. Karakteristike potprograma:

omogućava kraći zapis programa, smanjuje angažovanost memorijskog prostora, omogućuje lakše testiranje glavnog programa, isti potprogram može se koristiti u raznim programskim modulima.

Argumenti su veličine pomoću kojih se prenose informacije iz jednog programskog modula u drugi. Argumenti iskorišćeni pri pisanju potprograma nazivaju se fiktivni argumenti. Argumenti iskorišćeni pri pozivu potprograma nazivaju se stvarni argumenti. Argumenti mogu biti i ulazni i izlazni. Fiktivni i stavrni argumenti se moraju slagati po broju, redu i vrsti. Da bi se definisao jedan potprogram potrebno je:

dodeliti potprogramu jedan jedinstven naziv, definisati fiktivne argumente potprograma, utvrditi postupak na osnovu kojeg će se definisati vrednosti funkcije.

U Fortranu postoje tri vrste potprograma:

funkcijska naredba, funckijski potprogram i opšti potprogram.

Page 33: Fortran vežbe

Informatika 2, Milan Gocić

33

Funkcijska naredba

Funkcijska naredba omogućuje izdvajanje jednog izraza (aritmetičkog, logičkog ili zakovnog) kao potprograma. Opšti oblik funkcijske naredbe je:

fun([f[, f]...]) = izr gde je: fun - naziv funkcijske naredbe, f - fiktivni argument, izr - izraz. Fiktivni argument može biti samo ime promenljive (bez indeksa) i može se pojaviti samo jednom u listi fiktivnih argumenata. Oblast dejstva fiktivnog argumenta je samo u okviru funkcijske naredbe. Isto ime fiktivnog argumenta se može upotrebiti u više funkcijskih naredbi istog programskog modula, a može se upotrebiti i kao ime promenljive izvan funkcijske naredbe. Ime funkcije se može upotrebiti u naredbi za eksplicitnu deklaraciju, kako bi se specificirala vrsta imena funkcije. Primeri funkcijskih naredbi: SUMA(A, B) = A + B FUN(A, B) = .NOT.A.AND.B Funkcijska naredba se poziva na taj način što se kao argument izraza u programskom modulu kome pripada funckijska naredba navodi naziv funkcijske naredbe sa stvarnim argumentima između zagrada:

fun([s[, s]...]) gde je: fun - naziv pozvane funkcijske naredbe, s - stvarni argument. Sve funkcijske naredbe koje se definišu moraju se nalaziti ispred prve izvršne naredbe, a nakon opisnih naredbi. Primeri naredbi za pozivanje: ZBIR = SUMA(3, 8) TEST = FUN(C, D) Primer 7.1. Sledeći izraz definisati funkcijskom naredbom

,1a2ar 2 ++= a zatim, koristeći definisanu funkciju, napisati sledeće naredbe:

a) 22 c1c2cz +++= , b) 1bsin2bsina 2 ++= , c) 1a2ad i

2i ++= ,

d) ( ) ( ) 1ba2baq 2 ++++= .

Page 34: Fortran vežbe

Informatika 2, Milan Gocić

34

Rešenje: R(A) = A*A+2*A+1 a)Z=R(C)+C*C, b)A=R(SIN(B)), c)D=R(A(I)), d)Q=R(A+B).

Primer 7.2. Rastojanje između dve tačke u ravni određeno je relacijom 2

212

21 )y(y)x(xd −+−= gde su )y,(x 11 i )y,(x 22 koordinate prve i druge tačke, respektivno. Koristeći ovu formulu napisati program kojim

se izračunava rastojanje od koordinatnog početka svake od N tačaka čije se koordinate redom učitavaju. Relaciju kojom se određuje rastojanje između dve tačke u ravni definisati funkcijskom naredbom.

Rešenje:

PROGRAM zad c Definisanje funkcijske naredbe RAST(X1,Y1,X2,Y2)=SQRT((X1-X2)**2) +(Y1-Y2)**2) READ(5,10) n 10 FORMAT(I3)

DO 80 i=1,n READ(5,40) x, y 40 FORMAT(2F10.5)

c Stampanje izlaznih rezultata

WRITE(6,50) i,x,y,RAST(0.,0.,x,y) 50 FORMAT(3X,I3,6X,F10.5,2X,F10.5,

2X, F10.5,2X,E15.7) 80 CONTINUE

STOP END

Primer 7.3. Napisati program za tabeliranje vrednosti funkcije

)))x(f(g2(fy = ,

za x = 0.1(0.1)0.9, ako je

( ) ( ) .|x|2xtgxg),xln(x2xf +⎟⎠⎞

⎜⎝⎛=−=

Izlaznu listu štampati u obliku

X Y 0.1 ±x.xxxxxxxE±xx M M

Rešenje:

Page 35: Fortran vežbe

Informatika 2, Milan Gocić

35

PROGRAM zad c Definisanje funkcijskih naredbi f(x) = 2 * x - ALOG(x) g(x) = TAN(x / 2.) + ABS(x) c Stampanje zaglavlja WRITE (6,10) 10 FORMAT (2X, 'X',10X, 'Y') DO 30 x = 0.1, 0.9, 0.1 y = f(2 * g(f(x))) WRITE (6,20) x, y 20 FORMAT (2x, F3.1, 2X, E14.7) 30 CONTINUE STOP END

Primer 7.4. Tabelirati funkciju

1yy3.0yz

2

+−= , gde je

1xxx2.0xy

2

+−+=

za vrednosti x = 0(1)10, pri čemu je funkcija y zadata funkcijskom naredbom. Izlazna lista neka izgleda

X Y Z _____________________________________ xx.xx xxxx.xxx xxxxx.xx M M M

Rešenje:

c y- ime funkcijske naredbe PROGRAM zad c Definisanje funkcijske naredbe y(x) = SQRT(x) + 0.2 * x - x ** 2. / (x + 1.) c Stampanje zaglavlja WRITE (6,10) 10 FORMAT (5X, 'X', 8X, 'Y', 9X, 'Z') DO 30 x = 0., 10. z = y(x) - 0.3 * y(x) ** 2 / (y(x) + 1.) c Stampanje rezultata

Page 36: Fortran vežbe

Informatika 2, Milan Gocić

36

WRITE (6,20) x, y(x) , z 20 FORMAT (2X, F5.2, 3X, F8.3, 3X, F8.2) 30 CONTINUE STOP END

- ČAS 8 -

Funkcijski potprogram

Funkcijski potprogram se koristi u situaciji kada funkciju nije moguće definisati korišćenjem samo jedne naredbe. Potprogram ovog tipa može sadržati proizvoljan broj naredbi koje definišu funkciju. On čini posebnu programsku celinu i može se pozvati iz bilo kog programskog modula. Opšti oblik funkcijskog potprograma:

[tip] FUNCTION fun([f[, f]...]) telo funkcije

RETURN END

gde je: tip - tip potprograma, FUNCTION - službena reč, fun - naziv funkcijskog potprograma, f - fiktivni argument argument, RETURN - službena reč END - službena reč, koja označava fizički kraj programa. Vrste fiktivnih argumenata i ime funkcijskog potprograma, koje predstavlja jedinu izlaznu veličinu, određene su unutrašnjom konvencijom ili opisnim naredbama za eksplicitnu, odnosno implicitnu deklaraciju, koje se pišu odmah iza naredbe FUNCTION. Funkcijski potprogram se poziva na taj način što se kao argument izraza u programskom modulu kome pripada funckijski potprogram navodi naziv funkcijskog potprograma sa stvarnim argumentima između zagrada:

fun([s[, s]...]) gde je: fun - naziv pozvanog funkcijskog potprograma, s - stvarni argument. Povratak iz funkcijskog potprograma u pozivajuću programsku jedinicu se ostvaruje naredbom RETURN.

Page 37: Fortran vežbe

Informatika 2, Milan Gocić

37

Primer 8.1. Sastaviti potprogram tipa FUNCTION u kome se za zadate vrednosti 0.03 (0.01) 0.01 y i 0.5 (0.1) 0.1x == izračunava vrednost funkcije F (x, y) po formuli

( )⎪⎩

⎪⎨

>⋅−=<

=.yxzayx1,yxzaxcos,yxzay2sine

y,xF

x

U glavnom programu učitati vrednosti x i y, a kao rezultat štampati x, y i F (x,y).

Rešenje:

c Funkcijski potprogram FUNCTION F(x, y) IF (x.LT.y) THEN F = EXP(x) * SIN(2 * y) ELSE IF (x.EQ.y) THEN F = COS(x) ELSE F = 1 - SQRT(ABS(x * y)) END IF RETURN END

c x, y- vrednosti promenljivih c F-vrednost funkcije PROGRAM zad c Stampanje zaglavlja WRITE (6,10) 10 FORMAT (8X, 'X', 10X, 'Y', 10X, 'F(X,Y)') DO 40 x = 0.1, 0.5, 0.1 DO 20 y = 0.01, 0.03, 0.01 WRITE (6,30) x, y, F(x, y) 30 FORMAT (2X, F8.3, 2X, F8.3, 2x, F10.4) 20 CONTINUE 40 CONTINUE STOP END

Primer 8.2. Napisati program za izračunavanje vrednosti determinante

685507

960D

−−

−=

Izračunavanje izvršiti korišćenjem potprograma tipa FUNCTION za izračunavanje determinante reda dva.

Rešenje:

Page 38: Fortran vežbe

Informatika 2, Milan Gocić

38

c Potprogram det za odredjivanje vrednosti determinante reda dva c Ulazni parametri: b1, b2, c1, c2 INTEGER FUNCTION det(b1, b2, c1, c2) INTEGER b1, b2, c1, c2 det = b1 * c2 - b2 * c1 RETURN END

c Glavni program

PROGRAM zad INTEGER a(3, 3), det, d DATA a/0, -6, 9, 7, 0, -5, 5, -8, 6/ c Izracunavanje vrednosti determinante reda tri d=a(1,1)*det(a(2,2),a(2,3),a(3,2),a(3,3))- a(1,2)*det(a(2,1),a(2,3),a(3,1),a(3,3)) +a(1,3)*det(a(2,1),a(2,2),a(3,1),a(3,2)) c Stampanje vrednosti determinante WRITE (6, 10) 10 FORMAT (5x, 'Za matricu A'/) WRITE (6, 20) ((a(i,j), i = 1,3), j = 1, 3) 20 FORMAT (5x, 3I5) WRITE (6,30) d 30 FORMAT(/ 2X, 'Vrednost determinante je:', 2X, I5) STOP END

Primer 8.3. Funkcija f definisana je izrazom

( )( )

( )1x ,1n2

x2xf0n

2

1n2

<+π

= ∑+∞

=

+

.

Sastaviti potprogram tipa FUNCTION za izračunavanje vrednosti funkcije f sa tačnošću ( )510 −≤εε . Korišćenjem ovog potprograma sastaviti program za izračunavanje vrednosti ( ) ( )sinxf i xf za

( ) 80.0 05.0 00.0x = . Rezultat štampati u obliku X F(X) F(SIN(X)) x.xx x.xxxxx x.xxxxx M M M

Rešenje: c Potprogram tipa FUNCTION nalazi vrednost funkcije f (x) c eps – zadata tacnost c a0 i a1 su clanovi reda FUNCTION F(x) eps = 1.E-5 PI = 3.14159265

Page 39: Fortran vežbe

Informatika 2, Milan Gocić

39

c Izracunavanje sume reda F = 0. a0 = x a1 = ABS(a0) n = 0 c Ispitivanje da li je tacnost zadovoljena DO WHILE (a1.GE.eps) a0 = a0 * (x ** (2 * n + 1) / ((2 * n + 1) ** 2)) F = F + a0 a1 = ABS(a0) n = n + 1 END DO F = 2. / PI * F RETURN END c Glavni program PROGRAM zad WRITE (6,10) 10 FORMAT (10X, 'X', 9X, 'F(X)', 10X, 'F(SIN(X))') c Izracunavanje f (x) i f (sinx) DO 30 x = 0.0, 0.8, 0.05 y = F(x) z = F(SIN(x)) WRITE (6,20) x, y, z 20 FORMAT (11X, F4.2, 5X, F7.5, 9X, F7.5) 30 CONTINUE STOP END

- ČAS 9 -

Opšti potprogram

Za razliku od funkcijske naredbe i funkcijskog potprograma koji imaju jednu izlaznu veličinu, opšti potprogram može imati jednu, više ili nijednu izlaznu veličinu. Opšti potprogram čini posebnu programsku celinu i može se pozvati iz bilo koje programske celine. Opšti potprogram je sledećeg oblika:

SUBROUTINE sub([f[, f]...]) telo potprograma

RETURN END

gde je:

Page 40: Fortran vežbe

Informatika 2, Milan Gocić

40

SUBROUTINE - službena reč, sub - naziv opšteg potprograma, f - fiktivni argument argument, RETURN - službena reč END - službena reč, koja označava fizički kraj programa. Vrsta fiktivnih argumenata određena je unutrašnjom konvencijom ili opisnim naredbama za eksplicitnu, odnosno implicitnu deklaraciju, koje se pišu odmah iza naredbe SUBROUTINE. Poziv opšteg potprograma se vrši naredbom

CALL sub([s[, s]...]) gde je: CALL - službena reč, sub - naziv pozvanog opšteg potprograma, s - stvarni argument. Primer 9.1. Napisati:

a) opšti potprogram, b) funkcijski potprogram,

za izračunavanje vrednosti

( )

⎟⎟⎠

⎞⎜⎜⎝

⎛+

=

1ex

1xEx43.1

5

.

Rešenje: a) SUBROUTINE E(X, VR) VR=1/(X**5*(EXP(1.43/X)+1.)) RETURN END b) FUNCTION E(X) E=1./(X**5*(EXP(1.43/X)+1.)) RETURN END Primer 9.2. Sastaviti potprogram tipa SUBROUTINE za izračunavanje vrednosti funkcije

( )∑ ∏=

≠= ⎟

⎟⎟

⎜⎜⎜

⎛−=

n

1i

n

ij1j

jaxy ,

gde su ( )n,...,1j a j = dati brojevi. Ulazni parametri potprograma su: n, x, ( )n,...,1ja j = , a izlazni y. U glavnom programu pozvati potprogram za ( ) 0.1 1.0 0.0x = . Vrednost n učitati u formatu I2, a vrednosti

( )n,...,1j a j = u formatu 8F8.2. Izlazna lista neka izgleda: N = xx X Y xx.xxxxx± xxxxxxxxE.x ±± M M

Page 41: Fortran vežbe

Informatika 2, Milan Gocić

41

Rešenje:

c Potprogram opsteg tipa SUBROUTINE IZVOD(n, x, a, y) DIMENSION a(n) c Izracunavanje sume s = 0 DO 20 i = 1, n p = 1 DO 10 j = 1, n IF (i.NE.j) THEN p = p*(x-a(j)) END IF 10 CONTINUE s = s+p 20 CONTINUE y = s RETURN END c Glavni program c Zadatak izracunava vrednost funkcije y

Page 42: Fortran vežbe

Informatika 2, Milan Gocić

42

PROGRAM zad c Deklarisanje niza A DIMENSION a(100) WRITE (6,10) 10 FORMAT (2X, 'Unesite vrednost za n') c Unos dimenzije niza READ (5,20) n 20 FORMAT (I2) WRITE (6,30) 30 FORMAT (2X, 'Unesite vrednosti niza a') c Unos niza READ (5,40) (a(i),i=1,n) 40 FORMAT (10F8.2) WRITE (6,50) n 50 FORMAT (5X, 'N=', I2, 10X, 'X', 11X, 'Y'/) DO 80 x = 0.0,1.0,0.1 c Poziv potprograma

CALL IZVOD(n, x, a, y) c Stampanje vrednosti x i y WRITE (6,60) x, y 60 FORMAT (17X, F9.2, 1X, E13.6) 80 CONTINUE STOP END

Primer 9.3. Tebelirati funkciju

( ) ( ) ( ),bcosbcos2.2asinasin6.2yxyxln3.0xf 21212222 ++++⎟⎠⎞⎜

⎝⎛ +++=

gde su x i y koreni jednačine 0z15.4zp2.0p8.1 22 =−+ za ( ) 21 aia.4031z = su koreni jednačine ,025.3p5.5p2 =−−

21 bib su koreni jednačine .01.0p3.1p6.0 2 =++ Sve kvadratne jednačine rešavati opštim potprogramom. Parametre kvadratnih jednačina učitavati u proizvoljnom formatu. Na izlazu štampati tabelu sledećeg izgleda

TABELA FUNKCIJE F(Z) Z F(Z) 1 xxx.xxxxx

Page 43: Fortran vežbe

Informatika 2, Milan Gocić

43

4 xxx.xxxxx M M

Rešenje: SUBROUTINE Kvad (a, b, c, x1, x2) x1 = (-b + SQRT(b * b – 4 * a * c)) /(2 * a) x2 = (-b - SQRT(b * b – 4 * a * c)) / (2 * a) RETURN END PROGRAM zad DATA a1, b1, c1, a2, b2, c2, a3, b3, c3 */1.8, 0.2, -4.15, 1., -5.5,-3.25, 0.6,1.3, 0.1/ c Stampanje zaglavlja WRITE(6,10) 10 FORMAT(3X, 'TABELA FUNKCIJE F(Z)' / 3X, 'Z', 8X, 'F(Z)'/) CALL Kvad(a2, b2, c2, aa1, aa2) CALL Kvad(a3, b3, c3, bb1, bb2) DO 30 z = 1, 40, 3 b1 = b1 * z c1 = c1 * z * z CALL Kvad(a1, b1, c1, x, y) f = 0.3 * (ALOG(SQRT(x * x + y * y) + x * x + y * y)) + 2.6 * (SIN(aa1) + SIN(aa2)) + *2.2 * (COS(bb1) + COS(bb2)) WRITE(6,20) z, f 20 FORMAT(2X, F4.1, 3X, F9.5) 30 CONTINUE STOP END

- ČAS 10 -

Verižni razlomak, Hornerova šema, numerička integracija,

nule funkcije

Primer 10.1. Napisati program za izračunavanje verižnog razlomka

( )

( )anxxa1n

xxa3

xxa2

xxaxf

n1n

43

32

21

−+−

−+

−+

−+=

M

Page 44: Fortran vežbe

Informatika 2, Milan Gocić

44

Na ulazu učitati vrednost za a i niz { }nixX = . Rešenje:

PROGRAM zad INTEGER a DIMENSION x(50) WRITE(6,10) 10 FORMAT(2X, 'Unesite vrednosti za a i n:') READ(5,20) a, n 20 FORMAT(2I3) WRITE(6,30) 30 FORMAT(2X, 'Unesite vrednosti niza X:') READ(5,40) (x(i), i = 1, n) 40 FORMAT(10F6.2) ver = n * SQRT(FLOAT(a)) DO 50 i = n - 1, 1, -1 ver = i * SQRT(FLOAT(a)) + (x(i) - x(i + 1)) / ver 50 CONTINUE WRITE(6, 60) ver 60 FORMAT(2X, F6.2) STOP END

Primer 10.2. Izračunati vrednost polinoma

01

1n1n

nn axa...xaxaP ++++= −

− ,

koristeći Hornerovu šemu ( )( )( ) 012n1nn axa...xaxaxa...P +++++= −− ,

za ( )21.01x,10n =≤ i

.6.11a,2.10a,66.3a,7.26a,21.1a,34.2a,6.5aa,17.3a,2.163a,75.0a

109876

543210

−==−==−=−===−===

Koeficijente učitati u pogodnom formatu, a izlazna lista neka izgleda:

X P x.x ±x.xxxxxxE± xx M M

Rešenje: c Ulazni argumenti funkcijskog potprograma: c a - ime niza

Page 45: Fortran vežbe

Informatika 2, Milan Gocić

45

c n - dimenzija niza c x - argument FUNCTION Horn(a, n, x) DIMENSION a(1) Horn = a(n) DO WHILE (n.NE.0) Horn = Horn * x + a(n - 1) n = n - 1 END DO RETURN END c Glavni program PROGRAM zad c Dimenzionisanje vektora a DIMENSION a(0:20) c Dodela vrednosti elementima niza DATA (a(i), i = 0, 10) /0.75, 163.2, -3.17, 2*5.6, -2.34, -1.21, *26.7, -3.66, 10.2, -11.6/ WRITE(6, 10) 10 FORMAT(2X, 'Unesite vrednost za n manju od 11') c Ucitavanje vrednosti promenljive READ(5, 20) n 20 FORMAT(I2) IF(n.LT.11) THEN c Stampanje zaglavlja WRITE(6,30) 30 FORMAT(2X, 'X', 10X, 'P(X)') DO 50 x = 1., 2., 0.1 y = Horn(a, 6, x) WRITE(6,40) x, y 40 FORMAT(2X, F4.2, 5X, E13.6) 50 CONTINUE ELSE c Stampanje poruke o greski WRITE(6,60) 60 FORMAT(2X, 'Uneli ste vecu vrednost od potrebne!') END IF STOP END

Page 46: Fortran vežbe

Informatika 2, Milan Gocić

46

Primer 10.3. Izračunati određeni integral

∫ +

+

=3

1x

2

dxxcose2.1

x1xarctg

A ,

Simpsonovim pravilom, sa korakom 01.0h = . Podintegralnu funkciju izračunati potprogramom tipa FUNCTION. Izlazna lista neka izgleda

VREDNOST INTEGRALA A = xxxxxxxxxE.xx ±± .

Rešenje:

Simpsonovo pravilo:

( ) ( ) ( ) ( ) ( )[ ]hbf...h2af2haf4af3hdxxf

b

a

−++++++=∫ ili

( ) ( ) ( )[ ]n22n2421n2310

b

a

ff...ff2f...ff4f3hdxxf +++++++++= −−∫ , gde je

n2

abh −= i ( ) ( )n2,...,1,0k,khaff k =+=

c Opsti potprogram c Ulazni argumenti potprograma: c a - donja granica odredjenog integrala c b - gornja granica odredjenog integrala c h - korak integracije c Funk - podintegralna funkcija c c Izlazni argumenti potprograma: c vrintg - vrednost izracunatog integrala SUBROUTINE Simpson(a, b, h, Funk, vrintg) EXTERNAL Funk n = (b - a) / (2 * h) s1 = 0 s2 = 0 DO 10 i = 1, n s1 = s1 + Funk(a + (2 * i - 1) * h) 10 CONTINUE DO 20 i = 1, n - 1 s2 = s2 + Funk(a + 2 * i * h) 20 CONTINUE vrintg = h / 3 * (Funk(a) + 4 * s1 + 2 * s2 + Funk(b - h)) RETURN END c Funkcijski potprogram c Ulazni argument: x - vrednost za koju se izracunava podintegralna funkcija

Page 47: Fortran vežbe

Informatika 2, Milan Gocić

47

FUNCTION Funk(x) Funk = ATAN((x ** 2 + 1) / x) / (1.2 * EXP(x) + COS(x)) RETURN END c Glavni program PROGRAM zad EXTERNAL Funk a = 1 b = 3 h = 0.01 c Poziv opsteg potprograma CALL Simpson(a, b, h, Funk, vrintg) c Stampanje rezultata WRITE(6,20) vrintg 20 FORMAT(2X, 'VREDNOST INTEGRALA A = ', E14.7) STOP END

Primer 10.4. Izračunati određeni integral

( )∫ ++=

6.3

02 dx

1xln2.7xsinxA ,

trapeznim pravilom, sa korakom 01.0h = . Podintegralnu funkciju izračunati potprogramom tipa FUNCTION. Izlazna lista neka izgleda

VREDNOST INTEGRALA A = ±xx.xxxxxxxE ± xx

Rešenje:

Trapezno pravilo

( ) ( ) ( ) ( ) ( ) ( )∫ ⎥⎦⎤

⎢⎣⎡ +++++++

+=

b

a

hbf...h2afhaf2

bfafdxxf ili

( ) ( ) ( )[ ]∑∫−

=

++=1n

0iii

x

x

1xfxf2hdxxf

n

0

, gde je i1i xxh −= +

c Opsti potprogram c Ulazni argumenti potprograma: c a - donja granica odredjenog integrala c b - gornja granica odredjenog integrala c h - korak integracije c Funk - podintegralna funkcija c c Izlazni argumenti potprograma: c vrintg - vrednost izracunatog integrala SUBROUTINE Trapez (a, b, h, Funk, vrintg)

Page 48: Fortran vežbe

Informatika 2, Milan Gocić

48

EXTERNAL Funk n = (b - a) / h s1 = 0. DO 10 i = 1, n - 1 s1 = s1 + Funk(a + i * h) 10 CONTINUE vrintg = h * ((Funk(a) + Funk(b)) / 2 + s1 + Funk(b - h)) RETURN END c Funkcijski potprogram c Ulazni argument: x - vrednost za koju se izracunava podintegralna funkcija REAL FUNCTION Funk(x) Funk = x * SIN(x) / (7.2 + ALOG(x ** 2 + 1.)) RETURN END c Glavni program PROGRAM zad EXTERNAL Funk a = 0. b = 3.6 h = 0.01 c Poziv opsteg potprograma CALL Trapez(a, b, h, Funk, vrintg) c Stampanje rezultata WRITE(6,20) vrintg 20 FORMAT(2X, 'VREDNOST INTEGRALA A = ', E15.7) STOP END

Primer 10.5. Napisati program za nalaženje nule funkcije 0x7x)x(f 3 =−= metodom deljenja na pola sa tačnošću ε. Proces treba prekinuti kada bude zadovoljen uslov ⎢a-b⎢≤ ε.

Rešenje:

PROGRAM zad c Definisanje funkcijske naredbe F(x)=x ** 3 – 7 * x WRITE(6, 10) 10 FORMAT(2X, 'Unesite a, b i eps:') READ(5,20) a, b, eps 20 FORMAT(2F8.3, E10.3)

Page 49: Fortran vežbe

Informatika 2, Milan Gocić

49

k = 0 DO WHILE(ABS(b - a).GT. eps) k = k + 1 c = (a + b) / 2 IF (F(c) * F(a).LT.0) THEN b = c ELSE a = c END IF END DO WRITE(6,30) c 30 FORMAT(2X, 'Resenje: ', E14.3) STOP END

Primer 10.6. Napisati program za rešavanje jednačine ex – 10x = 0 metodom sečice. Početna rešenja x0 i x1 i ε dati su na ulazu. Na izlazu štampati krajnje rešenje. Funkciju definisati funkcijskom naredbom.

Rešenje:

Za metodu sečice važe sledeća pravila:

1. definisanje funkcije, 2. početni uslovi: ,x,x 10

3. iterativna zakonitost ( ) ( ) ( ) K,2,1k,xfxfxf

xxxx k

1kk

1kkk1k =⋅

−−

−=−

−+ ,

4. uslov kraja .xx k1k ε≤−+

PROGRAM zad c Definisanje funkcijske naredbe F(x)=EXP(x) – 10 * x WRITE(6, 10) 10 FORMAT(2X, 'Unesite x0, x1 i eps') READ(5,20) x0, x1, eps 20 FORMAT(2F8.3, E10.3) k = 0 x2 = x1 - (x1 - x0) / (F(x1) - F(x0)) * F(x1) DO WHILE (ABS(x2 - x1).GT.eps) k = k + 1 x0 = x1 x1 = x2 x2 = x1 - (x1 - x0) / (F(x1) - F(x0)) * F(x1) END DO WRITE(6,30) x2 30 FORMAT(2X, 'Resenje: ', E14.3) STOP

Page 50: Fortran vežbe

Informatika 2, Milan Gocić

50

END

Primer 10.7. Napisati program za rešavanje jednačine x5 – sinx = 0 Njutnovim iterativnim postupkom . Početno rešenje x0 i tačnost ε dati su na ulazu. Na izlazu štampati krajnje rešenje. Funkciju i njen prvi izvod definisati funkcijskim naredbama.

Rešenje:

Za Njutnov metod važe sledeća pravila:

1. definisanje funkcije, 2. početni uslovi: ,x 0

3. iterativna zakonitost ( )( )

K,1,0k,xfxf

xxk

'k

k1k =−=+ ,

4. uslov kraja .xx k1k ε≤−+ PROGRAM zad c Definisanje funkcijskih naredbi f(x) = x ** 5 - SIN(x) f1(x) = 5 * x ** 4 - COS(x) WRITE(6, 10) 10 FORMAT(2X, 'Unesite x0 i eps') READ(5,20) x0, eps 20 FORMAT(F8.3, E10.3) k = 0 x1 = x0 - f(x0) / f1(x0) DO WHILE (ABS(x1 - x0).GT.eps) x0 = x1 x1 = x0 - f(x0) / f1(x0) k = k + 1 END DO WRITE(6,30) x1, f(x1) 30 FORMAT(2X, 'x1= ', E14.3, 2X, 'F(x1)=', E14.3) STOP END

Primer 10.8. Napisati potprogram za rešavanje log2x – ex = 0 metodom tetive (regula – falsi). Funkciju definisati funkcijskim potprogramom.

Rešenje:

Za metodu tetive važe sledeća pravila:

1. definisanje funkcije, 2. početni uslovi: ,x,x 10

3. iterativna zakonitost ( ) ( ) ( ) K,2,1k,xfxfxf

xxxx k

1kk

1kkk1k =⋅

−−

−=−

−+ ,

Page 51: Fortran vežbe

Informatika 2, Milan Gocić

51

4. uslov kraja .xx k1k ε≤−+ FUNCTION Tet(x0, x1, eps, F) EXTERNAL F k = 0 x2 = x1 - (x1 - x0) / (F(x1) - F(x0)) * F(x1) DO WHILE (ABS(x2 - x1).GT.eps) k = k + 1 x1 = x2 x2 = x1 - (x1 - x0) / (F(x1) - F(x0)) * F(x1) END DO Tet = x2 RETURN END FUNCTION F(x) F = ALOG10(x) ** 2 - EXP(x) RETURN END PROGRAM zad EXTERNAL F WRITE(6, 10) 10 FORMAT(2X, 'Unesite x0, x1 i eps') READ(5,20) x0, x1, eps 20 FORMAT(2F8.3, E10.3) t = Tet(x0, x1, eps, F) WRITE(6,30) t 30 FORMAT(2X, 'T= ', E14.3) STOP END