UPORABA UREJEVALNIKA IN PREVAJALNIKA MS FORTRAN POWER STATION

Σχετικά έγγραφα
Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 14. november Gregor Dolinar Matematika 1

Funkcijske vrste. Matematika 2. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 2. april Gregor Dolinar Matematika 2

Tretja vaja iz matematike 1

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 21. november Gregor Dolinar Matematika 1

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 5. december Gregor Dolinar Matematika 1

MATEMATIČNI IZRAZI V MAFIRA WIKIJU

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 22. oktober Gregor Dolinar Matematika 1

Booleova algebra. Izjave in Booleove spremenljivke

Diferencialna enačba, v kateri nastopata neznana funkcija in njen odvod v prvi potenci

KODE ZA ODKRIVANJE IN ODPRAVLJANJE NAPAK

Zaporedja. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 15. oktober Gregor Dolinar Matematika 1

Kotne in krožne funkcije

Funkcije. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 12. november Gregor Dolinar Matematika 1

matrike A = [a ij ] m,n αa 11 αa 12 αa 1n αa 21 αa 22 αa 2n αa m1 αa m2 αa mn se števanje po komponentah (matriki morata biti enakih dimenzij):

Odvod. Matematika 1. Gregor Dolinar. Fakulteta za elektrotehniko Univerza v Ljubljani. 10. december Gregor Dolinar Matematika 1

*M * Osnovna in višja raven MATEMATIKA NAVODILA ZA OCENJEVANJE. Sobota, 4. junij 2011 SPOMLADANSKI IZPITNI ROK. Državni izpitni center

IZPIT IZ ANALIZE II Maribor,

Iterativno reševanje sistemov linearnih enačb. Numerične metode, sistemi linearnih enačb. Numerične metode FE, 2. december 2013

PONOVITEV SNOVI ZA 4. TEST

Gimnazija Krˇsko. vektorji - naloge

Enačba, v kateri poleg neznane funkcije neodvisnih spremenljivk ter konstant nastopajo tudi njeni odvodi, se imenuje diferencialna enačba.

Numerično reševanje. diferencialnih enačb II

Na pregledni skici napišite/označite ustrezne točke in paraboli. A) 12 B) 8 C) 4 D) 4 E) 8 F) 12

1. Definicijsko območje, zaloga vrednosti. 2. Naraščanje in padanje, ekstremi. 3. Ukrivljenost. 4. Trend na robu definicijskega območja

13. Jacobijeva metoda za računanje singularnega razcepa

Matematika vaja. Matematika FE, Ljubljana, Slovenija Fakulteta za Elektrotehniko 1000 Ljubljana, Tržaška 25, Slovenija

VEKTORJI. Operacije z vektorji

Splošno o interpolaciji

Programski jezik C# zanke

Ει αγωγή η Fortran.

Kotni funkciji sinus in kosinus

SKUPNE PORAZDELITVE VEČ SLUČAJNIH SPREMENLJIVK

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Sreda, 3. junij 2015 SPLOŠNA MATURA

Kontrolne karte uporabljamo za sprotno spremljanje kakovosti izdelka, ki ga izdelujemo v proizvodnem procesu.

NEPARAMETRIČNI TESTI. pregledovanje tabel hi-kvadrat test. as. dr. Nino RODE

Delovna točka in napajalna vezja bipolarnih tranzistorjev

Integralni račun. Nedoločeni integral in integracijske metrode. 1. Izračunaj naslednje nedoločene integrale: (a) dx. (b) x 3 +3+x 2 dx, (c) (d)

Matematika 1. Gabrijel Tomšič Bojan Orel Neža Mramor Kosta

Matematika I (VS) Univerza v Ljubljani, FE. Melita Hajdinjak 2013/14. Pregled elementarnih funkcij. Potenčna funkcija. Korenska funkcija.

Osnove matematične analize 2016/17

Τμήμα Φυσικής Πανεπιστημίου Κύπρου Εαρινό Εξάμηνο 2015/2016. ΦΥΣ145 Υπολογιστικές Μέθοδοι στην Φυσική

VAJE IZ MATEMATIKE za študente gozdarstva. Martin Raič

Vaje iz MATEMATIKE 2. Vektorji

V tem poglavju bomo vpeljali pojem determinante matrike, spoznali bomo njene lastnosti in nekaj metod za računanje determinant.

Realne funkcije. Elementarne funkcije. Polinomi in racionalne funkcije. Eksponentna funkcija a x : R R + FKKT Matematika 1

8. Diskretni LTI sistemi

1 Fibonaccijeva stevila

Osnovni primer. (Z, +,,, 0, 1) je komutativan prsten sa jedinicom: množenje je distributivno prema sabiranju

Multivariatna analiza variance

1. Έντυπα αιτήσεων αποζημίωσης Αξίωση αποζημίωσης Έντυπο Πίνακας μεταφράσεων των όρων του εντύπου...

Reševanje sistema linearnih

Algebraične strukture

Definicija. definiramo skalarni produkt. x i y i. in razdaljo. d(x, y) = x y = < x y, x y > = n (x i y i ) 2. i=1. i=1

Kvadratne forme. Poglavje XI. 1 Definicija in osnovne lastnosti

D f, Z f. Lastnosti. Linearna funkcija. Definicija Linearna funkcija f : je definirana s predpisom f(x) = kx+n; k,

Delovanje procesorja AVR

Univerza v Ljubljani Fakulteta za računalništvo in informatiko MATEMATIKA. Polona Oblak

ΕΙΣΑΓΩΓΗ ΣΤΗΝ FORTRAN 77

Navadne diferencialne enačbe

SEMINARSKA NALOGA Funkciji sin(x) in cos(x)

II. LIMITA IN ZVEZNOST FUNKCIJ

Podobnost matrik. Matematika II (FKKT Kemijsko inženirstvo) Diagonalizacija matrik

IspitivaƬe funkcija: 1. Oblast definisanosti funkcije (ili domen funkcije) D f

Univerza v Mariboru. Uporaba matematičnih metod v logistiki 1 Priročnik

POROČILO 3.VAJA DOLOČANJE REZULTANTE SIL

Začetni tečaj MATLAB. Avtorja: Poldi Herman, univ. dipl. inž. el. Andraž Žertek, univ. dipl. inž. el.

Frekvenčna analiza neperiodičnih signalov. Analiza signalov prof. France Mihelič

DISKRETNA FOURIERJEVA TRANSFORMACIJA

Univerza v Mariboru. Fakulteta za logistiko MATEMATIKA. Univerzitetni učbenik

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Matematika 1. Gregor Dolinar. 2. januar Fakulteta za elektrotehniko Univerza v Ljubljani. Gregor Dolinar Matematika 1

Z Matlabom ali Octave v Numerične metode

Matrike. Poglavje II. Matrika je pravokotna tabela realnih števil. Na primer: , , , 0 1

1. Trikotniki hitrosti

diferencialne enačbe - nadaljevanje

vezani ekstremi funkcij

OSNOVE PROGRAMSKEGA JEZIKA C NA PRIMERU MIKROKRMILNIKA ARM7

3.1 Granična vrednost funkcije u tački

Tabele termodinamskih lastnosti vode in vodne pare

UVOD V PROGRAMSKI JEZIK C

Uvod v R. 13. oktober Uvodni primer 3

osnovni koraki Matija Lokar in Srečo Uranič V 0.9 oktober 2008

Μονοδιάστατοι πίνακες

Funkcija je predpis, ki vsakemu elementu x iz definicijskega območja D R priredi neko število f (x) R.

Dragi polinom, kje so tvoje ničle?

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

Izpeljava Jensenove in Hölderjeve neenakosti ter neenakosti Minkowskega

Matematika. Funkcije in enačbe

Uvod v L A TEX 2ε. Osnove pisanja poročil. Špela Bolka. Ljubljana, 21. marec 2013

IZVODI ZADACI (I deo)

Statistična analiza. doc. dr. Mitja Kos, mag. farm. Katedra za socialno farmacijo Univerza v Ljubljani- Fakulteta za farmacijo

cot x ni def. 3 1 KOTNE FUNKCIJE POLJUBNO VELIKEGA KOTA (A) Merske enote stopinja [ ] radian [rad] 1. Izrazi kot v radianih.

Funkcije več spremenljivk

Domače naloge za 2. kolokvij iz ANALIZE 2b VEKTORSKA ANALIZA

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Programiranje v Javi. Viljan Mahnič. UNIVERZA V LJUBLJANI Fakulteta za računalništvo in informatiko

Programski jezik MATLAB

REˇSITVE. Naloga a. b. c. d Skupaj. FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost 2. kolokvij 23.

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

Inverzni problem lastnih vrednosti evklidsko razdaljnih matrik

Transcript:

UPORABA UREJEVALNIKA IN PREVAJALNIKA MS FORTRAN POWER STATION POSTOPEK JE SLEDEČ: 1. START -> PROGRAMS -> FORTRAN POWER STATION 4.0 FORTRAN POWER STATION 4.0 -> MS DEVELOPER STUDIO 2. FILE -> NEW -> PROJECT WORKSPACE 3. V OKVIR VPIŠEMO IME PROJEKTA NPR. VAJA1310A1 4. CREATE FILE -> NEW -> TEXT FILE 5. NAPIŠEMO PROGRAM 6. FILE -> SAVE AS -> VPIŠEMO IME PROGRAMA(*.F90) 7. BUILD -> COMPILE (PREVEDI) 8. POPRAVIMO NAPAKE V PROGRAMU -> PONOVNO SHRANIMO SPREMEMBE IN PONOVIMO TOČKO 7. 9. KO NI NAPAK -> BUILD -> BUILD (POVEŽEMO PAKETE OBLIKE)(*.OBJ) 10. POŽENEMO IZVRŠILNI PROGRAM -> BUILD -> EXECUTE(*.EXE) OSNOVE PROGRAMIRANJA V FORTRANU PROGRAM JE LAHKO SESTAVLJEN IZ: - PODPROGRAM - STAVEK-UKAZ - KLJUČNE BESEDE - ZNAKI PROGRAM ime programa!fizični začetek programa Deklaracijski ukazi Izvedbeni ukazi!fizični konec programa VRSTE SPREMENLJIVK: Celoštevilske spremenljivke INTEGER*2 INTEGER *4 Realne spremenljivke REAL*4 REAL*8 Kompleksne spremenljivke COMPLEX Logične spremenljivke LOGICAL Znakovne spremenljivke CHARACTER MATEMATIČNI IZRAZI V FORTRANU. Uporabljamo naslednje oznake: Enačaj = Decimalna pika. Okrogli oklepaj in zaklepaj ( ) 1

MATEMATIČNE OPERACIJE: Seštevanje + Odštevanje - Množenje * Deljenje / Potenciranje ** Prednostni red operacije od spodaj navzgor, prednost spremenimo s poljubnim številom okroglih oklepajev ( ). TABELA NAJBOLJ POGOSTO UPORABLJANIH MATEMATIČNIH FUNKCIJ: Oznaka Ime Oblika Tip Spremenljivke SQRT(X) kvadratni koren ^ R ali C +R ali C SIN(X) sinus sin(x) R R COS(X) kosinus cos(x) R R TAN(X) tangens tg(x) R R SIND(X) sinus sin(x) R R v stopinjah COSD(X) kosinus cos(x) R R v stopinjah TAND(X) tangens tg(x) R R v stopinjah R ASIN(X) arkus sinus arcsin(x) R R ACOS(X) arkus kosinus arccos(x) R R ATAN(X) arkus tg arctg(x) R R ATAN2(Y,X) arctg(y/x) R R ALOG(X) nar. logaritem ln(x) R R LOG(X) nar. logaritem ln(x) R ali C R ali C EXP(X) eksponentna e* R R ABS(X) absolutna v. x R I,R,C IABS(X) absolutna v. x I I AIMAG(Z) Imag. del. k. st. R C CONJG(Z) konjugirano C C INT(X) R v I I R REAL(X) I v R R I ANINT(X) okrajšanje R R NINT(X) odreže decimal. R R MAX(X;Y) večja vrednost * * MIN(X;Y) manjša vrednost * * 2

KOLIČINE UVAJAMO NA VEČ NAČINOV: Običajno jih uvajamo v deklaracijskem delu programa ali kjerkoli. PARAMETER (ime = vrednost) PARAMETER (X = 7.2,1=231, IME='Janez', Z = 5*I+X) DATA ime /vrednost/ DATA PI/3.1415/ X = 7.2 READ*,X READ*,N,(X1(I),X2(I),I=1,N)!v gnezdena DO zanka IZPIS REZULTATOV PRINT*,X,A WRITE (*,*)X,A WRITE (*,*)(X1(I),X2(I),I=1,N) KRMILNE STAVKE UPORABIMO, ČE ŽELIMO RAZVEJATI PROGRAM: BREZPOGOJNI SKOK GOTO številka stavka GOTO 12 USTAVITEV PROGRAMA STOP 'komentar' STOP 'Ustavil sem se sredi programa' PAUSE 'komentar' PAUSE 'Pritisni ENTER in program se bo nadaljeval' KRETNICE Z UPORABO BREZPOGOJNEGA STAVKA Kadar zahtevamo, da se program brezpogojno nadaljuje na nekem stavku, potem ta stavek označimo s številko pred stavkom. Z ukazom GOTO in številko stavka kjer želimo nadaljevati s programom razvejimo program. Stavek GOTO uporabljamo le izjemoma, ker v nasprotnem primeru postane program nepregleden. GOTO (številke stavkov) zaporedna številka GOTO (11, 12, 20) n n je lahko 1, 2 ali 3. 1 pomeni skok na 11, 2 skok na 12 in 3 skok na 20. 3

IF STAVKI KOT KRETNICE 1. Logični IF stavek IF (logična izjava) ukaz Enostavni logični IF stavek omogoča izvedbo fortranskega ukaza, ki mu sledi v odvisnosti od vrednosti logičnega izraza. Ukaz se izvede le takrat, kadar ima logična izjava pravilna sicer se ukaz preskoči. PRINT*,"Vnesi oceno=" read*,n IF (n.le.5) PRINT*,"Negativna ocena" PRINT*,"Ocena je pozitivna" 2. Logični IF blok IF (logična izjava) THEN ukazi IF Če je logična izjava pravilna se izvedejo ukazi, ki so postavljeni med THEN in IF. Če logična izjava ni pravilna, se izvedejo ukazi, ki sledijo IFu. PRINT*,"Vnesi oceno=" read*,n IF (n.le.5) THEN PRINT*,"Negativna ocena" PRINT*,"Potreben bo bolj intenziven studij!" IF PRINT*,"Ocena je pozitivna" IF (logična izjava) THEN ELSE ukazi 1 ukazi 2 IF Včasih zahtevamo, če logična izjava ni pravilna, da se izvede niz nekih ukazov. Če je logična izjava pravilna se izvede niz ukazi 1, sicer se izvede niz ukazi 2. 4

PRINT*, " Vnesi stevilo=" READ*,N IF(N.GE.0)THEN PRINT*,N,SQRT(N) STOP ELSE PRINT*,"Ponovno zazeni program" STOP "Kvadratnega korena ni mogoce izracunati!" IF 3. Logični IF blok z več alternativami IF (logična izjava 1) THEN ukazi 1 ELSEIF(logična izjava 2) THEN ukazi 2 ELSEIF(logična izjava 3) THEN ukazi 3 ELSEIF(logična izjava n) THEN ELSE ukazi n ukazi IF Včasih zahtevamo, da se v odvisnosti od različnih logičnih izjav (logična izjava 1, 2, 3.. n) izvajajo različni nizi ukazov (ukazi 1, 2, 3.. n). V primeru, da nobena logična izjava ni ustrezna, potem se izvedejo ukazi med ELSE in IF. 5

4. Aritmetični IF stavek IF(aritmetični izraz) s1,s2,s3 s1 ukaz 1 s2 ukaz 2 s3 ukaz 3 Aritmetični if stavek uporabimo v primeru, kadar se morajo v odvisnosti od aritmetičnega izraza oziroma nekega pogoja, izvajati različne skupine stavkov. Oznake s1, s2 in s3 predstavljajo stavčne številke izvršilnih stavkov. Če je vrednost aritmetičnega izraza negativna se izvede oznaka s1 oziroma ukaz 1. Če je vrednost aritmetičnega izraza enaka nič se izvede oznaka s2 oziroma ukaz 2. Če je vrednost aritmetičnega izraza večja od nič se izvede oznaka s3 oziroma ukaz 3. Aritmetični if stavek se najpogosteje uporablja za nadzor nad vrednostmi vhodnih spremenljivk. PRINT*,"Vnesi stevilo=" READ*,N IF(N-1)5,10,15 5 N=N-1 10 N=N+0 15 N=N+1 PRINT*,N Primerjalni operatorji Primerjalne operatorje imenujemo tudi aritmetični ali relacijski primerjalni operatorji. Dovoljeno je primerjati med seboj tudi vrednosti tipa CHARACTER (znakovne spremenljivke). Vrednost teh spremenljivk se določi glede na lego znakov v ASCII tabeli in jih zaradi te lastnosti lahko primerjamo med seboj. Rezultat operacije je vedno logična vrednost. Primerjalni operatorji Alternativna oblika Pomen.LT. < manjši kot.le. <= manjši ali enak.eq. == enak.ne. /= različen.gt. > večji kot.ge. >= večji ali enak 6

Povezave v sestavljeni izraz z logičnimi operatorji:.and..or. SLIKA PRIKAZUJE PRISEKAN STOŽEC OPOMBA: ZAČETKI IN KONCI PROGRAMOV SO OBARVANI RUMENO! INTEGER R1,R2 REAL L,H,V,P PARAMETER(PI=3.14) R1=6!R=R1,r=R2 R2=8 H=5.0!H=VISINA!L=STRANSKI ROB!V=VOLUMEN L=SQRT(H**2+(R1-R2)**2) V=(PI*H*(R1**2+R2**2+R1*R2))/3 P=PI*(R1**2+R2**2+L*(R1+R2)) PRINT*,L PRINT*,V PRINT*,P INTEGER R1,R2 REAL L,H,V,P PARAMETER(PI=3.14)!R=R1,r=R2 PRINT*,'VNESI R1,R2 IN VISINO H:' READ*,R1,R2,H!H=VISINA!L=STRANSKI ROB!V=VOLUMEN L=SQRT(H**2+(R1-R2)**2) V=(PI*H*(R1**2+R2**2+R1*R2))/3 P=PI*(R1**2+R2**2+L*(R1+R2)) PRINT*,'REZULTATI:' PRINT*,L PRINT*,V PRINT*,P 7

FORMATNA DOLOČILA Pri branju vhodnih podatkov naj prosti format zapisa običajno ustreza. Pri izpisu so izpisani v prostem formatu nepregledni. Nepreglednost podatkov preprečimo z uporabo formatnih določil, ki natančno določajo obliko zapisa neke znakovne ali številke spremenljivke. Formatno določilo A je rezervirano za znakovne spremenljivke (besede), formatna določila I,F,E za številske spremenljivke. Cela števila -> I specifikacija kiw.m kjer posamezni elementi pomenijo: I - cele vrednosti w - število mest k - ponovitveni faktor formatnega določila m - število mest števila pri izpisu (če je cifer manj kot m, se spredaj dopolni z ničlami) Realna števila -> F (navadna) in E (eksponentna) specifikacija kfw.d kjer posamezni elementi pomenijo: F - realno število navadne oblike w - število mest k - ponovitveni faktor formatnega določila d - število decimalnih mest kew.d kjer posamezni elementi pomenijo: E - eksponentna oblika realnega števila w - število mest k - ponovitveni faktor formatnega določila d - število decimalnih mest Znakovne vrednosti A specifikacija kaw kjer posamezni elementi pomenijo: A - znakovna vrednost w - število mest k - ponovitveni faktor formatnega določila SINTAKSA FORMATNIH DOLOČIL: S stavkom WRITE: WRITE('formatna določila') lista spremenljivk WRITE('1X,'VNESI R1=',2X,\\') WRITE('1X,A6,F6.3,/,1X,A10,F7.2,/,lX,A11,E8.3') ROB,L,VOL,V,POV,P S stavkom FORMAT: številka FORMAT (formatna določila). Navedimo naslednji primer: 10 FORMAT(1X,'VNESI R1=',2X,\\) 40 FORMAT(1X,A4,F6.3,/,1X,A8,F7.2,/,1X,A9,E8.3) 8

INTEGER R1,R2 REAL L,H,V,P PARAMETER(PI=3.14) CHARACTER ROB*4,VOL*8,POV*9!R=Rl,r=R2 ROB='ROB=' VOL='VOLUMEN=' POV='POVRSINA='!VNOS VHODNIH PODATKOV WRITE(*,10) READ*,R1 WRITE(*,20) READ*,R2 WRITE(*,30) READ*,H!H=VISINA!L=STRANSKI ROB!V=VOLUMEN!IZRACUN L=SQRT(H**2+(R1-R2)**2) V=(PI*H*(R1**2+R2**2+R1*R2))/3 P=PI*(R1**2+R2**2+L*(R1+R2))!IZPIS PODATKOV PRINT*,'REZULTATI' WRITE(*,40)ROB,L,VOL,V,POV,P 10 FORMAT(1X,'VNESI R1=',2X,\\) 20 FORMAT(1X,'VNESI R2=',2X,\\) 30 FORMAT(1X,'VNESI VISINO H=',2X,\\) 40 FORMAT(1X,A4,F6.3,/,1X,A8,F7.2,/,1X,A9,E8.3) 9

INTEGER R1,R2 REAL L,H,V,P PARAMETER(PI=3.14) CHARACTER ROB*4,VOL*8,POV*9!R=R1,r=R2 ROB='ROB=' VOL='VOLUMEN=' POV='POVRSINA='!VNOS VHODNIH PODATKOV WRITE(*,10) READ*,R1 IF(R1)100,200,300 100 STOP'RADIJ JE NEGATIVEN!' 200 STOP'RADIJ JE ENAK NIC!' 300 CONTINUE WRITE(*,20) READ*,R2 IF(R2)100,200,350 350 CONTINUE WRITE(*,30) READ*,H IF(H)400,500,600 400 STOP'VISINA JE NEGATIVNA!' 500 STOP'VISINA JE ENAKA NIC!' 600 CONTINUE!H=VISINA!L=STRANSKI ROB!V=VOLUMEN!IZRACUN L=SQRT(H**2+(R1-R2)**2) V=(PI*H*(R1**2+R2**2+R1*R2))/3 P=PI*(R1**2+R2**2+L*(R1+R2))!IZPIS PODATKOV PRINT*,'REZULTATI:' WRITE(*,40)ROB,L,VOL,V,POV,P 10 FORMAT(1X,'VNESI R1=',2X,\\) 20 FORMAT(1X,'VNESI R2=',2X,\\) 30 FORMAT(1X,'VNESI VISINO H=',2X,\\) 40 FORMAT(1X,A4,F6.3,/,1X,A8,F7.2,/,1X,A9,E8.3) 10

INTEGER R1,R2 REAL L,H,V,P PARAMETER(PI=3.14) CHARACTER ROB*4,VOL*8,POV*9!R=R1,r=R2 ROB='ROB=' VOL='VOLUMEN=' POV='POVRSINA='!VNOS VHODNIH PODATKOV 1000 WRITE(*,10) READ*,R1 IF(R1)100,200,300 100 STOP'RADIJ JE NEGATIVEN!' 200 STOP'RADIJ JE ENAK NIC!' 300 CONTINUE WRITE(*,20) READ*,R2 IF(R2)100,200,350 350 CONTINUE WRITE(*,30) READ*,H IF(H)400,500,600 400 STOP'VISINA JE NEGATIVNA!' 500 STOP'VISINA JE ENAKA NIC!' 600 CONTINUE!H=VISINA!L=STRANSKI ROB!V=VOLUMEN!IZRACUN L=SQRT(H**2+(R1-R2)**2) V=(PI*H*(R1**2+R2**2+R1*R2))/3 P=PI*(R1**2+R2**2+L*(R1+R2))!IZPIS PODATKOV PRINT*,'REZULTATI:' WRITE(*,40)ROB,L,VOL,V,POV,P WRITE(*,50)ODG READ*,ODG IF(ODG.EQ.'D'.OR.ODG.EQ.'d') GOTO 1000 10 FORMAT(1X,'VNESI R1=',2X,\\) 20 FORMAT(1X,'VNESI R2=',2X,\\) 30 FORMAT(1X,'VNESI VISINO H=',2X,\\) 40 FORMAT(1X,A4,F6.3,/,1X,A8,F7.2,/,1X,A9,E8.3) 50 FORMAT(1X,'ALI ZELITE NADALJEVATI (D/N)?',1X,A1) 11

Blok IF -THEN - ELSE Realni spremenljivki ABSV želimo prirediti absolutno vrednost, brez uporabe vgrajene funkcije ABS, ki je na voljo v fortranu. REAL A PRINT*,'VNESI STEVILO' READ*,A IF (A.LT.0) THEN ABSV=-A ELSE ABSV=A IF PRINT*,'ABSOLUTNA VREDNOST JE',ABSV LOGIČNI IF BLOK Z VEČ MOŽNOSTMI (IF-THEN-ELSEIF) INTEGER TOCKE WRITE(*,10) READ*,TOCKE IF (TOCKE.LT.50)THEN PRINT*,"OCENA 5" ELSEIF (TOCKE.GE.50.AND.TOCKE.LE.60)THEN PRINT*,"OCENA 6" ELSEIF (TOCKE.GE.60.AND.TOCKE.LE.70)THEN PRINT*,"OCENA 7" ELSEIF (TOCKE.GE.70.AND.TOCKE.LE.80)THEN PRINT*,"OCENA 8" ELSEIF (TOCKE.GE.80.AND.TOCKE.LE.90)THEN PRINT*,"OCENA 9" ELSEIF (TOCKE.GE.90.AND.TOCKE.LE.100)THEN PRINT*,"OCENA 10" ELSE WRITE(*,30) IF 10 FORMAT(1X,"VNESI STEVILO TOCK NA IZPITU=",\) 20 FORMAT(1X,/,"OCENA IZPITA=",I3) 30 FORMAT(1X,"NEPRAVILEN VHODNI PODATEK") 12

STAVEK CASE Blok CASE je posebna oblika bloka IF-THEN z več alternativami. Izvršitev določenih stavkov je pogojena z vrednostjo predpisanega izraza. Sintaksa CASE stavka je sledeča: SELECT CASE (izraz) CASE (seznam vrednosti 1) ukazi 1 CASE (seznam vrednosti 2) ukazi 2 CASE (seznam vrednosti N) ukazi N CASE DEFAULT ukazi D SELECT Pri izvajanju bloka CASE se najprej ovrednoti izraz v stavku SELECT CASE. Za tem se preveri, če je vrednost izraza na seznamu vrednosti v prvem stavku CASE identična vrednosti izraza (seznam vrednosti 1), se izvedejo ukazi 1. V nasprotnem primeru se preveri vrednost izraza (seznam vrednosti 2) v durgem stavku CASE in tako se nadaljuje do vrednosti izraza (seznam vrednosti N). Stavek CASE DEFAULT je izbirni. Če ga izpustimo potem niti ne pišemo stavkov D. Če pa ga napišemo potem se izvedejo ukazi D, v primeru, da izraz pri stavku SELECT CASE ni enak (seznam vrednosti 1) do (seznam vrednosti N). INTEGER TOCKE,OCENA WRITE(*,10) READ*,TOCKE SELECT CASE(TOCKE) CASE(:49) OCENA=5 CASE(50:59) OCENA=6 CASE(60:69) OCENA=7 CASE(70:79) OCENA=8 CASE(80:89) OCENA=9 CASE(90:100) OCENA=10 WRITE(*,20)OCENA CASE DEFAULT PRINT*,"NEPRAVILEN VHODNI PODATEK" SELECT 10 FORMAT(1X,"VNESI STEVILO TOCK NA IZPITU=",\) 20 FORMAT(1X,/,"OCENA IZPITA=",I3) 13

Sortiranje (urejanje) treh različnih števil od najmanjšega do največjega: REAL A(3),APOM PRINT*,'VNESI TRI STEVILA:' READ*,(A(I),I=1,3) I=1 IF(A(I).GT.A(I+1))THEN APOM=A(I+1) A(I+1)=A(I) A(I)=APOM IF I=2 IF(A(I).GT.A(I+1))THEN APOM=A (I+1) A(I+1)=A(I) A(I)=APOM IF I=1 IF(A(I).GT.A(I+1))THEN APOM=A (I+1) A(I+1)=A(I) A(I)=APOM IF PRINT*,'SORTIRANA STEVILA:' WRITE (*,5) (A(I),I= 1,3) 5 FORMAT(1X,F8.3) 14

DO ZANKA Kadar želimo, da se določeno zaporedje ukazov ponovi večkrat, uporabimo DO zanko. DO spremenljivka=začetna vrednost,končna vrednost, korak ukazi DO Začetna vrednost je prva vrednost, ki se priredi spremenljivki. Naslednja vrednost je odvisna od koraka. Če je korak enak 1, lahko vejico in korak izpustimo. Končna vrednost je tista vrednost, ki se priredi spremenljivki preden izstopimo iz zanke. NESKONČNA DO ZANKA DO ukazi IF (logični izraz) EXIT DO Neskončna zanka se ne ustavi, zato je nujno v njeno zanko vnesti IF stavek. V primeru, da je logični izraz v IF stavku pravilen, potem z ukazom EXIT zapustimo zanko. Lahko pa v določenih primerih uporabimo tudi ukaz STOP. V tem primeru se bo program zaustavil znotraj zanke. POGOJNA DO ZANKA DO WHILE ( logični izraz ) ukazi DO Pogojno zanko uporabimo, kadar želimo, da se zaporedje stavkov ponavlja tako dolgo, dokler je logični izraz pravilen. Takoj, ko je logični izraz nepravilen izstopimo iz zanke. Izdelaj program, ki sešteje prvih deset naravnih števil z uporabo DO zanke. INTEGER VSOTA VSOTA=0 DO I=1,10,1 VSOTA=VSOTA+I PRINT*,I,VSOTA DO 1.) Kako bi spremenili program, da bi seštel vsoto vseh sodih števil od 2 do 10? 2.) Kako bi spremenili program, da bi seštel vsoto kvadratov vseh sodih števil od 2 do 10? 15

RAZVRŠČANJE ŠTEVIL PO METODI MEHURČKOV - "BUBBLE SORT" Sortiranje po metodi mehurčkov je zelo počasen postopek, vendar je enostaven in jasen. Števila se nahajajo v polju spremenljivke a. Urediti jih moramo po rastočem vrstnem redu. Vedno začnemo s prvim elementom polja a. Primerjamo ga z drugim elementom polja a. Če je prvi večji od drugega ga zamenjamo, drugače primerjamo drugi in tretji element. Če je drugi večji od tretjega, ju zamenjamo. Tako nadaljujemo do predzadnjega elementa. Po prvem ciklu DO zanke je na zadnjem mestu že pravilni element. Postopek nato ponovimo. Sortiranje (razvrščanje) največ 500 različnih števil od najmanjšega do največjega z uporabo dveh DO zank. Podatke beremo in izpisujemo na zaslon z uporabo vgnezdene DO zanke v sklopu ukaza READ. REAL APOM,A(500) PRINT*, 'PODAJ STEVILO ELEMENTOV N:' READ*,N PRINT*,'PODAJ ELEMENTE POLJA A:' READ *,(A (I),I=1,N) DO J=1,N-1 DO I=1,N-J IF(A(I).GT.A(I+1))THEN APOM=A (I+1) A(I+1)=A(I) A(I)=APOM IF DO DO WRITE (*,5) (A(I),I=1,N) 5 FORMAT(1X,F8.3) Iskanje največjega in najmanjšega števila med desetimi števili REAL A(10) PRINT*,'VNESI 10 REALNIH STEVIL:' READ *,(A(I),I=1,10) MIN=A(1) MAX=A(1) DO I=1,10 IF(A(I).LT.MIN) MIN=A(I) IF(A(I).GT.MAX) MAX=A(I) DO PRINT*,'NAJMANJSE STEVILO JE',MIN PRINT*,'NAJVECJE STEVILO JE',MAX 16

Izračunati je potrebno skalarni produkt dveh trirazsežnih vektorjev z uporabo DO zanke. REAL V1(3),V2(3),SKP PRINT*,'VNESI PARAMETRE VEKTORJA 1:' READ*,(V1(I),I=1,3) PRINT*,'VNESI PARAMETRE VEKTORJA 2:' READ*,(V2(I),I=1,3) SKP=0 DO I=1,3 SKP=SKP+V1(I)*V2(I) DO PRINT*,'SKALARNI PRODUKT VEKTORJEV JE',SKP Izračunati je potrebno vsoto členov vrste. Potenca N je naravno število. Program se ustavi, ko je razlika delnih vsot manjša od 0.0005 (zahtevana natančnost): REAL A,X,VSOTA,VSOTA1,CLEN A=5.0 X=0.5 VSOTA=0 VSOTA1=0 DO N=1,100,1 CLEN=(ABS((A+2)/(A-1)))*X**N VSOTA=VSOTA+CLEN IF((VSOTA-VSOTA1).LT.0.0005) GOTO 10 WRITE(*,*)VSOTA,N VSOTA1=VSOTA DO STOP 'PREMALO CLENOV' 10 WRITE(*,2)VSOTA,N 2 FORMAT(1X,'VSOTA=',F6.3,2X,'N=',i4 ) 17

Izračunati je potrebno Fibonaccijeva števila. Fibonaccijeva števila so taka števila pri katerih je novo število vsota zadnjih dveh predhodnih števil. Imamo števili X1 in X2. Naslednje število je XN. Sledi XN= X1 + X2. Formulo z obliko XN=XN-1 + XN-2 imenujemo rekurzivna formula. Začetni vrednosti sta: x1=0 in x2=1 ter glede na formulo XN= X1 + X2 sledi, da so Fibonaccijeva števila sledeča: 0,1,1,2,3,5,8,13,21,34,55,89,144... Prireditvena stavka X2 in X1: X2=X1 X1=XN sta nujno potrebna, ker dobimo tako vedno novo začetno vrednost. Zaporedje stavkov v DO WHILE zanki (pogojna DO zanka) se izvaja toliko časa, dokler je logični izraz resničen. Program se konča, ko je Fibonaccijevo število večje od 1000. INTEGER X1,X2,XN X1=0 X2=1 DO WHILE (X1.LT.1000) PRINT*,X1 XN=X1+X2 X2=X1 X1=XN DO Program izračuna zmnožek vseh naravnih števil od 1 do n z uporabo pogojne DO zanke. Pogojna DO zanka se zaključi, ko je indeks i večji od n. Takemu zmnožku pravimo n fakulteta in ga zapišemo kot n! n!=1*2*3*..*n INTEGER N REAL PRODUKT PRINT*,'VNESI STEVILO' READ*,N PRODUKT=1.0 I=1 DO WHILE(I.LE.N) PRODUKT=PRODUKT*I I=I+1 DO WRITE(*,10)N,PRODUKT 10 FORMAT(1X,'PRODUKT PRVIH',1X,I2,1X,'NARAVNIH STEVIL JE',E8.3) 18

NESKONČNA DO ZANKA Izračunajmo število π s seštevkom vrste: 1-1/3+1/5-1/7+1/9...= π /4 Uporabimo neskončno DO zanko, hkrati pa moramo obvezno uporabiti še IF stavek, ki ustavi izvajanje zanke. Neskončna DO zanka se ustavi, ko je izpolnjen pogoj v IF stavku. Zanka se ustavi, ko dosežemo zahtevano natančnost. Natančnost je določena na tri decimalna mesta, kar je definirano kot 0.0005 REAL VSOTA VSOTA=0!DOLOČIMO ZAČETNE VREDNOSTI I=1 N=1 Z=1 DO CLEN=1./I VSOTA=VSOTA+Z*CLEN I=I+2 Z=Z*(-1) N=N+1 IF (ABS(CLEN).LT.0.0005)EXIT DO WRITE(*,*)'STEVILO CLENOV JE: ',N WRITE(*,*)'VSOTA CLENOV JE: ',VSOTA WRITE(*,*)'STEVILO PI JE: ',VSOTA*4 19

Izdelaj program, ki bo izračunal produkt dveh matrik velikosti 3 x 3. Vnos in izpis podatkov mora biti v urejeni obliki. Uporabi formatna določila. INTEGER S,A(3,3),B(3,3),C(3,3) CHARACTER*2 X,Y,Z,V X='A(' Y='B(' Z=')=' V=',' PRINT*,'PODAJ ELEMENTE MATRIKE A:' PRINT*,'' DO I=1,3 DO J=1,3 WRITE(*,5)X,J,V,I,Z READ*,A(I,J) DO DO PRINT*,'' PRINT*,'PODAJ ELEMENTE MATRIKE B:' PRINT*,'' DO I=1,3 DO J=1,3 WRITE(*,5)Y,J,V,I,Z READ*,B(I,J) DO DO PRINT*,'' PRINT*,'MATRIKA A:' WRITE(*,10)((A(I,J),J=1,3),I=1,3) PRINT*,'' PRINT*,'MATRIKA B:' WRITE(*,10)((B(I,J),J=1,3),I=1,3) DO I=1,3 DO J=1,3 S=0 DO K=1,3 S=S+A(I,K)*B(K,J) DO C(I,J)=S DO DO PRINT*,'' PRINT*,'PRODUKT C=A X B:' WRITE(*,10)((C(I,J),J=1,3),I=1,3) 5 FORMAT (1X,A2,I1,A1,I1,A2,\) 10 FORMAT (3I5) 20

STAVČNA FUNKCIJA Kadar se v programu pojavlja večkrat ista formula uporabimo stavčno funkcijo. Stavčno funkcijo zapišemo z enim prireditvenim stavkom in ima natanko eno vrednost. Definicija stavčne funkcije stoji pred prvim izvršilnim stavkom. Stavčna funkcija se zapiše na sledeč način: IME FUNKCIJE (FORMALNI PARAMETRI)=MATEMATIČNI IZRAZ Primer: DOLZINA=(X1,Y1,X2,Y2)=SQRT((X2-X1)**2+(Y2-Y1)**2) Stavčno funkcijo kličemo tako, da navedemo: ime funkcije formalne parametre zamenjamo z dejanskimi Primer: A=DOLZINA(XA,YA,XB,YB) Izdelajmo program, ki bo na podlagi oglišč trikotnika izračunal ploščino trikotnika. Koordinate oglišč trikotnika so: A(xa,ya), B(xb,yb) in C(xc,yc). Dolžine stranic trikotnika so enake razdaljam med oglišči. REAL DOLZINA!DOLOCIMO STAVCNO FUNKCIJO DOLZINA(X1,Y1,X2,Y2)=SQRT((X2-X1)**2+(Y2-Y1)**2) PRINT*,'PODAJ KOORDINATE OGLISCA A:' READ*,XA,YA PRINT*,'PODAJ KOORDINATE OGLISCA B:' READ*,XB,YB PRINT*,'PODAJ KOORDINATE OGLISCA C:' READ*,XC,YC!KLICEMO STAVCNO FUNKCIJO C=DOLZINA(XA,YA,XB,YB) B=DOLZINA(XA,YA,XC,YC) A=DOLZINA(XB,YB,XC,YC) S=(A+B+C)/2!PLOSCINO IZRACUNAMO PO HORNOVEM OBRAZCU P=SQRT(S(S-A)*(S-B)*(S-C)) 21

Funkcija FUNCTION Kadar z enim samim stavkom ne moremo definirati funkcije uporabimo podprogram FUNCTION. Podprogramu FUNCTION moramo določiti tip rezultata in predpišemo formalne parametre. Rezultat podprograma FUNCTION ima natanko eno vrednost. podatkovni tip FUNCTION ime funkcije ( formalni parametri ) deklaracije ukazi RETURN Napišimo funkcijski podprogram, ki izračuna faktorielo števila: REAL FUNCTION FAKT(N) INTEGER N,I FAKT=1 DO I=2,N FAKT=FAKT*I DO RETURN Iz glavnega programa pokličemo funkcijski podprogram, ki izračuna faktorielo števila n, katerega vrednost vnesemo v glavnem programu. REAL FAKT INTEGER N PRINT*,"PODAJ STEVILO N=" READ*,N F=FAKT(N) WRITE(*,10)F 10 FORMAT(1X,"FAKTORIELA STEVILA N=",\,F16.2) Podprogram SUBROUTINE Podprogram SUBROUTINE je samostojna programska enota. Deluje podobno kot podprogram FUNCTION, razlika je le v rezultatu. Rezultat podprograma SUBROUTINE ima lahko več vrednosti ali nobene. SUBROUTINE ime podprograma ( formalni parametri ) deklaracije ukazi RETURN! Glavni program CALL ime podprograma ( argumenti ) 22

Delo z datotekami OPEN in CLOSE Pri serijskih datotekah so zapisi urejeni po vrsti, zapis za zapisom. Začne se z znakom za začetek datoteke (BOF), sledijo posamezni zapisi, ki so ločeni z ločilom za zapise (CR in LF) ter na koncu datoteke je znak za zaključek (EOF). Dostop do posameznega zapisa je možen samo zapis za zapisom. Zato serijske datoteke niso primerne za obsežne baze podatkov. Pri direktnih datotekah so zapisi označeni zaporedno, glede na začetek. Prvi zapis ima zaporedno številko 1 (REC=1), drugi zapis ima zaporedno številko 2 (REC=2) in tako dalje. To omogoča direkten dostop do posameznega zapisa v datoteki. Ker lahko pišemo v direktni datoteki v katerikoli zapis, se lahko zgodi, da posamezni deli sploh niso zasedeni. Serijske datoteke so vedno popolnoma zasedene, direktne datoteke pa lahko imajo veliko neizkoriščenega prostora. OPEN(UNIT=enota, FILE=datoteka, ACCESS=dostop, STATUS=stanje, RECL=dolžina, FORM=oblika, MODE=način, SHARE=delitev, ERR=številka stavka v primeru napake) enota - vedno celoštevilska vrednost datoteka - ime datoteke.končnica ali LPT1, če želimo izpis na tiskalnik dostop - direct, sequential ali append (kadar želimo dodajati zapise na konec serijske datoteke) stanje - unknown, new, old, scratch dolžina - dolžina zapisa v direktni datoteki oblika - formatted, unformatted, binary mode - read, write, readwrite delitev - compat, denywr, denyrd, denyone Kadar je FILE="USER" program izpisuje podatke na zaslon in bere podatke iz tipkovnice. Kadar je FILE=" " program zahteva vnos imena ustrezne datoteke iz tipkovnice med izvajanjem programa. Podrobnejša razlaga ukaza SHARE v sklopu stavka OPEN: compat - drugi uporabniki ne morejo odpreti datoteke, lahko jo odpre le prvi uporabnik denywr - za druge uporabnike zaprta za pisanje, ni je mogoče še enkrat odpreti denyrd - za druge uporabnike zaprta za branje denyone - vsk uporabnik lahko odpira datoteko Ko končamo delo z datoteko je potrebno datoteko zapreti. Uporabimo ukaz CLOSE, ki ima naslednji zapis: CLOSE(UNIT=enota, ERR=številka stavka v primeru napake, STATUS=stanje) stanje - keep,deleted S prvo vrednostjo datoteka ostane, z drugo pa se zbriše. Če je bila datoteka odprta v stavku z opcijo STATUS="SCRATCH" in ima v stavku CLOSE STATUS="KEEP" bo ta zapis povzročil napako pri izvajanju. Program izpiše besedo Pozdravljen! na tiskalnik v primeru, da imamo na računalnik neposredno priključen tiskalnik preko LPT vrat. CHARACTER B*12 B="Pozdravljen!" OPEN(2,FILE="LPT1") WRITE(2,10) B 10 FORMAT(1X,A12) 23

Program za delo z datoteko in uporabo podprogramov tipa SUBRUTINE. Kreiramo datoteko PODATKI.DAT, v katero vpisujemo IME,PRIIMEK,STAROST študenta. Program naj omogoča vpis novih študentov, dokler jih vpisujemo. Omogoča naj izpis vseh študentov v datoteki ter iskanje študenta v datoteki. Če ga najde, ga izpiše. Zadnja možnost izbire naj bo izhod iz programa. INTEGER AKCIJA OPEN(UNIT=1,FILE='PODATKI.DAT',ACCESS='SEQUENTIAL',STATUS='UNKNOWN',& POSITION='APP') AKCIJA=0 DO WHILE(AKCIJA.NE.4) PRINT*,'' PRINT*,'IZBERI ZELJENO OPERACIJO' PRINT*,' 1 - vpis novega studenta' PRINT*,' 2 - izpis vseh studentov' PRINT*,' 3 - iskanje po priimku' PRINT*,' 4 - konec' READ*,AKCIJA IF(AKCIJA.EQ.1) CALL VPIS IF(AKCIJA.EQ.2) CALL IZPIS IF (AKCIJA.EQ.3) CALL ISKANJE DO CLOSE(1)!KONEC GLAVNEGA PROGRAMA SUBROUTINE VPIS!PODPROGRAM VPIS CHARACTER IME*16,PRIIMEK*32 INTEGER STAROST PRINT*,'VNESI IME' READ 5,IME PRINT*,'VNESI PRIIMEK' READ 5,PRIIMEK PRINT*,'VNESI STAROST' READ*,STAROST 10 FORMAT(A16,A32,I3) 5 FORMAT(A) WRITE(1,10)IME,PRIIMEK,STAROST RETURN!KONEC PODPROGRAMA VPIS SUBROUTINE IZPIS!PODPROGRAM IZPIS CHARACTER IME*16,PRIIMEK*32 INTEGER STAROST REWIND(1) DO WHILE(.TRUE.) READ(1,10,=600)IME,PRIIMEK,STAROST PRINT*,IME,PRIIMEK,STAROST DO 600 CONTINUE 10 FORMAT(A16,A32,I3) RETURN!KONEC PODPROGRAMA IZPIS 24

SUBROUTINE ISKANJE!PODPROGRAM ISKANJE CHARACTER IME*16,PRIIMEK*32,PRI*32 INTEGER STAROST REWIND (1) PRINT*,'VNESI ISKANI PRIIMEK' READ 5,PRI 5 FORMAT(A) 10 FORMAT(A16,A32,I3) DO WHILE(.TRUE.) READ(1,10,=600)IME,PRIIMEK,STAROST IF(PRIIMEK.EQ.PRI) THEN PRINT*,IME,PRIIMEK,STAROST IF DO 600 CONTINUE RETURN!KONEC PODPROGRAMA ISKANJE 25