FORTRAN Uvod Računala su samo strojevi: neznaju ništa, ne razmišljaju ni o čemu, ali mogu izuzetnom brzinom i vrlo točno, slijediti precizno napisane upute. Takve upute moraju se napisati u posebnom jeziku koji stroj može "razumjeti" programskom jeziku. FORTRAN je programski jezik čija prva verzija datira iz 1956 i nastao je u IBMovom laboratoriju u San Joseu u Californiji, a verzija koju mi koristimo na vježbama je FORTRAN 77, kojoj je standard utvrđen 1977. Nakon te verzije izašlo je još nekoliko, podosta proširenih, verzija standarda. (F90, F95, F2003, 2008. "Vlasnička" verzija Fortran2010 - Portland Group za MS Visual Studio) Svaki programski jezik mora imati leksičku strukturu, sintaksu i semantiku. Leksičku strukturu predstavljaju elementi od koji se tvori jezik Alfabet - Velika i mala slova engleske abecede (dijakritici nisu dopušteni) - Znamenke 0... 9 - specijalni znakovi (interpunkcija, +/-* i sl.) Pomoću Alfabeta gradi se Rječnik: - ključne riječi (npr. READ, IF, DO, CONTINUE) - imena funkcija (SIN, COS, ABS) - identifikatori - labele - konstante - brojevi - nizovi znakova itd. Sintaksu (pravopis) i semantiku (značenje) uvoditi ćemo malo po malo tokom vježbi. Brojevi U fortranu razlikujemo dva tipa numeričkih vrijednosti cijele ( INTEGER ) i realne ( REAL ) Cijeli brojevi su..., 3, -2, -1, 0, 1, 2, 3,... Realni brojevi su zapravo ono što u matematici nazivamo decimalnim brojevima. Karakterizira ih decimalna točka koja odvaja cijeli dio od decimalnog dijela broja npr 2.73 Ukoliko je broj napisan bez decimalne točke, fortran ga tretira kao cijeli broj. Ako je napisan s točkom, tretiran je kao realni broj.
Notacija: u slijedećim definicijama (ali SAMO u tim definicijama, NE i u FORTRANU) - Uglate zagrade " [ " i " ] " kažu: ono što je unutar tih zagrada pojavljuje se 0, 1, ili više puta. - Ono što je izvan zagrada, pojavljuje se barem jednom. - Vertikalna crta " " znači " ili " Identifikatori......su klasa riječi koja je karakterizirana slijedećim pravilom Identifikator se sastoji od znakova koji mogu biti slova i znamenke uz uvijet da prvi znak bude slovo. slovo [slovo znamenka] 7SAMURAJA, CVRČICVRČAK, +OSAM nisu korektni identifikatori. ZAŠTO? Identifikatori se upotrebljavaju kao imena varijabli, funkcija i slično. razmak " " u identifikatoru nije dopušten. Niz znakova......definiran je slijedećim pravilom: Niz znakova je proizvoljna kombinacija znakova unutar literala (apostrof, jednostruki navodnik) 'ovo je broj 7 a ovo broj 9' je takav niz. Formalno, niz znakova definira se ovako: '[znak]' Konstante numeričke cjelobrojne 2, -88 realne 0.91, +5.0, -4., -2.5E-3 logičke.true. i.false. znakovne ' ' 'znak'
Funkcije Funkcije koje susrećemo u matematici, pojavljuju se redovito i u programskim jezicima. Funkcije su predstavljene izrazima oblika ime_funkcije (argumenti) pri čemu su argumenti izrazi. Mi ćemo se baviti samo tzv. funkcijama jedne varijable, odnosno, funkcijama kojima treba samo jedan argument. primjer: sin(x), F(y), log(3+4*a) Tablica funkcija u fortranu x x e x ln x log x sin x, cos x tg x arc sin x arc cos x arc tg x ABS (X) SQRT(X) EXP(X) ALOG(X) ALOG10(X) SIN(X), COS(X) TAN(X) ASIN(X) ACOS(X) ATAN(X) Pozabaviti ćemo se sada onim radi čega je Fortran (FORmula TRANslation) i smišljen aritmetikom tj. načinom na koji se u fortranu zapisuje aritmetički izraz. Izrazi Spominjali smo da, generalno, varijabli pridružujemo vrijednost izraza. Objasnimo stoga značenje "aritmetičkog izraza": Aritmetički izraz je svaka smislena kombinacija operanada i operatora (Ovo nije definicija, već opis aritmetičkog izraza) Operator ponekad može biti i ispušten: 4, a, PI, 23.45 su izrazi Također su to i A+B, C*D, 12/m, cos(a),... Operatori, dakle, predstavljaju aritmetičke operacije i, na neki način, stvaraju vezu između operanada. Operandi, pak, mogu biti brojevi, varijable, funkcije i IZRAZI kao npr. u izrazu (a+b)*(c-d). (rekurzivna definicija)
Aritmetički operatori koji se koriste u fortranu su (zapisani u fortranskoj notaciji) - predznak: +, - - zbrajanje, oduzimanje: +, - - množenje i dijeljenje: *, / - potenciranje: ** (Pazite! radi se o potenciranju, a ne - samo - o kvadriranju!) Kad fortran računa izraz, računanje provodi s lijeva u desno, osim kad prioritet računskih operacije zahtijeva drukčije: Najveći prioritet (... ) - zagrade Funkcije, ** *, / predznak zbrajanje i oduzimanje najmanji prioritet U izrazu a+b*c+d prvo se računa b*c zatim se dodaje a, a nakon toga dodaje d. U izrazu (a+b)*(c+d) prvo se izračunaju zbrojevi, a zatim se ti zbrojevi pomnože. Zagrade mijenjaju redoslijed operacija, i pametnim korištenjem zagrada, (pogotovo kad nismo sigurni u redoslijed) dobiti ćemo željeni redoslijed računanja. Zadaci: Pretvorite u klasičnu matematičku notaciju: 1. (a*b*c)**2 2. a/b*c/d 3. a/b*c**2 4. 5.0/(a**3*b**2/3.2) Pretvori u fortransku notaciju 1. x 3a b c 2. x 5 a+2b a b 3. x 3a 2 b 3 4. x a+b c d 2
Struktura programa u fortranu Program je tekst koji sadrži niz naredbi, pri čemu u svakom redu stoji samo jedna naredba. Red u koji se upisuje naredba, u fortranu ima posebnu strukturu: podijeljen je na pozicije ili kolone (na svakoj poziciji može stajati samo jedan znak) OVO JE VRLO VAŽNO! 1 2 3 4 5 6 7 72 1 mjesto za oznaku komentara 1-5 - labela 6 mjesto za oznaku retka za nastavak 7 72 naredba Komentar tekst koji compiler ignorira, a koji služi programeru (i čitatelju) za pisanje objašnjenja Labela numerička oznaka od 1 do 99999 koja služi za označavanje retka. Nužna je pri radu s naredbama za kontroku toka programa Mjesto za nastavak Ako je naredba preduga i ne stane u 66 znakova, treba ju nastaviti u slijedećem redu. U redu u kojem se piše nastavak naredbe u 6. kolonu upišemo bilo koji znak osim ' ' i nule Struktura programa PROGRAM IME_PROGRAMA 123 naredba... naredba END Deklaracije varijabli Inicijalizacija varijabli PROGRAM je ključna riječ koja označava početak programa. IME_PROGRAMA je identifikator (počinje slovom, ne sadrži posebne znakove ni razmak) i mora biti jedinstven: više se ne smije pojavljivati u programu! Ime programu daje programer i obično odražava ono što program radi... END je ključna riječ koja označava kraj programa i obavezno je posljednja naredba u programu.
Prvi program program prvi end Varijable Varijabla je (strogo uzevši) rezervirani memorijski prostor čiji sadržaj korisnik/programer smije mijenjati tokom izvođenja programa. Sadržaj dakle može biti UPISAN u varijablu. Pri tome se sadržaj koji je eventualno prethodno tamo stajao briše i zamjenjuje novim. Naravno, ukoliko je u varijablu nešto upisano, tada taj sadržaj možemo i iskoristiti na neki način. Korištenje sadržaja nije destruktivno, tj "čitanjem" se sadržaj varijable ne mijenja. Varijabele se razlikuju po imenima, te se njihovim sadržajem barata pomoću tih imena. Ime varijable je identifikator i ono mora biti JEDINSTVENO. Pridruživanje Općenito, u fortranu, izraze, odnosno vrijednosti izraza (a što je to izraz, objasniti ćemo malo kasnije), moramo pridružiti varijablama. IMEVARIJABLE = IZRAZ Pojednostavnimo to za trenutak: IMEVARIJABLE = BROJ Što to znači? pridruživanje 15 15 varijabla broj pridruživanje varijabla izraz
Nakon pridruživanja, varijabla sadrži vrijednost izraza i u programu, kad god zatrebamo taj izraz, možemo upotrijebiti umjesto njega varijablu kojoj smo ga pridružili (u koju smo izraz smjestili). Varijabla drži vrijednost sve do novog pridruživanja! Primjeri: 1. Varijabli S pridruži broj 7, a varijabli CRVENO pridruži vrijednost 3.1415 S=7 CRVENO=3.1415 S CRVENO 7 3.1415 2. Pridruži A 10, B 20, C 30, a zatim C B, B A A=10 B=20 C=30 C=B B=A A B C 10 20 30 10 10 20 Ovo ilustrira mogućnost da varijabli pridružimo ne samo broj, nego i vrijednost spremljenu u neku drugu varijablu. 3. Pomoću pridruživanja, u fortranu se može apisati minijaturni program koji je temelj zamjene vrijednosti dvjema varijablama, uz upotrebu treće, pomoćne. A=10 B=20 POMOCNA=A A=B B=POMOCNA Pridruživanje, dakle omogućava čuvanje neke vrijednosti "pod nekim imenom". Primjer: program drugi R=2.71 PI=3.1415 O=2*R*PI end Nakon ovih linija koda, varijabla O sadržati će vrijednost 17.02693, jer su tokom računanja izraza iz memorije računala pročitane vrijednosti R i PI. R i PI pri tome nisu ni izgubile ni promijenile svoje vrijednosti.
Primjer program treci a=1.23 b=45.0 c=a+sin(b) d=a*c**2+(1.1-2.3*(-b-c)) end Ovdje je niz pridruživanja, koji ilustrira i pisanje izraza u FORTRANU. Deklaracija Fortran kao i brojni drugi programski jezici zahtijeva od programera da prije nego počne koristiti imena varijabli u programu, ta imena deklarira, tj najavi i rezervira. Fortran je međutim, nešto liberalniji od npr C-a. Što je deklaracija? Deklaracija je popisivanje imena varijabli koje će biti korištene u programu, uz istovremeno određivanje tipa varijable. Preciznije, deklaracijom se propisuje koji tip podatka smije biti smješten u varijablu. Zašto? Govorili smo o tipovima brojeva u Fortranu (decimalni tj. realni i cijeli). Veličina prostora koji će pri zapisivanju u memoriju zauzeti cijeli broj, općenito je manja od prostora koji je potreban realnom broju. Compiler želi radi efikasnosti unaprijed znati koliko mjesta treba rezervirati za korisnikove podatke. Također, određivanje tipa podatka unaprijed, omogućava compileru da te podatke adekvatno tretira pri prevođenju i kasnije, radu programa. Stoga, compileru trebamo reći koliko varijabli imamo, kojeg su tipa i kako se zovu. Kako? Eksplicitna deklaracija oznaka_tipa ime_varijable [, ime_varijable]
npr INTEGER CURA, DECKO, AS, DESETKA REAL HERC, TREF, PIK To je EKSPLICITNA deklaracija Implicitna deklaracija Da bi "olakšali" rad programerima (najčešće iz matematičkih, fizikalnih i tehničkih struka) autori fortrana su unaprijed odredili da I,J,K,L,M,N i sve varijable koje počinju tim slovima označavaju INTEGER varijable, osim ako programer, pomoću EKSPLICITNE deklaracije ne odredi drukčije. Varijable koje počinju bilo kojim drugim slovom osim gornjih su tipa REAL. Dakle u programu je dopušteno pisati IVICA = 6 DRAGICA=7.5 bez prethodne deklaracije Nije međutim dopušteno pisati IVICA = 6.0 DRAGICA = 7 Želimo li to, moramo napisati REAL IVICA INTEGER DRAGICA IVICA = 6.0 DRAGICA = 7 Napomena: Deklaracija mora biti jednoznačna: ime varijable se u deklaraciji smije pojaviti samo jednom.
nije korektno: program krivo INTEGER A,B,C REAL B,C,D INTEGER C,D,E end Zadatak 1 Koje su varijable realne, koje integer, a koje ne valjaju: ALI, BABA, I, 40RAZBOJNIKA, PROHUJALO, S VIHOROM, POVRATAK, FILIPA, LATINOVICZA, IMATI-I-NEMATI, 25.PET, TISUĆA, MILJA, ISPOD MORA Zadatak 2 Napišite program za računanje stranica u pravokutnom trokutu ako su zadane hipotenuza i kut uz nju Zadatak 3 Zbroji i podijeli kruške i jabuke (12 kruski i 57 jabuka). Točnije: jednu var. nazovite kruške, drugu jabuke i pridružite im navedene vrijednosti, a zatim obavite nad njima i spomenute operacije.