1 / 106

FORTRAN

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

hilaire
Télécharger la présentation

FORTRAN

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FORTRAN NASTAVAK

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

  3. 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

  4. 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

  5. FORTRAN • April 1957 IBM pokrenuo IBM Mathematical FORmulaTRANslation 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 (Fortran66). • 1978 FORTRAN V – FORTRAN 77,ANSI 1980 zamijenjen novim standardom FORTRAN 77. • sredinom 1980 FORTRAN 77 postaje univerzalni dijalekt. • 1991 ,pojavljuje se standard i compiler Fortran 90 (ISO).Podržava FORTRAN 77, • 1997 FORTRAN 95 (ISO) • rujan 2002 FORTRAN 2000

  6. FORTRAN 77 i Fortran 90 • Programi ili procedure u FORTRAN 77 valjani su i u Fortran 90, ponašaju se identično • F90 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)

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

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

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

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

  11. 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

  12. 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) • Dodjeljivanje (viđeno) • Inicijalizacija • parametar

  13. Inicijalizacija podataka • Inicijalizacija varijabli REAL::a=0.0,b=5.0,c 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

  14. Tipovi podataka • 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

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

  16. Cjelobrojne i realne varijable PROGRAM brojevi INTEGER :: i,j REAL :: v1, v2 i=5; j=3; v1=1.3; v2=6.3 PRINT*,’i=’,i,j,v1,v2 END PROGRAM brojevi

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

  18. PRIMJER • Kratki program PROGRAM tippodatka IMPLICIT NONE REAL :: masa=52.5, gustoća=1.7 volumen=masa/gustoća PRINT*,’Volumen je ’,volumen,’ m3’ END PROGRAM tippodatka • Rezultat …kompilacijska greška budući da varijabla volumen nije deklarirana

  19. Tipovi konverzije • 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

  20. 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)

  21. 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 ..

  22. Više • Što se događa ako su INTEGER i REAL vrijednosti na desnoj strani Strana pridruživanja? • Uvjeti su : • 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. • Pažljivo!!

  23. 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 ?

  24. 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 • 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 !

  25. Savjet • Dobra je ideja izbjegavati aritmetiku različitih tipova podataka. • Kada dodijelimo vrijednosti podaci ili parametri moraju koristiti korektne tipove podataka .SveREAL vrijednostiimaju decimalnu točku , sve INTEGERnemaju dec. točku PROGRAM primjer IMPLICIT NONE REAL :: a=2.0,b=3.0 INTEGER :: i=2, j=3 .....

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

  27. Moduli • 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) ?

  28. JEDNOSTAVNI PRIMJER • 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

  29. SUBROUTINE • Pozdrav, zbroj i doviđenja su primjeri potprograma. Svaki potprogram je nezavisan modul. Kada se potprogram pozove: • Kontrola se prenosi na potprogram • Naredbe u pp se izvršavaju do naredbe END • 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

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

  31. SUBROUTINE • Pp.zbrojkoji 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.

  32. SUBROUTINE • 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

  33. 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

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

  35. 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

  36. SUBROUTINE 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

  37. 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) • PP može zvati drugi pp, F77 ne dopušta rekurziju (poziv samog sebe). F90 dopušta rekurziju. • U većini priručnika vidjet ćete RETURN naredbu prije END u svim pp. Ovo nije potrebno u F90. (kasnije ćemo vidjeti kada se može koristiti RETURN) • 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

  38. FUNCTION • 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

  39. 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

  40. 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

  41. 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 :: vr1,vr2,vr3,prosjek PRINT*,’Unesi 3 realne vrijednosti’ READ*,vr1,vr2,vr3 PRINT*,’Prosjek iznosi: ’ PRINT*,prosjek(vr1,vr2,vr3) END PROGRAM primjer

  42. NEKA PRAVILA • 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.

  43. Funkciji mogu pristupiti i drugi programski moduli • 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)

  44. ATRIBUTI • 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

  45. PRIMJER PROGRAM primjer IMPLICIT NONE REAL vr1,vr2,vr3 REAL,EXTERNAL :: prosjek PRINT*,’Unesi 3 broja’ READ*,vr1,vr2,vr3 PRINT*,’Prosjek iznosi: ’ PRINT*,prosjek(vr1,vr2,vr3) 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

  46. ...... 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

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

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

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

  50. • Č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.

More Related