Professional Documents
Culture Documents
MOSTAR, 2007.
RI PT
PROGRAMIRANJE U FORTRANU
SKRIPTA MOSTAR, 2007.
A
mr. Raid Hadovi, dipl.in.gra.
SK
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
SADRAJ: 1. 2. 3. 4. 5. 6. Programiranje u Fortran-u Rijeeni zadaci Problemi za vjebanje Neki od dosadanjih ispitnih zadataka Zadaci za seminarski rad Literatura 02 22 55 62 66 73
SK
1
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
PROGRAMIRANJE U FORTRANU
SK
2
UVOD
Svaki program se sastoji od pet osnovnih koraka. Prvi korak START odnosno poetak, drugi korak je UITAVANJE PODATAKA sa kojima e se raditi u programu, trei korak je OPERACIJA, odnosno faza programa gdje se uneeni podaci obrauju tj. vri se rad sa podacima u zavisnosti od zadatka. U etvrtom koraku se TAMPAJU rezultati programa, dok se u petom koraku program zavrava (STOP i END).
RI PT
Znaenje ili Uitavanje podataka u program Operacija - rad sa podacima ili tampanje podataka i rezultata na ekranu ili na tampau Poreenje ispunjenje uslova Poetak i kraj programa Povratak iz potprograma u glavni program Pozivanje potprograma i potprogram
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
Oznaka
Naredba u Fortranu
READ, DATA, OPEN Zavisno od zadatka koriste se razliite komande WRITE, PRINT
SK
IF
Dijagrami toka se koriste za grafiko predstavljanje redosljeda svih radnji, koje su sastavni dio nekog programa: poetka, uitavanja podataka, operacija, poreenja, tampanja rezultata, pozivanja potprograma i zavretka. U dijagramima toka se koriste geometrijski oblici radi predstavljanja raznih operacija programa, koji se obavljaju. Standardizovanim oblicima obezbjeuje se vizuelno predstavljanje problema zajedniko za sve programe.
Dijagram toka Uitavanje podataka Operacija tampanje podataka Poreenje ispunjenje uslova START, STOP i END Pozivanje potprograma RETURN
Objanjenje Potrebne podatke unosimo sa tastature ili iz nekog poznatog FILE-a. U Fortranu koristimo naredbu READ(*,*) ili READ(5,*). U sluaju da se podaci unose u program iz nekog FILE-a onda se koristi naredba OPEN. U ovu grupu spadaju sve komande, koje obavljaju neku vrstu operacije u zavisnosti od onog to se trai u zadatku. Ispis podataka i rezultata na ekranu ili na tampau. Vri se pomou naredbe WRITE(*,*) ili WRITE(6,*). Oznaka * ili 6 znai da se podaci i rezultati ispisuju na ekranu. Oznaka * poslije zareza znai da je naredba uneena u slobodnom formatu. Najee koritena funkcija je IF (ako u prevodu sa engleskog jezika) koja nam slui da bi postavili pitanje neke operacije i da bi na to pitanje imali dva mogua odgovora DA i NE. Kasnije e biti vie rijei o funkciji IF.
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
VARIJABLE
Varijable koje poinju sa prvim slovom I, J, K, L, M i N su po standardu cjelobrojne varijable, a sve ostale su realne varijable. INTEGER naredba koja od realnih brojeva pravi cijele brojeve Primjer: INTEGER ALBA ALBA u ovom sluaju postaje cjelobrojna varijabla.
REAL naredba koja od cjelobrojnih varijabli pravi realne varijable Primjer: REAL MAAS,KRUG,NET (100) u ovom sluaju MAAS,KRUG,NET (100) postaju realne varijable (cjelobrojne su zato to su poetna slova M, K, N ...)
SK
U FORTRAN-u koristimo 80 kolona. U prvu kolonu unese se slovo C, kao oznaka za komentar. Komentari uneeni na ovaj nain pri ispisivanju programa na ekranu ili na tampau se ne vide tj. skriveni su u programu i pomau samo programeru da zna ta je radio u programu i dokle je stigao. U kolone 2, 3, 4 i 5 upisuju se brojevi komandi. U estu kolonu se upisuje znak * ili + , koji slui kao nastavak prethodnog reda. Od sedme kolone se upisuju naredbe jezika FORTRAN, pa do 72 i poslije prelazimo u sljedei red (ukoliko naredba ne moe da stane). Znak = u FORTRAN-u nema isto znaenje kao matematiki znak = ve znai: prebaci sa desne strane jednaine na lijevu stranu.
Komande koje se stavljaju u dijagram toka da bi se oznaio poetak i kraj programa. Znak koji nam slui za pozivanje potprograma. Razlikujemo 2 potprograma: FUNCTION (funkcijski) i CALL SUBROUTINE (opti). Komanda koja se koristi da bi se izvrio povratak iz potprograma u glavni program.
OPERACIJE U FORTRANU Aritmetike operacije Stepenovanje Dijeljenje Mnoenje Sabiranje Oduzimanje Oznake u FORTRAN u ** / * + -
Redoslijed koritenja aritmetikih operacija: R.br. 1. 2. 3. 4. Definicija zagrade stepenovanje mnoenje i dijeljenje sabiranje i oduzimanje Pisanje formula
RI PT
(A+B)/C
A
Pisanje formula u Fortranu ((A+B)*C)**D (B**2+4*A*C)/(2*A) 2*3,1415927*R**2 Prikaz u Fortranu .EQ. (Equally) .NE. (Not Equally) .LT. (Little) .GT. (Great) .LE. (Little and Equally) .GE. (Great and Equally)
5
( ( A+B) C )
B2 + 4 A C 2 A 2 r 2
Zavisne operacije
SK
Logike operacije Fortran .NOT. .AND. .OR. .EQV. .NEQV. Znaenje Nije I Ili Ili je Ili nije
Znaenje Jednako Nije jednako Manje Vee Manje i jednako Vee i jednako
Primjer .NOT.(3.EQ.2) TANO (3.EQ.3).AND.(2.EQ.2) TANO (3.EQ.3).OR.(2.EQ.2) TANO (3.EQ.3).EQV.(2.EQ.2) TANO (3.EQ.3).NEQV.(2.EQ.2) NETANO (3.EQ.3).EQV.(3.EQ.2) TANO
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
NEKE OD NAREDBI U FORTRANU: READ Naredba za uitavanje podataka u program. READ(*,*) ili READ(*,n) ili READ(5,n)
Oznaka * ili 6 znai da je ispis prikazan na ekranu. Oznaka * poslije zareza znai da je naredba uneena u slobodnom formatu. Oznaka n predstavlja ime FORMATA, a oznaava se proizvoljnim brojem i upuuje na broj kojim je predstavljena naredba Format. Primjer: WRITE(6,10)N 10 FORMAT(I2)
FORMAT Naredba pomou koje, u programu, definiemo ulaz i izlaz podataka tj. prema vrsti podataka se odreuje format u kojem e biti uneeni (razlikujemo cjelobrojne i realne varijable), kao i ureenje ekrana ili tampane stranice.
SK
Promjenljiva
Cijeli broj Realan broj maksimalno do 7 decimala Realan broj maksimalno do 7 decimala Realan broj (do 7 decimala ) Gn.m decimalan i eksponencijalan Realan broj (do 16 decimala) Dn.m Alfanumeriki broj An Logiki broj Ln Poetna taka za broj kolone Tn Preskakanje n kolona nX Broj preskoenih redova n/ Broj preskoenih kolona 1X Samo neki od Format-a e biti obraeni u ovoj skripti.
Naredba Fortrana u kojoj se koristi READ/WRITE READ/WRITE READ/WRITE READ/WRITE READ/WRITE READ/WRITE READ/WRITE WRITE READ WRITE WRITE
WRITE Naredba za tampanje ili ispis podataka i rezultata na ekranu ili na tampau.
RI PT
Oznaka * ili 5 znai da se podaci unose sa tastature. Oznaka * poslije zareza znai da je naredba uneena u slobodnom formatu. Oznaka n predstavlja ime FORMATA, a oznaava se proizvoljnim brojem i upuuje na broj kojim je predstavljena naredba Format.
In format za cjelobrojne varijable n broj mjesta koja e se ostaviti (rezervisati) za broj cifara cjelobrojnih varijabli Primjer: READ(5,10)N 10 FORMAT (I3) Ili WRITE(6,10)N 10 FORMAT(I3)
U ovim primjerima mogue je unijeti samo trocifrene pozitivne dok je nemogu unos neativnih brojeva ili ispisati trocifrene pozitivne dvocifrene negativne brojeve. Grafiki prikaz formata I4:
RI PT
Format READ I4 I4 I4 I4 Uneeni podatak 12 -122 123456 1000 Vrijednost 12 -122 123456 1000 Format - WRITE I4 I4 I4 I4
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
Oitani podatak 12 -122 1234 1000 Ispisani podatak 12 -122 **** 1000
SK
Primjer: READ(5,10)N 10 FORMAT (F8.2) Ili WRITE(6,10)N 10 FORMAT(F8.3)
Fn.m format za realne varijable n ukupan broj cifara ukljuujui i mjesto za predznak i jedno mjesto za decimalnu taku m broj mjesta koja e se ostaviti za decimalne brojeve (za broj cifara koje e doi poslije decimalne take) En.m - format za realne varijable (E se koristi za eksponencijalne brojeve) n ukupan broj cifara ukljuujui i mjesto za predznak i jedno mjesto za decimalnu taku m broj mjesta koja e se ostaviti za decimalne brojeve (za broj cifara koje e doi poslije decimalne take) U ovom formatu se ne mogu koristiti negativni brojevi.
Isto vai i za Format En.m osim to nije predvien broj mjesta za predznak, jer se Format En.m ne koristi za negativne brojeve. Matematiki prikaz 1234556.958 0.34567 435.67 -123.4567 Prikaz u Fortranu za E8.3 .123E+07 .346E+00 .436E+03 ******** Prikaz u Fortranu za F8.3 ******** 0.346 435.670 -123.456
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
n =A+ B + C + D A broj mjesta za predznak B broj mjesta za broj cifara broja koji e biti uneen ili ispisan C broj mjesta za decimalnu taku D broj mjesta koji je ostavljen za broj decimalnih brojeva
Tn poetna taka na ekranu za broj kolone (koristi se u naredbi WRITE) Primjer: WRITE(6,10)N 10 FORMAT(T20,I2)
Znaenje u Formatu: U prvom redu i u 20toj koloni (T20) e poeti ispis rezultata.
nX oznaka za broj kolona koje e se preskoiti prilikom unoenja ili ispisa podataka ili rezultata. Koristi se u naredbama READ i WRITE. Primjer: READ(5,10)R 10 FORMAT(10X,F8.2) Znaenje u Formatu: 10X preskoeno deset kolona
SK
Primjer:
Znak / - oznaka za preskakanje odreenog broja redova pri unosu ili ispisu podataka ili rezultata. Koristi se u naredbama READ i WRITE. WRITE(6,*)UNESITE NEKI REALAN BROJ READ(5,10)R 10 FORMAT(F8.2) WRITE(6,11)R 11 FORMAT(///,10X,REALAN BROJ JE:,F8.2) STOP END
8
Znaenje u Formatu: /// preskoena tri reda i 10X preskoeno deset kolona tj. ispis REALAN BROJ JE: e poeti u etvrtom redu i u 11-toj koloni. KONTROLNI IZRAZI U FORTRAN-u 1) Bezuslovni GOTO Naredba koja usmjerava program direktno na broj nekog reda bez ikakvog uslova. 2) IF a) LOGIKI IF b) ARITMETIKI IF c) BLOK IF a) LOGIKI IF
RI PT
<Izraz> .GT. .AND. .OR. <Izraz> promjenljiv nepromjenljiv Aritmetiki izraz
NE
A
DA
Koristi se za poreenje i ispunjavanje samo jednog uslova koji ima dva odgovora DA ili NE. Logiki IF se pie u sljedeoj formi: [<Broj reda>] IF [<Logiki izraz>] <izraz u FORTRAN u > .EQ. .NE. .NOT. <Logiki izraz> = <Izraz> .GE. .LT. .LE. <Izraz> :
SK
Primjer:
<izraz u FORTRAN u >: Ako je rezultat aritmetikog izraza TAAN onda program <izraz u FORTRAN u > naredbu slijedi, u suprotnom program nastavlja sa svojim tokom (u sluaju odgovora NE).
K=5
b) ARITMETIKI IF Koristi se za poreenje i za ispunjavanje jednog uslova koji ima tri razliita odgovora. Aritmetiki IF se pie u sljedeoj formi: <Broj izraza> IF (Aritmetiki izraz) N1, S1, P1 N1: <Arit. Izraz> Ako je rezultat <0 (manji od nule) broj reda S1: <Arit. Izraz> Ako je rezultat =0 (jednak nuli) broj reda P1: <Arit. Izraz> Ako je rezultat >0 (vei od nule) broj reda
<0 >0
RI PT
=0
Rezultat
A
10
Primjer: Unijeti cijele negativne i pozitivne brojeve i nai pojedinano zbir pozitivnih i zbir negativnih. Program se zaustavlja unoenjem nule u program. C C C BROJ: UCITANI CIJELI BROJ PZBIR: ZBIR CIJELIH POZITIVNIH BROJEVA NZBIR: ZBIR NEGATIVNIH CIJELIH BROJEVA INTEGER BROJ, PZBIR PZBIR=0 NZBIR=0 WRITE(6,*)UNESITE NEKI BROJ 5 READ(5,15)BROJ 15 FORMAT(I4) IF (BROJ)50,200,100
SK
50 NZBIR=NZBIR+BROJ GOTO 5 C C C
C C C
100 BIR=PZBIR+BROJ GOTO 5 C USLOV ZA ZAUSTAVLJANJE PROGRAMA JE ISPUNJEN 200 WRITE(6,10)PZBIR,NZBIR 10 FORMAT(1X,ZBIR POZ. BROJEVA:,I6,///,1X,ZBIR NEG.BROJEVA:,I6) STOP END
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
Rjeenje: Prikaz na ekranu e biti, ako unesemo sljedee brojeve 3, 5, -8, -7, 10, 0. ZBIR POZ. BROJEVA:####18 ZBIR NEG. BROJEVA:###-15 c) BLOK IF <Broj izraza> IF (<Uslov>) THEN --------------------------------------------ELSE --------------------------------------------ENDIF
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
11
Moemo raditi i sa vie uslova i sa vie blokova, ali samo se jedno ENDIF koristi. a) Sluaj kada se naredba ELSE ne koristi
Ako se naredba ELSE ne koristi, onda je uslov taan i program nastavlja sa radom dok ne doe do naredbe ENDIF, osim u sluaju ako u bloku IF ne postoji naredba GOTO koja bi preusmjerila tok programa. Primjer:
SK
K=5 IF(K.EQ.5) THEN WRITE(6,*)TACNO WRITE(6,*)KRAJ PROGRAMA 5 GOTO 50 ENDIF 10 WRITE(6,*)NETACNO 50 STOP END
U ovom sluaju, ako je uslov K=5 taan onda se koristi naredba GOTO da bi se preusmjerio tok programa na kraj programa, u suprotnom program ispisuje na ekranu NETACNO i zaustavlja se. b) Sluaj kada se naredba ELSE koristi
Ako se naredba ELSE koristi u bloku IF i ako je uslov taan onda program ide onim tokom kako ga usmjeravaju naredbe THEN i ELSE, osim u sluaju ako u bloku IF ne postoji naredba GOTO koja bi preusmjerila tok programa.
RI PT
[<broj reda>] IF [<Uslov>] THEN ------------BLOK X ------ELSE IF [<Uslov 1>] THEN ------------BLOK Y ------ELSE IF [<Uslov 2>] THEN ------------BLOK Z ------ELSE ------------BLOK W ------ENDIF
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
SK
Redoslijed ispunjavanja uslova:
<Uslov> Ako je TANO program e uraditi BLOK X . <Uslov> NETAAN i <Uslov 1> TAAN program e uraditi BLOK Y . <Uslov> i <Uslov 1> NETANI i <Uslov 2> TAAN program e uraditi BLOK Z . <Uslov>,<Uslov 1> i <Uslov 2> NETANI program e uraditi BLOK W .
12
Pomou ELSE programu dajemo mogunost da odabere taan odgovor, odnosno ako je uslov taan na ekranu bie ispisano: TACNO ISHOD POZITIVAN dok e u suprotnom biti: NETACNO ISHOD NEGATIVAN
Primjer: K=5 IF(K.EQ.5) THEN WRITE(6,*)TACNO WRITE(6,*)ISHOD POZITIVAN ELSE WRITE(6,*)NETACNO WRITE(6,*)ISHOD NEGATIVAN ENDIF STOP END
RI PT
IF (<Uslov>) THEN ------------------------ELSE ------------------------------------ENDIF
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
<Uslov> TAAN program e uraditi BLOK A. <Uslov> i <Uslov 1> TANI program e uraditi BLOK B. <Uslov> i <Uslov 1> i <Uslov 2> TANI program e uraditi BLOK C. <Uslov> i <Uslov 1> TANI i <Uslov 2> NETAAN program e uraditi BLOK C1. <Uslov> TAAN, a <Uslov 1> NETAAN program e uraditi BLOK B1. <Uslov> NETAAN program e uraditi BLOK A1.
SK
Taan blok IF
c) svaki blok koji pone mora se i zavriti. Iz jednog IF bloka se ne moe prebacivati neka informacija u drugi.
13
b) IF blokovi proces rada: iznutra ka vani [<broj reda>] IF [<Uslov>] THEN ------------BLOK A ELSE IF [<Uslov 1>] THEN ------------BLOK B ELSE IF [<Uslov 2>] THEN ------------BLOK C ELSE ------------BLOK C1 ENDIF ENDIF ------------BLOK B1 ELSE ------------BLOK A1 ENDIF
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
14
[<broj reda>] DO <Sn> <povratna varijabla> = <prva> , <kraj> [,<korak rasta>] ------------------------<Sn> [ CONTINUE ] <povratna varijabla> : moe biti cijeli ili realni broj <prva> : poetna vrijednost povratne varijable <kraj> : posljednja vrijednost povratne varijable <korak rasta> : vrijednost za koju se poveava unos podataka <prva>, <kraj>, <korak rasta> : mogu biti promjenljivi nepromjenljivi aritmetiki izraz broj funkcija.
SK
Pravila:
<Sn> : broj reda koji zavrava petlju i kome se pridruuje naredba CONTINUE. Mora biti cijeli broj. 1. Naredba DO se uvijek mora koristiti zajedno sa naredbom CONTINUE. 2. Petlja poinje sa naredbom DO i uzima vrijednost <prva> i nastavlja sa radom sve do naredbe CONTINUE. 3. Naredba CONTINUE prilikom svakog okretanja petlje poveava vrijednost <prva> za vrijednost <korak rasta> dok ne doe do zadnje vrijednosti <kraj>. Poslije toga program dalje nastavlja sa radom. 4. Ako se vrijednost <korak rasta> ne napie onda se uzima da je 1.
5. Ako je vrijednost <korak rasta> pozitivna vrijednost <povratna varijabla> se mijenja sve dok ne doe do vrijednosti <kraj> pri tom e izvravati sve naredbe unutar DO CONTINUE petlje. Primjer: WRITE(6,10) 10 FORMAT(1X,24(/)) DO 20 I = 1,5 WRITE(6,25) I 25 FORMAT(1X,I2,.PUTA RADIO) 20 CONTINUE STOP END
6. Ako je ispunjen uslov onda e se DO CONTINUE petlja okrenuti barem jednom. Primjer: WRITE(6,10) 10 FORMAT(1X,24(/)) DO 20 I = 5,1 WRITE(6,25) I 25 FORMAT(1X,I2,.PUTA RADIO) 20 CONTINUE STOP END Prikaz na ekranu: 5. PUTA RADIO
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
15
tj. ako je vrijednost <prva> vea od vrijednosti <kraj> onda e se petlja jedan put okrenuti.
SK
Primjer: WRITE(6,10) 11 FORMAT(1X,24(/)) DO 20 I = 5,1,-1 WRITE(6,25) I 25 FORMAT(1X,I=,I2) 20 CONTINUE STOP END
7. Ako je vrijednost <korak rasta> negativna onda vrijednost <prva> mora biti vea od vrijednosti <kraj> tako da e se svaki put pri oktretanju petlje vrijednost <povratna varijabla> smanjivati za vrijednost <korak rasta>.
Prikaz na ekranu: I=5 I=4 I=3 I=2 I=1 8. Ako su vrijednosti <prva>, <kraj>, <korak rasta> definisane kao promjenljive prije dolaska do naredbe DO tj. prije petlje mora im se prethodno zadati neka vrijednost. ------------------5 DO 10 I = N,M ------------------10 CONTINUE -------------------
RI PT
PUTA RADIO 1. 2. 3. 4. 5. PUTA RADIO PUTA RADIO PUTA RADIO PUTA RADIO PUTA RADIO
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
9. Vrijednost <povratna varijabla> unutar petlje se ne smije ponovo posebno zadavati, jer tada petlja nece uraditi predvieno. Primjer: WRITE(6,10) 10 FORMAT(1X,24(/)) DO 20 I = 1,5 WRITE(6,25) I 25 FORMAT(1X,I2,.PUTA RADIO) 50 I=6 20 CONTINUE STOP END
SK
Prikaz na ekranu:
16
10. Vrijednost <povratna varijabla> moe da bude zadata i kao promjenljiva i da se koristi u nekoj drugoj svrhi osim u onoj osnovnoj. Primjer: INTEGER ZBIR ZBIR=0 WRITE(6,10) 10 FORMAT(1X,24(/)) DO 20 I = 1,100 ZBIR=ZBIR + I
RI PT
DO ................... GOTO ili IF ................... CONTINUE DO.................. .................... .................... CONTINUE GOTO ili IF
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
11. Naredbe GOTO ili IF program mogu da izvedu van granica DO CONTINUE petlje. MOGUE
NEMOGUE
SK
MOGUE
12. U sluaju da imamo vie od jedne petlje pravilo rjeavanja petlji je iznutra prema vani.
17
RI PT
DO 10 K DO 10 L DO 10 M 10 CONTINUE Primjer: INTEGER A(10,10),B(100).
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
18
14. Po zavretku <povratna varijabla> se moe koristiti u razne druge svrhe u zavisnosti od zadatka. DIMENSION
Naredba koja odreuje (rezervie) prostor za varijable i promjenljive koje e biti uneene prilikom koritenja programa. DIMENSION serija ime (a1, a2, ...) [serija ime 1 (b1, b2,...)] Primjer:
SK
Pravila: 1. 2. 3. 4. 5. 6.
Naredba DIMENSION se postavlja na poetku programa. (START) U ovoj naredbi moemo definisati jednu ili vie serija. U jednom program u naredba se moe vie puta koristiti. a1, a2, an ili b1, b2, bm dimenzija moe biti cijeli ili promjenljivi broj. Ne moe se u istom programu 2 puta definisati prostor za istu seriju. U programu se ne mora koristiti ova naredba.
POTPROGRAMI
Prilikom programiranja mnogo puta se desi da se dijelovi programa ponavljaju. Da ih ne bi ponovo pisali na razliitim mjestima, koristimo se potprogramima za obavljanje te funkcije. Znai, program koji moe da radi sam za sebe, a koji je dio glavnog programa zovemo POTPROGRAM.
1) Otvoreni potprogram: FUNCTION (funkcijski) potprogram 2) Zatvoreni potprogram: CALL SUBROUTINE (opti) potprogram
Radi povratka iz potprograma u glavni program obavezno je koritenje naredbe RETURN. RETURN: Naredba za povratak iz potprograma u glavni program. Pravila: 1) 2)
RI PT
FUNCTION <ime> (par1(,par2)...) ----------------------------RETURN END
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
Najmanje jedna naredba RETURN mora biti u potprogramu Prilikom povratka u glavni program vraa se u red iz kojeg je pozvan potprogram (FUNCTION) ili odmah u prvi poslije poziva CALL (opti).
Dio programa koji moe da radi sam za sebe i koji moe da bude pozvan vie puta. Opti oblik:
SK
Pravila:
<ime> Ime funkcijskog potprograma. (par1(,par2)...) promjenljive koje se prebacuju iz glavnog programa u potprogram.
1) FUNCTION potprogram mora poeti sa FUNCTION a zavriti sa END. 2) Moe se koristiti vie od jedne definicije, osim u sluaju ako je funkcija aritmetika, onda semoe koristiti samo jednom. 3) Koristei se imenom funkcije FUNCTION (funkcijski) potprogram dolazi u aktivno stanje.
19
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
4) Iz ovog potprograma u glavni program vraa se samo jedna vrijednost. Povratna vrijednost nosi ime funckijskog potprograma. 5) Ime funkcije istovremeno odreuje i tip funkcije. 6) Isti FUNCTION potprogram moe biti pozvan vie puta. 7) U potprogramu mora biti samo jedno RETURN prisutno. 8) Jedan FUNCTION potprogram moe biti pozvan iz nekog drugog FUNCTION potprograma. 9) Vrijednosti promjenljivih koje se alju u potprogram moraju biti jednake promjenljivim u tom potprogramu.
F je ime potprograma koji se poziva iz glavnog programa i samim tim je nepoznata u potprogramu, a dok su A i B ve poznate varijable koje su uneene u glavnom programu. Prelaskom u potprogram nije obavezno koritenje istih oznaka za varijable, tako da u primjeru varijabla A prelazi u C, a varijabla B u D. Nakon izvrene potrebne operacije u potprogramu izraunata vrijednost F se vraa u glavni program i to u isti red iz kojeg je potprogram, sa imenom F, pozvan. Nakon povratka u glavni program, vrijednost koju je potrebno tampati ili ispisati na ekranu je vrijednost S (strelicama je objanjen put prelaska vrijednosti iz glavnog programa u potprogram i nazad). Kroz gornji primjer je objanjeno na koji nain se izraunava samo vrijednost S koristei se funkcijskim potprogramom. 2) OPTI POTPROGRAM
SK
Pravila:
Opti oblik CALL SUBROUTINE (opteg) potprograma. SUBROUTINE <ime potprograma> (par1,(par2),...) --------------RETURN END <ime potprograma> Koristi se za odreivanje imena funkcije (par1,(par2),...) Lista promjenljivih parametara.
1) Opti potprogram se poziva naredbom CALL iz glavnog programa, a potprogram poinje sa SUBROUTINE, a zavrava sa END.
20
2) Unutar opteg potprograma sve naredbe se mogu koristiti. 3) Najmanje jedno RETURN mora postojati. 4) Ime potprograma nema nikakvog uticaja na vrijednost koja se vraa u glavni program. 5) Jedan SUBROUTINE potprogram moe biti pozvan vie puta. 6) Iz jednog potprograma se moe pozvati novi potprogram. ------CALL PRIMJER (A,B,C,N,...) ------ ------ SUBROUTINE PRIMJER (D,E,F,M...) ------------RETURN END
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
21
Primjer:
Objanjenje:
U gornjem primjeru ime potprograma je PRIMJER i obavezno se mora naznaiti u potprogramu. Naime, potprogram PRIMJER se poziva iz glavnog programa pomou naredbe CALL, tako da program prelazi u potprogram pomou naredbe SUBROUTINE. Pored CALL i SUBROUTINE mora stajati ime potprograma (u ovom sluaju PRIMJER). Ime programa predstavlja samo vezu izmeu glavnog programa i potprograma, ali se ne uzima kao nepoznata vrijednost kao kod funkcijskog potprograma. U zagradi se nalaze sve vrijednosti, poznate i nepoznate, odnosno vrijednosti koje e biti obraivane u potprogramu.U glavnom programu su A i B nepoznate, a C i N su poznate i prelaze u F i M, a iz potprograma kao proraunate D i E prelaze u glavni program na mjesto nepoznatih A i B. U daljnem radu programa mogue je tampati proraunate varijable A i B, kao i poznate C i N. Kroz gornji primjer je objanjeno na koji nain se izraunava vei broj nepoznatih vrijednosti koristei se optim potprogramom.
SK
Glavna razlika izmeu dva predstavljena potprograma je u tome to funkcijski potprogram moe da prorauna samo jednu vrijednost, a opti potprogram moe beskonano mnogo vrijednosti.
RI PT
RIJEENI ZADACI
A SK
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
22
RI PT
B A, B STOP
END
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
23
START
Fortran C C C C
SK
Ispis na ekranu
UCITATI VARIJABLE A i B I ODSTAMPATI IH UCITAVANJE VARIJABLI A i B READ(5,10)A,B 10 FORMAT(F8.2) STAMPANJE VARIJABLI A i B WRITE(6,20)A,B 20 FORMAT(10X,//,'VARIJABLA A=',F8.2,/,'VARIJABLA B=',F8.2) ZAUSTAVLJANJE PROGRAMA STOP END
INTEGER ZBI
A B
RI PT
S=(A+ZBI)*B S STOP
END
ZBI
A
24
Fortran C
SK
2 3 4 Ispis
PROGRAM ZA UNOSENJE ZBI I ODREDJIVANJE S WRITE(*,*)'PROGRAM ZA PRORACUN S=(A+ZBI)*B' WRITE(*,*)' ' INTEGER ZBI WRITE(6,*)'UNESITE VARIJABLU A' READ(5,1)A FORMAT(F8.2) WRITE(6,*)'UNESITE VARIJABLU B' READ(5,2)B FORMAT(F8.2) WRITE(6,*)'UNESITE ZADNJI BROJ INDEKSA' READ(5,3)ZBI FORMAT(I2) S=(A+ZBI)*B WRITE(6,4)S FORMAT(/,5X,'VRIJEDNOST S=',F10.2) STOP END na ekranu
B
DA
RI PT
A B STOP
END
A>B
A
NE
Fortran C C 10 C 2 20 15 3
SK
25 100 Ispis na ekranu
UCITATI VARIJABLE A i B I ODSTAMPATI VECU UCITAVANJE VARIJABLI A i B WRITE(*,*)'UNESITE VARIJABLE A i B' READ(5,10)A,B FORMAT(F8.2) STAMPANJE VARIJABLI A i B IF(A.GT.B)GOTO 15 WRITE(6,2) FORMAT(10X,///,'VARIJABLA B JE VECA=',F8.2) WRITE(6,20)B FORMAT(10X,///,'VARIJABLA B=',F8.2) GOTO 100 WRITE(6,3) FORMAT(10X,///,'VARIJABLA A JE VECA=',F8.2) WRITE(6,25)A FORMAT(10X,///,'VARIJABLA A=',F8.2) STOP END
25
A B
RI PT
PROIZVOD=A*B SUMA, PROIZVOD STOP
END
SUMA=A+B
A
26
Fortran C
SK
3 4 Ispis na ekranu
KALKULACIJA SUME I PROIZVODA DVIJE VARIJABLE REAL C WRITE(*,*)'UNESITE VARIJABLU A' READ(5,1)A FORMAT(F6.2) WRITE(*,*)'UNESITE VARIJABLU B' READ(5,2)B FORMAT(F6.1) C=A+B P=A*B WRITE(6,3)C FORMAT(10X,///,'SUMA=',1X,F7.2) WRITE(6,4)P FORMAT(10X,////,'PROIZVOD=',1X,F10.2) STOP END
5) Uitati varijable A i B, nai sumu i proizvod istih i odtampati veu od njih u glavnom programu.
Rjeenje: Dijagram toka
START
RI PT
S=A+B P=A*B
DA NE
A
P
S>P
STOP
END
Fortran C 1
KALKULACIJA SUME I PROIZVODA I STAMPANJE VECE OD NJIH WRITE(*,*)'UNESITE VARIJABLU A' READ(5,1)A FORMAT(F 6.2) WRITE(*,*)'UNESITE VARIJABLU B' READ(5,2)B FORMAT(F 6.1) S=A+B P=A*B IF(S.GT.P)THEN WRITE(*,5) FORMAT(/,'SUMA JE VECA OD PROIZVODA') WRITE(6,3)S FORMAT(/,'SUMA JE',1X,F 7.2) ELSE WRITE(*,6) FORMAT(/,'PROIZVOD JE VECI OD SUME') WRITE(6,4)P FORMAT(/,'PROIZVOD JE',1X,F 10.2) ENDIF STOP END
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
SK
27
Ispis na ekranu
RI PT
START A B
DA
A
28
B=0
C=A/B C
STOP
END
SK
Fortran C 1 5 2 3
KALKULACIJA KOLICNIKA WRITE(*,*)'UNESITE VARIJABLU A' READ(5,1)A FORMAT(F 6.2) WRITE(*,*)'UNESITE VARIJABLU B' READ(5,2)B FORMAT(F 6.2) IF(B.EQ.0)GOTO 5 C=A/B WRITE(6,3)C FORMAT(/,'KOLICNIK JE',F10.2) STOP END
Ispis na ekranu
x1,2 =
RI PT
START B,C A
DA
b b 2 4ac 2a
A
X1 = X1 = B D 2* A B + D 2* A
IMAM DVA RJESENJA X1= , X2=
D= b 2 4ac
D > 0 => Realna rjeenja (dva rjeenja x1 , x2) D < 0 => Kompleksno rjeenje D = 0 => Dvostruko rjeenje (x1 = x2)
Dijagram toka
A=0
SK
IMAM KOMPLEKSNA RJESENJA
D = B2 4 * A * C
X1 =
B 2* A
29
Fortran C PROGRAM ZA RJESAVANJE KVADRATNE JEDNACINE REAL D,X1,X2 WRITE(6,*)'PROGRAM ZA RJESAVANJE KVADRATNE JEDNACINE' WRITE(6,*)'Ax2+Bx+C=0' WRITE(6,*)' ' WRITE(6,*)'UNESITE VRIJEDNOST B' READ(5,1)B WRITE(6,*)'UNESITE VRIJEDNOST C' READ(5,1)C WRITE(6,*)'UNESITE VRIJEDNOST A' READ(5,1)A FORMAT(F8.2) IF(A.EQ.0)GOTO 10 D=B**2-4*A*C IF(D)20,30,40 WRITE(6,2) FORMAT(///,2X,'IMAM KOMPLEKSNA RJESENJA') GOTO 100 X1=-B/(2*A) WRITE(6,3)X1 FORMAT(///,2X,'IMAM DVOSTRUKO RJESENJE',/,'X=',F10.2) GOTO 100 X1=-B/(2*A)-SQRT(D)/(2*A) X2=-B/(2*A)+SQRT(D)/(2*A) WRITE(6,4)X1,X2 FORMAT(///,2X,'IMAM DVA RJESENJA',/,'X1=',F10.2,/,'X2=',F10.2) STOP END
10 1
30 3 40
4 100
Ispis na ekranu
SK
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
30
20 2
RI PT
RI PT
UITAJTE ELEMENTE NIZA A DO 10 I = 1,N A (I) 10 ELEMENTI NIZA A SU: DO 20 I = 1,N A (I)
20
A
31
SK
Fortran C C C
STOP
END
UCITAVANJE I STAMPANJE NIZA ELEMENATA DIMENSION A(100) UCITAVANJE BROJA ELEMENATA NIZA WRITE(6,*)'UNESITE BROJ ELEMENATA NIZA' READ(5,2)N 2 FORMAT(I4) UCITAVANJE ELEMENATA NIZA A WRITE(6,*)'UCITAJTE ELEMENTE NIZA A' DO 10 I=1,N READ(5,1)A(I) 1 FORMAT(F8.2) 10 CONTINUE
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
STAMPANJE ELEMENATA NIZA A WRITE(*,*)'ELEMENTI NIZA A SU:' DO 20 I=1,N WRITE(6,3)A(I) 3 FORMAT(F8.2) 20 CONTINUE STOP END
Ispis na ekranu
RI PT
START DIMENSION A(20) DO 10 I=1,20 A(I) 10 P=1 S=0 DO 20 I=1,10 S=S+A (2*I) P=P*A (2*I-1) 20 S,P STOP END
A
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
9) Uitati niz od 20 elemenata i nai sumu lanova na parnim i proizvod elemenata na neparnim mjestima. Sumu i proizvod odtampati u glavnom programu.
Rjeenje:
Dijagram toka
SK
32
Fortran C SUMA PARNIH I PROIZVOD NEPARNIH ELEMENATA NIZA DIMENSION A(20) WRITE(*,*)'PROGRAM ZA SABIRANJE PARNIH I MNOZENJE NEPARNIH WRITE(*,*)ELEMENATA NIZA' WRITE(*,*)'UNESITE 10 ELEMENATA NIZA' UNOSENJE ELEMENATA NIZA A DO 1 I=1,10 READ(5,10)A(I) FORMAT(F8.2) 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) CONTINUE STAMPANJE SUME I PROIZVODA NIZA A WRITE(6,20)S,P FORMAT('SUMA=',F8.2,/,'PROIZVOD=',F14.2) ZAUSTAVLJANJE PROGRAMA STOP END
C 10 1 C
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
33
2 C 20 C
Ispis na ekranu
SK
Rjeenje:
10) Uitati niz od 10 elemenata, onda formirati drugi niz B, tako da se sastoji samo od razliitih elemenata niza A. Zatim nai minimalni i maksimalni elemenat niza B. Odtampati elemente niza A i niza B i minimalni i maksimalni elemenat u glavnom programu.
Dijagram toka
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
Fortran C C C C 1 10 C 5 11 UCITATI NIZ OD 10 ELEMENATA, ONDA FORMIRATI DRUGI NIZ B TAKO DA SE SASTOJI SAMO OD RAZLICITIH ELEMENATA NIZA A. ZATIM NACI MIN.I MAX. ELEMENAT NIZA B. ODSTAMPATI NIZ B I MIN. I MAX. ELEMENTE NIZA B. WRITE(*,*)FORMIRANJE NIZA B OD RAZLICITIH EL. NIZA A WRITE(*,*)'I TRAZENJE MAKSIMALNOG I MINIMALNOG ELEMENTA NIZA' DIMENSION A(10),B(10) UCITAVANJE ELEMENATA NIZA A WRITE(*,*)'UNESITE 10 ELEMENATA NIZA A' DO 10 I=1,10 READ(5,1)A(I) FORMAT(F8.2) CONTINUE STAMPANJE ELEMENATA NIZA A WRITE(*,*)'ELEMENTI NIZA A SU:' DO 11 I=1,10 WRITE(6,5)A(I) FORMAT(F8.2) CONTINUE
SK
34
20 C 2 15 6 C
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
30 C 3
Ispis na ekranu
SK
35
ODREDJIVANJE ELEMENATA NIZA B B(1)=A(1) K=0 DO 15 I=1,10 DO 20 J=1,K IF(A(I).EQ.B(J))GOTO 15 CONTINUE K=K+1 B(K)=A(I) STAMPANJE BROJA ELEMENATA NIZA B WRITE(*,2)B(K) FORMAT(/,'NOVI ELEMENAT NIZA B JE:',F8.2) CONTINUE WRITE(*,6)K FORMAT(/,5X,'BROJ ELEMENATA NIZA B JE:',I3) ODREDJIVANJE MAX. I MIN. ELEMENTA NIZA B PMAX=B(1) PMIN=B(1) DO 30 I=1,K IF(PMAX.LT.B(I))THEN PMAX=B(I) ELSE IF(PMIN.GT.B(I))PMIN=B(I) ENDIF CONTINUE STAMPANJE MAX. I MIN. ELEMENTA NIZA B WRITE(6,3)PMAX,PMIN FORMAT(//,'MAX.ELEM.=',F8.2,/,'MIN.ELEM.=',F8.2) STOP END
DO 10 I=1,20 A(D)
10
RI PT
DO 20 I=1,19 DO 15 J=I+1,20
A(I)<A(J)
DA NE
A
36
DIMENSION A(20)
C=A(I)
A(I)=A(J) A(J)=C 15
SK
20
A(J) STOP
END
Fortran C UCITATI NIZ A OD 20 ELEMENATA, NAPISATI C PROGRAM ZA SORTIRANJE U RASTUCEM REDOSLJEDU DIMENSION A(20) WRITE(*,*)'PROGRAM ZA SORTIRANJE EL. NIZA A U RASTUCEM REDOSLJEDU' WRITE(*,*)'UNESITE 20 ELEMENATA NIZA A'
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
1 10 C
15 20
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
3 30
DO 10 I=1,20 READ(5,1)A(I) FORMAT(F8.2) CONTINUE SORTIRANJE ELEMENATA DO 20 I=1,19 DO 15 J=I+1,20 IF(A(I).LT.A(J))GOTO 15 C=A(I) A(I)=A(J) A(J)=C CONTINUE CONTINUE WRITE(*,*)'SORTIRANI ELEMENTI NIZA A SU:' DO 30 J=1,20 WRITE(6,3)A(J) FORMAT(F8.2) CONTINUE STOP
A
37
Ispis na ekranu
SK
B(1)<B(2)>B(3)<B(4)>B(5)<B(6)>B(7)<B(8)>B(9)<B(10)
DO
10
I=1,10
RI PT
10
A(10)
A
DA
DIMENSION A(10),B(10)
DO 20 DO 30
I=1,9
J=I + 1,10
A(I)>A(J)
C =A(I)
NE
A (I) = A (J)
A(J) = C
30
20
DO 40
I=1,5
SK
DO
B(2*I-1) = A( I )
B(2*I) =A ( I + 5 )
40
50 B(I)
I=1,10
50
STOP
END
38
Fortran C C UCITATI NIZ A OD 10 ELEMENATA, PA FORMIRATI NIZ B TAKO DA IMAMO SLJEDECE: B(1)<B(2)>B(3)<B(4)>B(5)<B(6)>B(7)<B(8)>B(9)<B(10) DIMENSION A(10), B(10) WRITE(*,*)'PROGRAM ZA FORMIRANJE NIZA B IZ NIZA A TAKO DA JE' WRITE(*,*)'B[1]<B[2]>B[3]<B[4]>B[5]<B[6]>B[7]<B[8]>B[9]<B[10]' WRITE(*,*)' ' WRITE(*,*)'UNESITE ELEMENTE NIZA A' DO 10 I=1,10 READ(5,1)A(I) FORMAT(F8.2) CONTINUE DO 20 I=1,9 DO 20 J=I+1,10 IF(A(I).GT.A(J))THEN C=A(I) A(I)=A(J) A(J)=C ELSE GOTO 20 ENDIF CONTINUE DO 30 I=1,5 B(2*I-1)=A(I) B(2*I)=A(I+5) CONTINUE WRITE(*,*)'ELEMENTI NIZA B SU:' DO 40 I=1,10 WRITE(6,2)B(I) FORMAT('NIZ B',F8.2) CONTINUE STOP END
1 10
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
39
20
30
2 40
Ispis na ekranu
SK
13) Uitati matricu A(44) i matricu B(44), onda nai matricu C kao proizvod matrica A i B.
C i , j = Ai , k B k , j
Rjeenje: Dijagram toka:
RI PT
10 DO 20 I=1,4 DO 20 J=1,4 B(I) 20 DO 50 I=1,4 DO 30 J=1,4 C(I,J) =0 DO 40 K=1,4
A
40
START
SK
Fortran
30
50
C(I,J)
STOP
END
1 10
6 2 20
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
41
40 8 7 30
Ispis na ekranu
SK
NACI PROIZVOD MATRICA A i B, KAO MATRICU C DIMENSION A(4,4), B(4,4), C(4,4) WRITE(*,*)'PROGRAM ZA RACUNANJE PROIZVODA DVIJE MATRICE' WRITE(*,*)' ' WRITE(*,*)'UNESITE ELEMENTE MATRICE A(44)' DO 10 I=1,4 DO 10 J=1,4 WRITE(6,5)I,J FORMAT('A(',I1,',',I1,')') READ(5,1)A(I,J) FORMAT(F8.2,F8.2) CONTINUE WRITE(*,*)'UNESITE ELEMENTE MATRICE B(44)' DO 20 I=1,4 DO 20 J=1,4 WRITE(6,6)I,J FORMAT('B(',I1,',',I1,')') READ(5,2)B(I,J) FORMAT(F8.2,F8.2) CONTINUE WRITE(*,*)'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) CONTINUE WRITE(6,8)I,J FORMAT('C(',I1,',',I1,')') WRITE(6,7)C(I,J) FORMAT(F10.2,F10.2) CONTINUE STOP END
DO 10 J=1,4 A(I)
RI PT
10
TRAG = 0 DO 20 I=1,4 TRAG=TRAG+ A(I,I) 20
A
TRAG
STOP END
Fortran C
1 10
20 2
NACI TRAG MATRICE A DIMENSION A(4,4) WRITE(*,*)'PROGRAM ZA RACUNANJE TRAGA MATRICE' WRITE(*,*)' ' WRITE(*,*)'UNESITE ELEMENTE MATRICE A(4x4)' DO 10 I=1,4 DO 10 J=1,4 WRITE(6,5)I,J FORMAT('A(',I1,',',I1,')') READ(5,1)A(I,J) FORMAT(F8.2,F8.2) CONTINUE TRAG=0 DO 20 I=1,4 TRAG=TRAG+A(I,I) CONTINUE WRITE(6,2)TRAG FORMAT('TRAG MATRICE JE:',F10.2) STOP END
SK
42
Ispis na ekranu
RI PT
START P. P. A B
FUNCTION F(A,B)
A
15) U glavnom programu uitati varijable A i B i pozivom funkcijskog potprograma izraunati sumu tih varijabli.
Rjeenje: Dijagram toka:
SK
SUMA = F(A,B) SUMA STOP
END
F= A+B
RETURN END
43
Fortran C FUNKCIJSKI POTPROGRAM WRITE(*,*)'PROGRAM ZA SABIRANJE VARIJABLI POMOCU' WRITE(*,*)'FUNKCIJSKOG POTPROGRAMA' WRITE(*,*)' ' WRITE(*,*)'UNESITE VARIJABLU A' READ(5,1)A 1 FORMAT(F8.2) WRITE(*,*)'UNESITE VARIJABLU B' READ(5,2)B 2 FORMAT(F8.2) SUMA=F(A,B) WRITE(6,3)SUMA 3 FORMAT('SUMA VARIJABLI JE:',F10.2) STOP END FUNCTION F(A,B) F=A+B RETURN END Ispis na ekranu
RI PT
f(X)= X2 X2+2 5X ako je ako je ako je X>5 X=5 X<5
P.P. FUNCTION F(X) X>5 X=5 X<5
NE DA
A
DA
Rjeenje:
Dijagram toka:
SK
START UNESITE NEPOZNATU X Y=F(X) Y STOP END
DA
RETURN
END
44
Prvi nain Fortran C C C C PROGRAM ZA ODREDJIVANJE FUNKCIJE X**2 X>5 f(X)= X**2+2 X=5 5X X<5 WRITE(*,*)'UNESITE NEPOZNATU X' READ(5,2)X 2 FORMAT(2F8.2) Y=F(X) WRITE(6,1)Y 1 FORMAT(1X,'SUMA:',F7.2) 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
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
45
SK
C C C C
Drugi nain Fortran (pomou BLOK IF) ODREDITI FUNKCIJU X**2 X>5 f(X)= X**2+2 X=5 5X X<5 WRITE(*,*)'UNESITE NEPOZNATU X' READ(5,2)X 2 FORMAT(2F8.2)
RI PT
I! J ! ( I J )!
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
SK
Rjeenje:
17) U glavnom programu uitati prvi, pa drugi broj kombinacije, te pozivom funkcijskog potprograma izraunati kombinaciju: K =
46
Y=F(X) WRITE(6,1)Y 1 FORMAT(1X,'F(X)=',F7.2) STOP END FUNCTION F(X) IF(X.GT.5)THEN F=X**2 WRITE(6,*)'POSTO JE X>5 VRIJEDNOST FUNKCIJE JE F(X)=X**2' ELSE IF(X.EQ.5)THEN F=X**2+2 WRITE(6,*)'POSTO JE X=5 VRIJEDNOST FUNKCIJE JE F(X)=X**2+2' ELSE ENDIF IF(X.LT.5)THEN F=5*X WRITE(6,*)'POSTO JE X<5 VRIJEDNOST FUNKCIJE JE F(X)=5*X' ENDIF ENDIF 10 RETURN END
Dijagram toka:
START
INTEGER A,B,C,FAKTI
P.P
INTEGER FUNCTION FAKT (L) FAKT = 1 DO 10 N=1,L
I,J
A = FAKT (I) B = FAKT (J) C = FAKT (I-J) K = A/ (B*C) F,J,K
RI PT
END
STOP
END
A
FAKT = FAKT*N
10
RETURN
Fortran C C C C
SK
Ispis na ekranu
PRORACUN KOMBINACIJE K=I!/[J!(I-J)!] INTEGER A,B,C,FAKT I=PRVI BROJ J=DRUGI BROJ K=REZULTAT WRITE(*,*)'PROGRAM ZA RACUNANJE BROJA KOMBINACIJA' WRITE(*,*)' ' WRITE(*,*)'UNESITE PRVI,PA DRUGI BROJ KOMBINACIJE' READ(5,1)I,J 1 FORMAT(2I3) A=FAKT(I) B=FAKT(J) C=FAKT(I-J) K=A/(B*C) WRITE(6,3)I,J,K 3 FORMAT(1X,'1.BROJ:',I3,//,1X,'2.BROJ:',I3,//,1X, +'BROJ KOMBINACIJA:',I4) STOP END INTEGER FUNCTION FAKT(L) FAKT=1 DO 10 N=1,L FAKT=FAKT*N 10 CONTINUE RETURN END
47
18) 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.
Dijagram toka:
START
DIMENSION X(10),Y(10),D(10) DO 10 I=1,10
X(I) ,Y(I)
10
RI PT
XA =0,5 YA =1,0 DO 20 I = 1,10 D(I)=DUINA (X(I),Y(I),XA, YA)
20
A
RETURN
END
DA
P.P.
DUINA=SORT((A-C)**2(B-D)**2)
DMAX=D(1) DMIN=D(1)
DO 30
I = 1,10
DMAX<D(1)
DMAX = D(1)
NE
SK
30
NE
DMIN>D(1)
DMIN = D (1)
DMAX,DMIN
STOP END
48
Fortran C C C C 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) WRITE(*,*)'PROGRAM ZA RACUNANJE RASTOJANJE TACAKA OD TACKE' WRITE(*,*)'Xa=0,5 i Y=1,0' WRITE(*,*)' ' WRITE(*,*)'UNESITE KOORDINATE 10 TACAKA A(X,Y)' DO 10 I=1,10 WRITE(6,3)I FORMAT('TACKA BROJ',I2,' JE: ') READ(5,1)X(I),Y(I) FORMAT(2F8.2) CONTINUE XA=0.5 YA=1.0 DO 20 I=1,10 D(I)=DUZINA(X(I),Y(I),XA,YA) 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) ENDIF CONTINUE WRITE(6,2)DMAX,DMIN FORMAT(5X,'MAX. DUZINA JE:',F8.2,//,5X,'MIN. DUZINA JE:',F8.2) STOP END FUNCTION DUZINA(A,B,C,D) DUZINA=SQRT((A-C)**2+(B-D)**2) RETURN END
3 1 10
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
49
20
30 2
SK
Ispis na ekranu
19) Uitati matricu A(44). Nai sumu elemenata iznad glavne dijagonale. Zatim nai maksimalni elemenat (vrijednost) i njegove indekse. Sve to obraditi pomou opteg potprograma.
Rjeenje: Dijagram toka:
START DIMENSION A (4,4)
RI PT
DO 20 I = 1,4 DO 20 J = 1,4
I<J
A
SUBROUTINE RACUN (B,S,M,N,PMAX)
P.P
S=S+B(I,J)
SUMA,PMAX, PMIN
20
STOP END
DO 30 I = 1,4 DO 30 J=1,4
PMAX< B(I,J)
SK
Fortran C C C
30
RETURN
END
SUMA ELEMENATA IZNAD GLAVNE DIJAGONALE I MAX. ELEM. MATRICE M= PRVI INDEKS N= DRUGI INDEKS DIMENSION A(4,4) WRITE(*,*)'PROGRAM ZA RACUNANJE SUME ELEMENATA' WRITE(*,*)'IZNAD GLAVNE DIJAGONALE I MAX. ELEM. MATRICE' WRITE(*,*)' ' WRITE(*,*)'UNESITE ELEMENTE MATRICE A(4x4)' DO 10 I=1,4 DO 10 J=1,4 WRITE(6,5)I,J
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
50
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
Ispis na ekranu
SK
51
5 FORMAT('A(',I1,',',I1,')') READ(5,1)A(I,J) 1 FORMAT(F8.2,F8.2) 10 CONTINUE CALL RACUN(A,SUMA,M,N,PMAX) WRITE(6,2)SUMA,PMAX,M,N 2 FORMAT('SUMA ELEMENATA IZNAD GLAVNE DIJAGONALE JE:',F10.2,/, +'MAKSIMALNI ELEMENAT:',F8.2,/,'MJESTO MAKSIMALNOG ELEMENTA JE: A(' +,I1,',',I1,')') 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) ENDIF 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 ENDIF 30 CONTINUE RETURN END
20) Uitati matricu A(44). Nai sumu elemenata ispod glavne dijagonale. Sve to obraditi pomou opteg potprograma.
Rjeenje: Dijagram toka:
RI PT
DO 20 I=1,4 DO 20 J=1,4
10
A
SUBROUTINE RACUN (B,S) DIMESION B(4,4) S=0 I>J S= S+B (I,J) 20 RETURN END
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
START
P.P
SUMA
STOP
END
Fortran C
1 10
SUMA ELEMENATA ISPOD GLAVNE DIJAGONALE DIMENSION A(4,4) WRITE(*,*)'PROGRAM ZA RACUNANJE SUME ELEMENATA ISPOD' WRITE(*,*)'GLAVNE DIJAGONALE MATRICE' WRITE(*,*)' ' WRITE(*,*)'UNESITE ELEMENTE MATRICE A(4x4)' DO 10 I=1,4 DO 10 J=1,4 WRITE(6,5)I,J FORMAT('A(',I1,',',I1,')') READ(5,1)A(I,J) FORMAT(F8.2,F8.2) CONTINUE CALL RACUN(A,SUMA) WRITE(6,2)SUMA FORMAT('SUMA ISPOD GLAVNE DIJ.',F10.2) STOP END SUBROUTINE RACUN(B,S) DIMENSION B(4,4) S=0
SK
52
RI PT
DO 10 I=0,10
A
DO 20 K=0,10
Ispis na ekranu
21) Napraviti program za proraun reakcija, momenata savijanja i transverzalnih sila na desetinama raspona proste grede optereene ravnomjernim kontinuiranim optereenjem.
Rjeenje: Dijagram toka:
START
SK
REAL M,T,Q,L L Q R=Q*L/2 R
I *L 10 I *L Q* M = R* 10 2
M
T = R Q*
I *L 10
20 10 STOP
END
53
Fortran REAL M,T,Q,L WRITE(6,*)'PROGRAM ZA PRORACUN M I T SILA PROSTE GREDE' WRITE(6,*)'ZA RAVNOMJERNO KONTINUIRANO OPTERECENJE' WRITE(6,*)'NA DESETINI RASPONA GREDE' WRITE(6,*)' ' WRITE(6,*)'UNESITE STATICKI RASPON GREDE KAO REALAN BROJ' WRITE(6,*)'STATICKI RASPON GREDE L=' READ(5,1)L FORMAT(F 6.2) WRITE(6,*)'UNESITE VRIJEDNOST OPTERECENJA KAO REALAN BROJ' WRITE(6,*)'VRIJEDNOST OPTERECENJA Q=' READ(5,2)Q FORMAT(F 6.2) R=Q*L/2 WRITE(6,3)R FORMAT(/,1X,'REAKCIJE',/,10X,'Av=Bv=',F 8.2,' kN') WRITE(6,*)'MOMENTI SAVIJANJA NA DESETINAMA RASPONA' DO 10 I=0,10 M=R*(I*L/10)-Q*(I*L/10)**2/2 WRITE(6,4)I,M FORMAT(10X,'M',I2,'=',F 10.2,' kNm') CONTINUE WRITE(6,*)'TRANSVERZALNE SILE NA DESETINAMA RASPONA' DO 20 K=0,10 T=R-Q*(K*L/10) WRITE(6,5)K,T CONTINUE FORMAT(10X,'T',I2,'=',F 10.2,' kN') STOP END
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
54
4 10
20 5
Ispis na ekranu
SK
RI PT SK
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
PROBLEMI ZA VJEBU
55
PROBLEMI ZA VJEBU Problem 1: Za dati program napisan u FORTRANU napisati izlazne podatke.
INTEGER A,B,C,D A=3 B=2 C=4 D=1 CALL DENE(A,B,C,D) WRITE(*,10)A,B,C,D FORMAT(/,4(I5,3X)) STOP END SUBROUTINE DENE(C,D,B,A) INTEGER A,B,C,D I=A+B+C+D K=A*B WRITE(*,10)A,B,C,D,I,K FORMAT(/,4(I5,3X)) RETURN END
10
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
56
10
Problem 2: Za dati program napisan u FORTRANU napisati izlazne podatke i nacrtati dijagram toka.
INTEGER A,B,C,D A=3 B=2 C=4 D=1 CALL DENE(A,B,C,D) CALL ALT(C,D,B,A) WRITE(*,10)A,B,C,D FORMAT(/,4(I5,3X)) STOP END SUBROUTINE DENE(C,D,B,A) INTEGER A,B,C,D I=A+B+C+D K=A*B WRITE(*,10)A,B,C,D,I,K FORMAT(/,4(I5,3X)) CALL ALT(I,K,A,B) RETURN END SUBROUTINE ALT(I,K,A,D) INTEGER A,D J=K+A+D I=J D=I*J WRITE(*,10)I,J,K,A,D FORMAT(/,3(I5,3X)) RETURN END
10
SK
10 10
Problem 3: Za dati program napisan u FORTRANU napisati izlazne podatke i nacrtati dijagram toka.
INTEGER X1,X2 X1=4 X4=6 WRITE(*,10)X1,X2 FORMAT (1X,I4) CALL ALT (X1,X2) WRITE(*,10)X1,X2 STOP END SUBROUTINE ALT(A,B) INTEGER A,B X1=A+B X2=A*B A=A*B B=A+5 WRITE(*,10)A,B FORMAT (1X,I4) RETURN END
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
57
10
10
Problem 4: Za dati program napisan u FORTRANU napisati izlazne podatke i nacrtati dijagram toka.
INTEGER X1,X2 X1=4 X4=6 WRITE(*,10)X1,X2 FORMAT (1X,I4) CALL ALT (X1,X2) X1=X1+X2 CALL ALT(X2,X1) WRITE(*,10)X1,X2 STOP END SUBROUTINE ALT(A,B) INTEGER A,B X1=A+B X2=A*B A=A*B B=A+5 WRITE(*,10)A,B FORMAT (1X,I4) WRITE(*,15)X1,X2 FORMAT (1X,F7.2) RETURN END
10
SK
10 15
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
20 10
A
58
FUNCTION COS1(X) COS1=COS(X) RETURN END FUNCTION TAN1(X) TAN1=TAN(X) RETURN END Ispis na ekranu
SK
RI PT SK
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
59
RI PT SK
C PRORACUN ARCSINUS-a, ARCKOSINUS-a I ARCTANGENS-a
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
60
15 20
SK
Fortran 1 10 30
Problem 7: Za dati program napisan u FORTRANU napisati izlazne podatke i nacrtati dijagram toka.
INTEGER BROJ(5,5),ZBI WRITE(*,*)'RJESENJE ZADAATKA' WRITE(*,*)'UNESITE ZBI' READ(5,1)ZBI FORMAT(I3) DO 10 I=1,5 DO 10 J=1,5 BROJ(I,J)=0 IF(I.EQ.J)BROJ(I,J)=ZBI CONTINUE WRITE(*,30)((BROJ(I,J),J=1,5),I=1,5) FORMAT(/,5(I2,4X),/) STOP END
61
Ispis na ekranu
RI PT
RI PT
Zbirka rijeenih zadataka Programiranje i numerike metode - FORTRAN
A
LITERATURA: 1. Cezmi Orkun: Fortran 77, Ornas Yayinlari 1994. 2. Philip Crookall: Programiranje za poetnike, Tehnika knjiga 1983.
SK
73