FORTRAN NASTAVAK 1 Zato FORTRAN Najraireniji zn programski

  • Slides: 106
Download presentation
FORTRAN NASTAVAK 1

FORTRAN NASTAVAK 1

Zašto FORTRAN ? Najrašireniji zn. programski jezik u svijetu n Fortran 90 pogodan za

Zašto FORTRAN ? Najrašireniji zn. programski jezik u svijetu n Fortran 90 pogodan za rješavanje numeričkih problema n Velika baza dobrog i dostupnog Fortran koda n Dostupan na skoro svim platformama n Lagan za učenje ! n 2

Od problema do programa Opći pristup programiranju poznat kao Top Down Design …. ukratko

Od problema do programa Opći pristup programiranju poznat kao Top Down Design …. ukratko 1. Jasna specifikacija problema 2. Analiza problema i prekida, rastavljanje u osnovne elemente 3. Kodiranje programa prema 2 4. Iscrpljujuće testiranje i ponavljanje 2 i 3 kolikogod je potrebno 3

Od problema do programa 1. Razumjevanje što program treba raditi 2. Jasan ulaz i

Od problema do programa 1. Razumjevanje što program treba raditi 2. Jasan ulaz i izlaz 3. Znati koje metode će se koristiti za rješavanje 4. Razmatranje korištenja postojeće biblioteke 5. Korištenje modularnog dizajniranja ( 50 linija po modulu) 6. Korištenje opisnih imena varijabli 7. Biti jasan sa komentarima 8. Provjeravanje greške svih ulaza 9. Iscrpljujuće testiranje 4

FORTRAN n n April 1957 IBM pokrenuo IBM Mathematical FORmula TRANslation system, FORTRAN, prvi

FORTRAN n n April 1957 IBM pokrenuo IBM Mathematical FORmula TRANslation system, FORTRAN, prvi programski jezik visokog nivoa. 1963 postoji preko 40 različitih compiler-a. 1966 the American National Standards Institute, ANSI, Potpisan prvi standard za FORTRAN (Fortran 66). 1978 FORTRAN V – FORTRAN 77, ANSI 1980 zamijenjen novim standardom FORTRAN 77. n sredinom 1980 FORTRAN 77 postaje univerzalni dijalekt. n 1991 , pojavljuje se standard i compiler Fortran 90 (ISO). Podržava FORTRAN 77, 1997 FORTRAN 95 (ISO) rujan 2002 FORTRAN 2000 n n 5

FORTRAN 77 i Fortran 90 n n Programi ili procedure u FORTRAN 77 valjani

FORTRAN 77 i Fortran 90 n n Programi ili procedure u FORTRAN 77 valjani su i u Fortran 90, ponašaju se identično F 90 koristi slobodanu formu ¨ Praznina razdvaja ime varijabli, ključne riječi i sl. ¨ Slijed karaktera iza ! označen je kao komentar ¨ Linija može imati 132 znaka ¨ Linija može sadržavati više od jedne naredbe, ; se koristi za odvajanje naredbi na liniji (39 linija) 6

Ispis teksta Sintaksa – ispis na zaslon monitora PRINT*, ’tekst string’ n Može biti,

Ispis teksta Sintaksa – ispis na zaslon monitora PRINT*, ’tekst string’ n Može biti, broj, znak, simbol…. PROGRAM ispis PRINT*, Ovo je lako’ END PROGRAM ispis Fortran znakovi 26 velikih i malih slova 0 -9 brojeva Podcrta Ovo je lako. Specijalni znakovi: = + -* / ( ) , : !”%&; <>? 7

Varijable n Za predstavljanje podataka čija se vrijednost može mijenjati unutar programa koristimo varijable

Varijable n Za predstavljanje podataka čija se vrijednost može mijenjati unutar programa koristimo varijable n Fortran 90. . ime varijable … do 31 znak, koristeći i podcrtu , ’_’. PREPORUKA n Koristiti mala slova za varijable i relativno kratka imena n Ne koristiti podcrtu kao znak imena – konflikt copiler …gen. imena 8

Pridruživanje Izrazi koriste znak ’=‘ za pridruživanje vrijednosti pojedinoj varijabli n Nepoznata varijabla je

Pridruživanje Izrazi koriste znak ’=‘ za pridruživanje vrijednosti pojedinoj varijabli n Nepoznata varijabla je na lijevoj strani jednakosti ukupno=asum+bsum PRINT*, ’Masa je ’, ukupno, ’ kilograma’ n Masa je 6. 000 kilograma 9

Matematički operatori + zbrajanje n - oduzimanje n * množenje n / dijeljenje n

Matematički operatori + zbrajanje n - oduzimanje n * množenje n / dijeljenje n ** potenciranje n PRIORITET 1. ** 2. * i / n 3. + i 10

PRIMJER. . . a=2. 3+3. 2*4. 0 PRINT*, a a=a+3. PRINT*, a. . .

PRIMJER. . . a=2. 3+3. 2*4. 0 PRINT*, a a=a+3. PRINT*, a. . . Rezultat: 15. 1000 22. 0000 sa zagradom a=(2. 3+3. 2)*4. 0 11

Inicijalizacija podataka FORTRAN 77 podržava tri načina na koje vrijednost može biti pridružena varijabli

Inicijalizacija podataka FORTRAN 77 podržava tri načina na koje vrijednost može biti pridružena varijabli (Fortran 90 podržava 4 načina, i više metoda inicijalizacije) n ¨ Dodjeljivanje (viđeno) ¨ Inicijalizacija ¨ parametar 12

Inicijalizacija podataka Inicijalizacija varijabli REAL: : a=0. 0, b=5. 0, c n Deklariramo varijable

Inicijalizacija podataka Inicijalizacija varijabli REAL: : a=0. 0, b=5. 0, c n Deklariramo varijable a b i c kao realne i inicijaliziramo njihove vrijednosti Dok REAL, PARAMETER: : pi=3. 14159 Nije samo inicijalizirana realna varijabla pi sa vrijednošću 3, 14159 nego je dana sa PARAMETAR atributom koji znači da može biti modificirana unutar programa. . Ovu sintaksu nemožete koristiti sa FORTRAN 77 compiler Bilo koji pokušaj promjene vrijednosti varijable sa PARAMETAR atributom rezultira kompilacijsku grešku, drugačije ponaša se poput bilo koje varijable 13

Tipovi podataka n n Cjelobrojni (-2147483648 i +2147483647) Realni Realan broj pisan u znanstvenoj

Tipovi podataka n n Cjelobrojni (-2147483648 i +2147483647) Realni Realan broj pisan u znanstvenoj notaciji 1234. 56 = 1. 23456 x 103 Broj se sastoji od tri dijela: ¨ mantisa: 1. 23456. 6 znamenki ¨ eksponent: 3. eksponent je cjelobrojan ¨ baze: 10. Ako ju fiksiramo , nemoramo ju prikazivati 14

GREŠKE ZAOKRUŽIVANJA Ograničena točnost realnog broja PROGRAM greška IMPLICIT NONE REAL : : veliki=1.

GREŠKE ZAOKRUŽIVANJA Ograničena točnost realnog broja PROGRAM greška IMPLICIT NONE REAL : : veliki=1. 0 E 9, mali=1. 0 E-9, sum=veliki+mali PRINT*, ’Suma je ’, sum END PROGRAM greška rezultat Suma je +1. 00000 E+09 !!! Kako su brojevi prikazani u znanstvenoj notaciji u FORTRANu 15

Cjelobrojne i realne varijable PROGRAM brojevi INTEGER : : i, j REAL : :

Cjelobrojne i realne varijable PROGRAM brojevi INTEGER : : i, j REAL : : v 1, v 2 i=5; j=3; v 1=1. 3; v 2=6. 3 PRINT*, ’i=’, i, j, v 1, v 2 END PROGRAM brojevi 16

Implicit tipovi varijabli n n n Fortran ima implicit tipove podataka. Variable koje počinju

Implicit tipovi varijabli n n n Fortran ima implicit tipove podataka. Variable koje počinju sa : a-h, o-z: su implicitno REAL i-n: su implicitno INTEGER n Dobra je praksa eksplicitno deklatrirati varijable. Fortran 90 n Uključiti IMPLICIT NONE na početak svakog programskog modula. 17

PRIMJER n Kratki program PROGRAM tippodatka IMPLICIT NONE REAL : : masa=52. 5, gustoća=1.

PRIMJER n Kratki program PROGRAM tippodatka IMPLICIT NONE REAL : : masa=52. 5, gustoća=1. 7 volumen=masa/gustoća PRINT*, ’Volumen je ’, volumen, ’ m 3’ END PROGRAM tippodatka n Rezultat …kompilacijska greška budući da varijabla volumen nije deklarirana 18

Tipovi konverzije n Ako je izraz u obliku cjelobrojna varijabla=cjelobrojni izraz Ili realna variajabla=realan

Tipovi konverzije n Ako je izraz u obliku cjelobrojna varijabla=cjelobrojni izraz Ili realna variajabla=realan izraz Znamo točno što se događa, međutim Fortran obično koristi miješane izraze 19

PRIMJER REAL : : a INTEGER : : i=2, j=3 a=i+j Slijedi: Vrijednost i+j

PRIMJER REAL : : a INTEGER : : i=2, j=3 a=i+j Slijedi: Vrijednost i+j je ocijenjena kao INTEGER (u slučaju 2+3=5) INTEGER je konvertiran u REAL i pridružen varijabli a (5 je konvertiran u 5. 0 i pridružen a) 20

Primjer. . . REAL : : a=3. 3, b=2. 6 INTEGER i i=a+b. .

Primjer. . . REAL : : a=3. 3, b=2. 6 INTEGER i i=a+b. . . Slijedi: ˛ a+b je REAL (3. 3+2. 6=5. 9) Decimalni dio je odsječen i vrijednost je pridružena varijabli i je 5. . 21

Više Što se događa ako su INTEGER i REAL vrijednosti na desnoj strani Strana

Više Što se događa ako su INTEGER i REAL vrijednosti na desnoj strani Strana pridruživanja? n Uvjeti su : n Prioritet operatora. ¨ kada su oba operatora istog prioriteta …s lijeva na desno. ¨ INTEGER će prvi biti konvertiran u REAL Ako prolazi kroz aritmetičku operaciju sa REAL. ¨ n Pažljivo!! 22

Primjer Pretvaranje temperature iz Celsius stupnjeva u Fahrenheit. PROGRAM pretvorba IMPLICIT NONE REAL :

Primjer Pretvaranje temperature iz Celsius stupnjeva u Fahrenheit. PROGRAM pretvorba IMPLICIT NONE REAL : : Cstupanj, faren_1, faren_2 PRINT*, ’Unesi temperaturu u stupnjevima Celsius : ’ READ*, Cstupanj faren_1=Cstupanj*9/5+32 faren_2=9/5*Cstupanj+32 PRINT*, faren_1, faren_2 END PROGRAM pretvorba Da li će vrijednosti faren_1 i faren_2 biti iste ? 23

Nastavak_primjer Postavimo li vrijednost Cstupanj 37. 5. U oba izraza pridruživanja * i /

Nastavak_primjer Postavimo li vrijednost Cstupanj 37. 5. U oba izraza pridruživanja * i / su visokog prioriteta. Budući su prioriteti isti računa se od lijeva na desno n n n Za faren_1 Cstupanj se množi sa 9. 9 postaje 9. 0, prije računanja produkta , koji iznosi 337. 5. Ovo se sada dijeli sa 5 , koji se prvi pretvara u 5. 0, i dobijemo rezultat 67. 5. 32 se dodaje , nakon konverzije u REAL, te daje 99. 5. Za faren_2 prvo se izračunava 9/5. Ovo je INTEGER arithmetika sa rezultatom 1. Dovoljno ! 24

Savjet n Dobra je ideja izbjegavati aritmetiku različitih tipova podataka. n Kada dodijelimo vrijednosti

Savjet n Dobra je ideja izbjegavati aritmetiku različitih tipova podataka. n Kada dodijelimo vrijednosti podaci ili parametri moraju koristiti korektne tipove podataka. Sve REAL vrijednosti imaju decimalnu točku , sve INTEGER nemaju dec. točku PROGRAM primjer IMPLICIT NONE REAL : : a=2. 0, b=3. 0 INTEGER : : i=2, j=3. . . 25

READ naredba se koristi za učitavanje vrijednosti iz ulaznih uređaja. default - ulazni uređaj

READ naredba se koristi za učitavanje vrijednosti iz ulaznih uređaja. default - ulazni uređaj je tastatura n Primjer PROGRAM ucitaj IMPLICIT NONE REAL : : a, b READ*, a b=a*25. 0 PRINT*, ’Rezultat je ‘, b END PROGRAM ucitaj n Učitavanje je REAL vrijednost sa tastature pomnožena sa 25 i ispisan rezultat 26

Moduli n n n 1. 2. U realnom svijetu programi su složeniji od nekoliko

Moduli n n n 1. 2. U realnom svijetu programi su složeniji od nekoliko linija Programe obično piše tim programera ZATO realne programe pišemo kao skupove manjih cjelina (module). Na svakom modulu se može raditi nezavisno i svi trebaju znati: Što radi svaki modul? Gdje je njegovo mjesto spajanja (interface) ? 27

JEDNOSTAVNI PRIMJER n 1. 2. 3. Uzmite u obzir program koji : Ispisuje pozdravnu

JEDNOSTAVNI PRIMJER n 1. 2. 3. Uzmite u obzir program koji : Ispisuje pozdravnu poruku Izvodi zbrajanje Ispisuje odlazni pozdrav Mogli bi to napisati PROGRAM dddd CALL pozdrav CALL zbroj CALL doviđenja END PROGRAM dddd 28

SUBROUTINE Pozdrav, zbroj i doviđenja su primjeri potprograma. Svaki potprogram je nezavisan modul. Kada

SUBROUTINE Pozdrav, zbroj i doviđenja su primjeri potprograma. Svaki potprogram je nezavisan modul. Kada se potprogram pozove: 1. Kontrola se prenosi na potprogram 2. Naredbe u pp se izvršavaju do naredbe END 3. Kontrola se vraća modulu koji ga je pozvao Napomena: Vidjet ćemo kasnije da se izvršavanje ne odvija prije vraćanja kontrole pozivnom modulu n 29

SUBROUTINE PP izgleda poput glavnog programa s tim da očekuje prvu naredbu SUBROUTINE te

SUBROUTINE PP izgleda poput glavnog programa s tim da očekuje prvu naredbu SUBROUTINE te deklaracija imena pp. n PP bi se mogao kreirati kako slijedi: SUBROUTINE pozdrav PRINT*, ’Dobro došli’ END SUBROUTINE pozdrav n Pravila koja se primjenjuju na imena pp. Ista su kao i za imena varijabli s razlikom što prvi znak nema značenje tipa varijable 30

SUBROUTINE n Pp. zbroj koji je glavni dio programa mogao bi se kodirati :

SUBROUTINE n Pp. zbroj koji je glavni dio programa mogao bi se kodirati : SUBROUTINE zbroj IMPLICIT NONE REAL : : a, b, c PRINT*, ’Unesi 2 broja za zbrajanje: ’ READ*, a, b c=a+b PRINT*, a, ’+’, b, ’=’, c END SUBROUTINE zbroj -načinite sami pp za subroutine doviđenja. 31

SUBROUTINE n Potprogrami su poput modula glavnih programa i treba: ¨ uključiti IMPLICIT NONE

SUBROUTINE n Potprogrami su poput modula glavnih programa i treba: ¨ uključiti IMPLICIT NONE naredbu ¨ deklarirati sve varijable ¨ zabilježiti lokalna imena varijabli, varijabla u pp nije ista varijabla kao u gl programu, služi za izbjegavanje problema kada kod piše više od jednog programera 32

ARGUMENTI Najčešće pp nisu jednostavni kao prethodni i trebamo povezati podatke između pp i

ARGUMENTI Najčešće pp nisu jednostavni kao prethodni i trebamo povezati podatke između pp i gl programskog modula. Podaci se povezuju argument-ima, Npr. . . . a=3. 2 b=4. 7 CALL zbroj(a, b, c). . . SUBROUTINE zbroj(x, y, z) IMPLICIT NONE REAL : : x, y, z z=x+y END SUBROUTINE zbroj 33

PROLAZNI PODACI Varijable x, y i z su dummy varijable. Koriste se kao privremene

PROLAZNI PODACI Varijable x, y i z su dummy varijable. Koriste se kao privremene vrijednosti između modula n Dummy varijable u biti ne postoje tj. One se zamjenjuju sa pravim imenima varijabli kada se pozove pp. Primjer 1. Varijabla a u modulu iz kojeg pozivamo se zamjenjuje sa x 2. Varijabla b sa y 3. Varijabla c sa z n 34

PRIMJER Pogledajmo primjer pronalaženja promjera kruga koji je upisan u trokut. PROGRAM krug IMPLICIT

PRIMJER Pogledajmo primjer pronalaženja promjera kruga koji je upisan u trokut. PROGRAM krug IMPLICIT NONE REAL : : a, b, c, r PRINT*, ’Upisani krug’ PRINT*, ’Unesi stranice trokuta’ READ*, a, b, c CALL prutrok(a, b, c, r) PRINT*, ’Promjer je : ’, r END PROGRAM krug 35

SUBROUTINE prutrok x, y, z, rad) IMPLICIT NONE REAL : : x, y, z,

SUBROUTINE prutrok x, y, z, rad) IMPLICIT NONE REAL : : x, y, z, rad, s s=(x+y+z)/2. 0 rad=(((s-x)*(s-y)*(s-z))**0. 5)/s END SUBROUTINE prutrok 36

SAŽETAK Pozivajuća sekvenca je : CALL subroutine_ime( imena_varijabli) I prva linija u pp ima

SAŽETAK Pozivajuća sekvenca je : CALL subroutine_ime( imena_varijabli) I prva linija u pp ima slijedeći oblik: SUBROUTINE subroutine_ime(dummy varijable) n n PP može zvati drugi pp, F 77 ne dopušta rekurziju (poziv samog sebe). F 90 dopušta rekurziju. n U većini priručnika vidjet ćete RETURN naredbu prije END u svim pp. Ovo nije potrebno u F 90. (kasnije ćemo vidjeti kada se može koristiti RETURN) n Potrebno je osigurati pridruživanje (broj, tip podatka i poredak) između argumenata u pozivu pp i dummy varijabli. Imena varijabli ne trebaju biti ista i bolje je ako nisu. Koristite pp slobodno (ali pametno) oni se koriste za dobro strukturiranje programa. Jednostavni programi uključuju glavni program i sve pp u istu datoteku n n 37

FUNCTION n n n 1. 2. Vidjeli smo da pp dopušta prijenos više različitih

FUNCTION n n n 1. 2. Vidjeli smo da pp dopušta prijenos više različitih vrijednosti podataka FUNCTION potprogram se koristi za povratak jedne vrijednosti u glavni program. FUNCTION potprogram može biti: Složen koliko želite Mora imati barem jedan argument 38

FUNCTION Poput subroutine function potprogram je programski modul koji završava naredbom END. Prva naredba

FUNCTION Poput subroutine function potprogram je programski modul koji završava naredbom END. Prva naredba je u slijedećem obliku: FUNCTION function_ime(dummy_varijable) Budući da vraća jednu vrijednost to je ujedno i tip podatka određene vrijednosti Vrijede pravila za izbor imena , prvi znak označava tip funkcije, trebali bi koristiti IMPLICIT NONE naredbu Zato treba deklarirati tip funkcije npr. REAL FUNCTION prosjek(x, y, z) Tip funkcije mora biti isti kao i u gl. programu, negdje u programu (obično zadnja naredba prije END) mora se dodijeliti vrijednost funkciji n 39

FUNCTION Zato treba deklarirati tip funkcije npr. REAL FUNCTION prosjek(x, y, z) Tip funkcije

FUNCTION Zato treba deklarirati tip funkcije npr. REAL FUNCTION prosjek(x, y, z) Tip funkcije mora biti isti kao i u gl. programu, negdje u programu (obično zadnja naredba prije END) mora se dodijeliti vrijednost funkciji 40

PRIMJER FUNCTION potprogram koji izračunava prosjek tri realna broja: REAL FUNCTION prosjek(x, y, z)

PRIMJER FUNCTION potprogram koji izračunava prosjek tri realna broja: REAL FUNCTION prosjek(x, y, z) IMPLICIT NONE REAL : : x, y, z prosjek=(x+y+z)/3. 0 END FUNCTION prosjek Glavni program koristi funkciju prosjek: PROGRAM primjer IMPLICIT NONE REAL : : vr 1, vr 2, vr 3, prosjek PRINT*, ’Unesi 3 realne vrijednosti’ READ*, vr 1, vr 2, vr 3 PRINT*, ’Prosjek iznosi: ’ PRINT*, prosjek(vr 1, vr 2, vr 3) END PROGRAM primjer 41

NEKA PRAVILA n n n Function argumenti u pozivnom modulu moraju odgovarati po tipu,

NEKA PRAVILA n n n Function argumenti u pozivnom modulu moraju odgovarati po tipu, broju i poretku dummy varijabli u deklaraciji funkcije Vrijednost vraćena pozivnom modulu spremljena je u ime funkcije Poput SUBROUTINE FUNCTION potprogram može biti deklariran u istoj datoteci glavnog programa ili kao odvojena datoteka Imena varijabli su lokalna Tip funkcije se deklarira eksplicitno i isti mora biti u gl. p. 42

n Funkciji mogu pristupiti i drugi programski moduli n VAŽNO: Ne pokušavaj mijenjati vrijednosti

n Funkciji mogu pristupiti i drugi programski moduli n VAŽNO: Ne pokušavaj mijenjati vrijednosti dummy varijabli unutar funkcije. Rezultat je nepredvidiv (promijenjena vrijednost može ali ne mora vraćati pozivnom modulu očekivanu vrijednost za kompajliranje. Ako želite mijenjati vrijednosti treba koristiti SUBROUTINE) 43

ATRIBUTI n n n INTENT(IN) atribut dodijeljen dummy varijablama x, y, z u funkcijskom

ATRIBUTI n n n INTENT(IN) atribut dodijeljen dummy varijablama x, y, z u funkcijskom potprogramu informira procesor da su ovo dummy varijable i zato modul neće dopustiti promjenu vrijednosti EXTERNAL atribut dodijeljen imenu funkcije u glavnom modulu označava da je to ime vanjske funkcije a ne varijable Atributi nisu obavezni ali njihovo korištenje se preporučuje radi reduciranja grešaka 44

PRIMJER PROGRAM primjer IMPLICIT NONE REAL vr 1, vr 2, vr 3 REAL, EXTERNAL

PRIMJER PROGRAM primjer IMPLICIT NONE REAL vr 1, vr 2, vr 3 REAL, EXTERNAL : : prosjek PRINT*, ’Unesi 3 broja’ READ*, vr 1, vr 2, vr 3 PRINT*, ’Prosjek iznosi: ’ PRINT*, prosjek(vr 1, vr 2, vr 3) END PROGRAM primjer REAL FUNCTION prosjek(x, y, z) IMPLICIT NONE REAL, INTENT(IN) : : x, y, z prosjek=(x+y+z)/3. 0 END FUNCTION prosjek 45

. . . a=3. 2 b=4. 7 CALL zbroj(a, b, c). . . SUBROUTINE

. . . a=3. 2 b=4. 7 CALL zbroj(a, b, c). . . SUBROUTINE zbroj(x, y, z) IMPLICIT NONE REAL, INTENT(IN) : : x, y REAL, INTENT(OUT) : : z z=x+y END SUBROUTINE zbroj 46

Specificira namjeru korištenja dummy varijabli unutar procedure. Primjer pokazuje alternativno korištenje atributa INTENT(IN) i

Specificira namjeru korištenja dummy varijabli unutar procedure. Primjer pokazuje alternativno korištenje atributa INTENT(IN) i INTENT(OUT) n Ako koristimo transfer informacije u oba smjera koristimo atribut INTENT(INOUT) n 47

Interne procedure SUBROUTINE i FUNCTION su integralni dijelovi Fortran 90, kao moduli koji omogućuju

Interne procedure SUBROUTINE i FUNCTION su integralni dijelovi Fortran 90, kao moduli koji omogućuju pozive svih drugih modula u program. n Fortran 90 posjeduje varijante potprograma i funkcija koje su moguće samo unutar modula gdje su deklarirani. To su interne procedure n 48

Intrinsic functions Preko 100 Fortran funkcija (trigonometrijske f. -radijani) n Možete pisati i vlastite

Intrinsic functions Preko 100 Fortran funkcija (trigonometrijske f. -radijani) n Možete pisati i vlastite funkcije 49

 n n n Često koristimo vrijednost ( konverzija kuta u radijane i obrnuto.

n n n Često koristimo vrijednost ( konverzija kuta u radijane i obrnuto. Kod konverzije postavljamo činjenicu da je : tan( /4) = 1 Dakle za vrijednost uključena je kodna forma: pi=4. 0*ATAN(1. 0) Nakon deklaracije pi je realan. 50

Savjeti (potprogrami): n n n Odgovarajuća primjena potprograma može puno pomoći kod pisanja dobre

Savjeti (potprogrami): n n n Odgovarajuća primjena potprograma može puno pomoći kod pisanja dobre strukture programa Potprograme koristite što općenitije Pokušajte svesti broj argumenata na što manju mjeru Dajte potprogramima imena sa nekim značenjem Koristite komentare za opis potprograma i njegova interfejsa 51

Moj program ne radi n n Za kodiranje programa potroši se najmanje vremena (cca

Moj program ne radi n n Za kodiranje programa potroši se najmanje vremena (cca oko 5 %) Osiguranje da kod radi korektno zauzima pola ukupnog vremena Kompajler će javiti sintaktičku grešku, koju je jednostavno ispraviti Testiranje logike programa je teži i mnogo zahtjevniji posao (naravno i vremenski) 52

n n Pišite svoj kod u modulima, svaku logičku cjelinu i jednu namjenu Ne

n n Pišite svoj kod u modulima, svaku logičku cjelinu i jednu namjenu Ne pišite potprograme za mnoge nebitne zadaće Dobro pravilo je da potprogram nema više od 50 linija Gdje je moguće testirati svaki potprogram neovisno 53

Primjer - debugging n n n Uvijek ima jedna greška više …. Murphy zakon

Primjer - debugging n n n Uvijek ima jedna greška više …. Murphy zakon Ne radi li program na očekivani način i ne možeš dokučiti zašto, korisno je dodati naredbu PRINT da bi mogli vidjeti što se događa sa vrijednostima varijabli. Ako problem ne možete riješiti tada treba koristiti debugger 54

Postoje mnogi različiti debugger programi ali svi imaju istu osnovnu zadaću: 1. Izvršavanje programa

Postoje mnogi različiti debugger programi ali svi imaju istu osnovnu zadaću: 1. Izvršavanje programa liniju po liniju 2. Razmatranje vrijednosti varijabli 3. Zaustavljanje izvršavanja na unaprijed određenoj točci 4. Promjene vrijednosti varijabli Za detalje pogledati manuel. n 55

Petlje i grananja n n Do sada predstavljeni programi su bili slijedni od vrha

Petlje i grananja n n Do sada predstavljeni programi su bili slijedni od vrha prema dole (kalkulator ) Svi programski jezici visokog nivoa podržavaju metodu petlje – rastavljanje dijelova koji koriste različite testove kada se petlja zaustavlja Svi jezici dozvoljavaju grananje na različite sekcije ovisno o rješenju Pogledat ćemo različite petlje i grananja u Fortran-u 56

STARI PRIMJER - Radius upisanog kruga u trokut zadan pomoću stranica PROGRAM krug IMPLICIT

STARI PRIMJER - Radius upisanog kruga u trokut zadan pomoću stranica PROGRAM krug IMPLICIT NONE REAL : : a, b, c, r PRINT*, ’Upisani krug’ PRINT*, ’Unesi stranice trokuta’ READ*, a, b, c CALL ruk(a, b, c, r) PRINT*, ’Radius je : ’, r END PROGRAM krug Gdje je ruk potprogram za izračunavanje. - program radi samo jedno izračunavanje 57

- najjednostavnija metoda ponavljanja koda realizirana pomoću GOTO naredbe: PROGRAM krug IMPLICIT NONE REAL

- najjednostavnija metoda ponavljanja koda realizirana pomoću GOTO naredbe: PROGRAM krug IMPLICIT NONE REAL : : a, b, c, r PRINT*, ’Upisani krug u trokut’ 10 PRINT*, ’Unesi stranice trokuta’ READ*, a, b, c CALL rukr(a, b, c, r) PRINT*, ’Radius je : ’, r GOTO 10 END PROGRAM krug Ovo je primjer bezuvjetnog grananja. 58

Bezuvjetno grananje n n n Sintaksa bezuvjetnog grananja trebala bi biti prividna, linija na

Bezuvjetno grananje n n n Sintaksa bezuvjetnog grananja trebala bi biti prividna, linija na koju želimo granati mora imati numeričku oznaku u prvih 5 kolona i jednostavno labelirano GOTO Bezuvjetna grananja su loše ideje koje vode lošoj strukturiranosti programa (špageta kod) IZBJEGAVATI GOTO gdje god je moguće, pogledat ćemo neke zadovoljavajuće primjene 59

ODLUKA U svakodnevnom životu često donosimo odluke npr. Ako se probudim prije 7: 30

ODLUKA U svakodnevnom životu često donosimo odluke npr. Ako se probudim prije 7: 30 pokušat ću stići na predavanje u 8: 15 , inače sam mogao ostati u krevetu do 10: 30. FORTRAN ima vrlo jednostavnu konstrukciju znanu kao IF blok slijedećeg oblika : 60

IF(uvjet_1) THEN akcija_1 ELSE IF(uvjet_2) THEN akcija_2 ELSE IF(uvjet_3) THEN akcija_3 ELSE akcija_4 END

IF(uvjet_1) THEN akcija_1 ELSE IF(uvjet_2) THEN akcija_2 ELSE IF(uvjet_3) THEN akcija_3 ELSE akcija_4 END IF Ponekad nema mogućnosti izbora i koristimo IF blok IF(uvjet) THEN akcija ENDIF 61

IF blok Izvršavanje koda je uvijek isto, testiranje se vrši sve dok uvjet (ili

IF blok Izvršavanje koda je uvijek isto, testiranje se vrši sve dok uvjet (ili jedan od uvjeta) ne bude istina, tada se izvršavanje prenosi na kraj bloka END IF. n Testiranja su zasnovana na logičkim izrazima i logičkim varijablama koji mogu poprimiti dvije vrijednosti n 62

Relacioni (usporedni) operatori n Relacioni operatori u Fortran-u su različiti od drugih PJ (1950

Relacioni (usporedni) operatori n Relacioni operatori u Fortran-u su različiti od drugih PJ (1950 kada je jezik nastao nije bilo moguće generirati znak ‘<‘ i ‘>’ n Fortran 90 koristi matematičke operatore ali zapinje sa starim stilom Koristi 6 relacionih operatora: 63

FORTRAN 77 Fortran 90. LT. . LE. . GT. . GE. . EQ. .

FORTRAN 77 Fortran 90. LT. . LE. . GT. . GE. . EQ. . NE. < <= > >= == /= Značenje manje od manje ili jednako veće od veće ili jednako različito Primjer: ako su a i b dvije realne varijable tada bi A. LT. b Bilo istina ako je a manja od b inače je laž 64

Logičke varijable n Na početku modula deklariramo logičke varijable LOGICAL : : logvar 1,

Logičke varijable n Na početku modula deklariramo logičke varijable LOGICAL : : logvar 1, logvar 2 Prava vrijednost ovih varijabli je prikazana je na slijedeći način : logvar 1=. istina. logvar 2=. laž. n 65

Obilježje točka. istina. i. laž. u stilu je relacionih operatora. n Imamo li logičke

Obilježje točka. istina. i. laž. u stilu je relacionih operatora. n Imamo li logičke varijable i logičke izraze – logičke funkcije koje dostavljaju log. vrijednost Prva linija takve funkcije bila bi : n LOGICAL FUNCTION mojaf(arg 1, . . . ) Negdje u funkciji definirana je mojaf kojoj je pridružena logička vrijednost 66

Logički izrazi Vidjeli smo 6 logičkih operatora koji imaju jednake prioritete Aritmetički izrazi se

Logički izrazi Vidjeli smo 6 logičkih operatora koji imaju jednake prioritete Aritmetički izrazi se izvršavaju prije usporedbe n n Pokraj ovih relacionih imamo i 5 logičkih operatora, poredanih po prioritetu: Operator. NOT. . AND. . OR. . EQV. i. NEQV. Prioritet najviši najniži 67

Ovi operatori su svi nižeg prioritete u odnosu na aritmetičke i relacione operatore n

Ovi operatori su svi nižeg prioritete u odnosu na aritmetičke i relacione operatore n Smisao logičkih operatora je : n ¨. NOT. Obično se veže uz dva izraza, invertira vrijednost dobivenu logičkim izrazom ¨. AND. ¨. OR. ¨. EQV. (vrijednosti izraza iste) ¨. NEQV. (vrijednosti izraza različite) 68

Primjeri L 1 L 2 istina laž laž L 1. AND. L 2 istina

Primjeri L 1 L 2 istina laž laž L 1. AND. L 2 istina laž laž L 1. OR. L 2 L 1. EQV. L 2 istina laž laž istina L 1. NEQV. L 2 laž istina laž Ponovo ćemo pogledati strukturu IF bloka 69

IF blok Sada možemop vidjeti kriterije logičkih izraza i akcije Fortrana IF (logički izraz)

IF blok Sada možemop vidjeti kriterije logičkih izraza i akcije Fortrana IF (logički izraz) THEN blok Fortran izraza ELSE IF (logički izraz) THEN. . . ELSE blok Fortran izraza END IF 70

Sažetak: Svaki blok počinje sa IF (logički_izraz) THEN Slijedi sekvenca izraza koji će biti

Sažetak: Svaki blok počinje sa IF (logički_izraz) THEN Slijedi sekvenca izraza koji će biti izvršavani ako je izraz istinit n n Ovaj blok završava sa ELSE IF, ELSE ili END IF. Sintaksa ELSE IF je: ELSE IF (logički_izraz) THEN I slijedi kod poput IF izraza n n Može biti nekoliko ELSE IF ili nijedan Može biti jedan li ni jedan ELSE Blok If je završen sa izrazom END IF Sada pogledajmo IF blok u funkciji kubnog korijena realnog broja (pozitivan ili negativan). 71

Plan 1. 2. 3. Za procjenu korijena pozitivnog broja koristit ćemo exp(log(x) / 3).

Plan 1. 2. 3. Za procjenu korijena pozitivnog broja koristit ćemo exp(log(x) / 3). Za procjenu korijena negativnog broja koristit ćemo -exp(log(-x) / 3). Moramo izbjegavati logaritme veoma malih brojeva kako ne bi stvarali probleme Pogledajmo kako bi mogao izgledati kod 72

Kubni korijen REAL FUNCTION kub_korijen(x) IMPLICIT NONE REAL, PARAMETER : : epsilon=1. 0 E-20

Kubni korijen REAL FUNCTION kub_korijen(x) IMPLICIT NONE REAL, PARAMETER : : epsilon=1. 0 E-20 IF(ABS(x)< epsilon )THEN kub_korijen=0. 0 ELSE IF(x < 0. 0)THEN kub_korijen=-EXP(LOG(-x)/3. 0) ELSE kub_korijen=EXP(LOG(x)/3. 0) END IF END FUNCTION kub_korijen(x) Napomena: Uvući svaki blok, nije obaveza, ali pomaže kod razumijevanja strukture programa 73

Logički IF izraz IF(logički izraz) fortran izraz Logičke if izraze ne koristimo često ali

Logički IF izraz IF(logički izraz) fortran izraz Logičke if izraze ne koristimo često ali jedna od alternativa je korištenje stop ili return izraza u programu ili potprogramu IF(i>10)STOP Zaustavlja program ili IF(n=0)RETURN Povratak iz potprograma prije završetka Vidjet ćemo drugu primjenu logičkog IF izraza (sa diskreditiranim GO TO) za rani izlaz iz iteracije petlje. 74

CASE naredba Brojni jezici visokog nivoa koriste CASE naredbu, kada se varijabla ili izraz

CASE naredba Brojni jezici visokog nivoa koriste CASE naredbu, kada se varijabla ili izraz tretiraju različito za različite vrijednosti. U Fortran 90 to je naredba select case slijedeće strukture: SELECT CASE (case izraz) CASE case-selektor 1 akcija 1 CASE case_selektor 2 akcija 2. . [CASE DEFAULT] END SELECT 75

SELECT CASE Case selektor može biti n (vrijednost) n (početak: kraj) n (početak: )

SELECT CASE Case selektor može biti n (vrijednost) n (početak: kraj) n (početak: ) n (: kraj) n (DEFAULT) n 76

Program. . . SELECT CASE (ocjena) CASE(90: ) PRINT*, ’odličan’ CASE(80: 89) PRINT*, ’Vrlo-dobar’

Program. . . SELECT CASE (ocjena) CASE(90: ) PRINT*, ’odličan’ CASE(80: 89) PRINT*, ’Vrlo-dobar’ CASE (70: 79) PRINT*, ’dobar’ CASE (60: 69) PRINT*, ’dovoljan’ CASE DEFAULT PRINT*, ’Nedovoljan’ END SELECT. . . . Za ovu strukturu trebamo Fortran 90 , Fortran 77 to rješava sa IF strukturom 77

Case struktura pomoću IF. . . IF(ocjena>=90) THEN PRINT*, ’Odličan’ ELSE IF(ocjena>=80) THEN PRINT*,

Case struktura pomoću IF. . . IF(ocjena>=90) THEN PRINT*, ’Odličan’ ELSE IF(ocjena>=80) THEN PRINT*, ’Vrlo-dobar’ ELSE IF(ocjena>=70) THEN PRINT*, ’Dobar’ ELSE IF(ocjena>=60) THEN PRINT*, ’Dovoljan’ ELSE PRINT*, ’Nedovoljan’ END IF. . . Nije tako elegantno ali radi. 78

Iteracije Mnogi znanstveni problemi se oslanjaju na iteracije (višestruko ponavljanje) n Računala su idealna

Iteracije Mnogi znanstveni problemi se oslanjaju na iteracije (višestruko ponavljanje) n Računala su idealna za ovakva ponavljanja n Određeni broj ponavljanja ili dok neki uvjet ne bude zadovoljen n 79

Petlje sa logičkim IF Program zbraja prvih 100 cijelih. PROGRAM brojeva, ispisuje sumu i

Petlje sa logičkim IF Program zbraja prvih 100 cijelih. PROGRAM brojeva, ispisuje sumu i sumcijelih_do zaustavlja se na 100. - jedan od načina. IMPLICIT NONE PROGRAM sumcijelih_if IMPLICIT NONE INTEGER : : sum, n sum=0 DO n=1, 100, 1 n=1 5 PRINT*, n sum=sum+n n=n+1 IF(n <= 100)GOTO 5 END DO PRINT*, ’suma je : ’, sum PRINT*, ’The sum is: ’, sum END PROGRAM sumcijelih_if PROGRAM sumcijelih_ Ovo je prihvatljivo ali je mnogo END bolji načina sa do petljom 80

Sintaksa DO petlja DO labela, variabla=početna_vr, krajnja_vr, korak. Sastoji se od DO varijable Inicijalne

Sintaksa DO petlja DO labela, variabla=početna_vr, krajnja_vr, korak. Sastoji se od DO varijable Inicijalne vrijednosti blok izraza. Koraka – može biti pozitivan i END DO negativan DO petlja završava sa END DO CONTINUE ne radi ništa 81

Primjer do izraz i=1, 10 j=30, 5 k=7, 19, 4 r=4, 5, 6 x=-20,

Primjer do izraz i=1, 10 j=30, 5 k=7, 19, 4 r=4, 5, 6 x=-20, 10, 6 z=20, -9 vrijednost do variable 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 30, 35, 40, 45, 50 7, 11, 15, 19 4 -20, -14, -8, -2, -4, 10 20, 11, 2, -7, -16 82

Drugi primjer n n Načini program za tablicu množenja od 2 do 12. Plan

Drugi primjer n n Načini program za tablicu množenja od 2 do 12. Plan Ispiši zaglavlje 2. Ponavljaj j od 1 do 12 1. a) Ispiši ‘i puta j je i*j 83

Program PROGRAM množenje IMPLICIT NONE INTEGER : : i, j DO i=2, 12 PRINT*,

Program PROGRAM množenje IMPLICIT NONE INTEGER : : i, j DO i=2, 12 PRINT*, ’ ’ PRINT*, i, ’ tablica množenja’ DO j=1, 12 PRINT*, i, ’puta ’, j, ’ je ’, i*j END DO END PROGRAM množenje Izlaz je u obliku : : 3 puta 12 je 36 4 puta 1 je 4 84

Izlazak iz petlje Mnogo puta želimo ranije izaći iz petlje, n Fortran 90 koristi

Izlazak iz petlje Mnogo puta želimo ranije izaći iz petlje, n Fortran 90 koristi EXIT koji prebacuje kontrolu iza naredbe END DO n n Pogledajmo zbrajanje serije 1/2 + 1/3 + 1/4 …. Sve dok je suma manja od 3. 85

program PROGRAM seria 2 IMPLICIT NONE REAL : : sum, element INTEGER : :

program PROGRAM seria 2 IMPLICIT NONE REAL : : sum, element INTEGER : : n INTEGER, PARAMETER : : maxit=1000 sum=0. 0 DO n=1, maxit element=1. 0/n sum=sum+element IF(sum > 3. 0) EXIT END DO IF(n <= maxit)THEN PRINT*, ’Petlja se izvrsi ’, n, ’ puta’ ELSE PRINT*, ’Prešao je maxiteracije’ END IF END PROGRAM seria 2 PROGRAM seria IMPLICIT NONE REAL : : sum, element INTEGER : : n sum=0. 0 n=1 DO element=1. 0/n sum=sum+element IF(sum > 3. 0) EXIT n=n+1 END DO PRINT*, ’Petlja se izvršila ’, n, ’ puta’ END PROGRAM seria Ipak treba pokrenuti najviši dopušteni broj iteracija –gdje završava 86

cycle n n Vidjeli smo kako EXIT prebacuje kontrolu toka programa iza END DO

cycle n n Vidjeli smo kako EXIT prebacuje kontrolu toka programa iza END DO Fortran 90 podržava i naredbu CYCLE koja vraća kontrolu toka programa na početak petlje DO n=1, 100. . IF(i == j)CYCLE. . END DO 87

DO petlja n Radi boljeg razumijevanja DO petlji možemo dodijeliti ime prva: druga: DO

DO petlja n Radi boljeg razumijevanja DO petlji možemo dodijeliti ime prva: druga: DO i=1, j. . . DO k=i, l. . . IF(m==n)EXIT druga. . . END DO first Dodijelili smo ime petlji kao što to možemo za IF blok i SELECT CASE, Važno je da imenujemo i END DO; END IF; END SELECT 88

WHILE petlja n Fortran 90 ima DO WHILE petlju slijedećeg oblika DO WHILE (logički

WHILE petlja n Fortran 90 ima DO WHILE petlju slijedećeg oblika DO WHILE (logički izraz) block naredbi END DO 89

DO WHILE Ova konstrukcija je jedno vrijeme smatrana dobrom i dostupna je u mnogim

DO WHILE Ova konstrukcija je jedno vrijeme smatrana dobrom i dostupna je u mnogim modernim jezicima, međutim vodi mnogim nesuglasicama jer nije jasno gdje se testiranje izvodi. Ovo se ne događa kod izvođenja petlje sve dok je logički izraz istina , slijedeća petlja se pokrene ako je izraz istinit nakon testiranja ( što je zadovoljeno kod početka petlje). n 90

n Preporuka je da ne koristimo DO WHILE --takvu petlju možemo ostvariti na slijedeći

n Preporuka je da ne koristimo DO WHILE --takvu petlju možemo ostvariti na slijedeći način DO IF(. NOT. Logički izraz) EXIT. . . END DO 91

Polja varijable smo smatrali skalarom - bile su postavljene kao pojedinačne vrijednosti. U znanosti

Polja varijable smo smatrali skalarom - bile su postavljene kao pojedinačne vrijednosti. U znanosti i inženjerstvu često je potrebno poredati pojedine vrijednosti kao vektore i matrice te ponavljati iste operacije nad poredanim skupom podataka. Fortran to rješava pomoću manipulacije sa n poljima 92

1 -dimenzionalno polje n n Matematički – želimo li dodati svih n elementa zajedno

1 -dimenzionalno polje n n Matematički – želimo li dodati svih n elementa zajedno u jednu grupu x Polju moramo dodijeliti ime i odrediti koliko ima elemenata 93

n Fortran 90 može na nekoliko načina deklarirati polja, preporuka je dodijeliti atribute, poput

n Fortran 90 može na nekoliko načina deklarirati polja, preporuka je dodijeliti atribute, poput PARAMETAR : INTEGER, DIMENSION(50) : : miro REAL, DIMENSION(100) : : x, y, z U ovom obliku deklarirana polja postavljaju gornju granicu indeksa, dok je donja po default-u 1 (moguće je postaviti i obje granice) 94

Kada opisujemo polja koristimo slijedeće pojmove: Dimenzija (dimension) - do sada smo imali polje

Kada opisujemo polja koristimo slijedeće pojmove: Dimenzija (dimension) - do sada smo imali polje sa jednim indeksom - Fortran dozvoljava do 7, svaki predstavlja jednu dimenziju polja. Rang (rank) maksimalan broj linearno nezavisnih stupaca Veličina (size) ukupan broj elemenata polja. 95

Obrati pažnju, jedan od najpoznatijih problema programa sa poljima je pokušaj korištenja indeksa izvan

Obrati pažnju, jedan od najpoznatijih problema programa sa poljima je pokušaj korištenja indeksa izvan deklariranog područja. Po default-u ovo nije označeno, deklarira grešku i program se ruši. n ZAŠTO ? n 96

n n Unutar kompajliranja čuva se informacija o prvoj lokaciji koju polje zauzima, indeks

n n Unutar kompajliranja čuva se informacija o prvoj lokaciji koju polje zauzima, indeks i ukupna veličina polja. Elementi polja su referencirani na njihov pomak od prve lokacije Primjer REAL, DIMENSION(5) : : a Element a(4) je pomaknut 3 mjesta dalje od prvog elementa (lokacije) Uputa za element a(6) zato bi bila prva lokacija nakon zadnjeg elementa polja sa nepredvidivim rezultatom 97

Inicijalizacija – graditelj polja Da bi definirali konstantno polje trebamo dodijeliti vrijednost svakom elementu

Inicijalizacija – graditelj polja Da bi definirali konstantno polje trebamo dodijeliti vrijednost svakom elementu Primjer- jedno. cjelobrojno polje n red = (/ 1, 2, 3, 4, 5 /) Polje opisano listom vrijednosti zatvoreno u simbolima (/ i /) , za duga polja (500) ovo je nepraktično Red = (/ i, i=1, 5/) 98

99

99

U/I polje - elementi polja su tretirani kao skalarne varijable - cijelo polje se

U/I polje - elementi polja su tretirani kao skalarne varijable - cijelo polje se referencira imenom polja - dio polja može biti prikazan pomoću DO petlje PRIMJER: REAL, DIMENSION(50) : : tezina INTEGER, DIMENSION(10) : : indeks INTEGER : : broj. . . PRINT*, tezina(10), tezina(25) PRINT*, tezina READ*, broj, (indeks(i), i=1, broj) Problem: Ako ulaz prekoračuje 10 memorijskih lokacija (preko, eventualno greška) 100

Kod za provjeru ulaznog područja INTEGER, DIMENSION(10) : : indeks. Niz INTEGER, DIMENSION(10) :

Kod za provjeru ulaznog područja INTEGER, DIMENSION(10) : : indeks. Niz INTEGER, DIMENSION(10) : : indeks INTEGER : : broj !. . DO PRINT*, 'Unesi broj clanova' DO READ*, broj PRINT*, ’Unesi broj članova’ IF(broj >= 1. AND. broj <= 10)THEN !! READ*, broj Zadovoljava podrucje EXIT! Zadovoljava područje IF(broj >= 1. AND. broj <= 10)THEN ELSE EXIT PRINT*, 'Vrijednost izlazi iz podrucja' ELSE CYCLE ! STOP END IF PRINT*, ’Vrijednost izlazi iz područja’ END DO END IF PRINT*, 'Unesi podatke' END DO READ*, (indeks. Niz(i), i=1, broj) end PRINT*, ’Unesi podatke’ READ*, (indeks(i), i=1, broj) 101

Matrica program matrica implicit none integer i , j integer, dimension (3, 2) :

Matrica program matrica implicit none integer i , j integer, dimension (3, 2) : : m=& reshape((/1, 2, 3, 4, 5, 6/), (/3, 2/) ) print*, 'Ispis matrice' do i=1, 3 print*, (m(i, j), j=1, 2) end do i=6 J=3 end program matrica 102

Operacije REAL, DIMENSION(10) : : a, b, c, d INTEGER : : i. .

Operacije REAL, DIMENSION(10) : : a, b, c, d INTEGER : : i. . ! Fortran 90 style c = a + b ! Prije Fortran 90 DO i=1, 10 d(i) = a(i) + b(i) END !!!! Isti oblik polja 103

Primjer: !----- Pascalov trokut ----PROGRAM Pascal_Trokut INTEGER, PARAMETER : : max = 12 INTEGER

Primjer: !----- Pascalov trokut ----PROGRAM Pascal_Trokut INTEGER, PARAMETER : : max = 12 INTEGER : : i, c(0: max) = 0 c(1) = 1 DO i = 1, max c(1: i) = c(1: i) + c(0: i-1) PRINT '(i 2, ": ", 50 I 5)', i, c(1: i) END DO END PROGRAM Pascal_Trokut 104

Where –promjena vrijednosti selektiranim elementima polja ! inicijaliziraj polje temperatura i tlaka te uskladi

Where –promjena vrijednosti selektiranim elementima polja ! inicijaliziraj polje temperatura i tlaka te uskladi izmjerene vrijednosti sa zahtjevima ! ako je temp. veca od 100 upisi u polje reduciranu vrijednost za 7 ! ako je tlak manji ili jednak 1. 0 uvecaj ga za inicijalni 0. 3 ! ako je tlak veci od 1. 0 postavi logicko polje na kisovito (istina) REAL temp (4, 3), tlak (4, 3), reduce_temp, inc_tlak LOGICAL kisovito (4, 3) temp = 90. temp(1: 4: 2, 2: 3: 2) = 105. ! nije prema dimenzijama , samo dio tlak = 1. 1 tlak(2: 4: 2, 1: 3: 2) =. 9 kisovito =. false. reduce_temp = 7. inc_tlak = 0. 3 write (*, *) 'Prije: ‘ ; write (*, 900) temp ; write (*, *) write (*, 900) tlak naredba WHERE (temp > 100. 0) temp = temp - reduce_temp tlak = tlak + inc_tlak temp = temp - 5. 0 ELSEWHERE kisovito =. TRUE. END WHERE write (*, *) 'Poslije: ‘ ; write (*, 900) temp ; write (*, *) write (*, 900) tlak ; write (*, *) ; write (*, 910) kisovito ! 900 910 format (5 x, 4 f 9. 1) format (5 x, 4 l 9) END 105

Primjer: !Napiši program koji će učitati niz od max 100 znakova te zbrojiti !koliko

Primjer: !Napiši program koji će učitati niz od max 100 znakova te zbrojiti !koliko se puta u nizu pojavljuje svako od slova a, b, c program zbroj character (100) niz character: : slovo 1="a", slovo 2="b", slovo 3="c" Broji samo integer s 1, s 2, s 3, s mala slova print*, 'Ucitaj znakove u niz' read*, niz !niz znakova bez razmaka do i=1, len(niz) if(niz(i: i)==slovo 1)s 1=s 1+1 if(niz(i: i)==slovo 2)s 2=s 2+1 if(niz(i: i)==slovo 3)s 3=s 3+1 enddo s=s 1+s 2+s 3 print*, 'Zbroj pojavljivanja slova a, b, c iznosi: ', s end 106