Upload
duongnhan
View
252
Download
2
Embed Size (px)
Citation preview
Programski jezik FORTRAN
Uvod
Računala su (samo) elektronički sklopovi. Ne znaju ništa, ne razmišljaju ni očemu, ne razgovaraju, ne pitaju i ne odgovaraju na pitanja. Kad bismo iz njih uklonilitzv. BIOS (Basic InputOutput System), nakon uključivanja se ne bi dogodilo ništa.Elektronika, iako pod naponom, ne bi "radila" ništa, osim proizvodnje topline.
Što, onda, računala mogu, kad već nisu u stanju razmišljati samostalno, kakouopće obavljaju toliko različitih i složenih poslova kojima ih opterećujemo iz sekunde usekundu?
Računala savršeno rade samo jednu stvar: slijede precizno napisane upute.Takve upute moraju se napisati u posebnom jeziku koji računalo može "razumjeti" –programskom jeziku. Računalo dakle provodi u djelo akcije isključivo na temelju nizainstrukcija koje je sastavio čovjek. Osnovni program, kojeg su, naravno, kao i (gotovo)sve programe na svijetu, napisali ljudi, je spomenuti BIOS i on daje računaluelementarne upute kako obaviti jednostavne osnovne (basic) zadatke.
Napisan je u jeziku Assembly, (naziv sustava kojeg koristimo u pisanju programaje Assembler). To je jezik najnižeg nivoa, složeniji od binarnih nizova kakvi su izravno"razumljivi računalu", no ipak, ne pretjerano smislen "prosječnom" programeru,naviknutom na programske jezike višeg nivoa.
Složeniji, pak, zadaci zahtijevaju složenije programe, a složeniji programizahtijevaju razvijeniji jezik od Assemblyja. Naime, iako je svaki program mogućenapisati u Assemblyju, to je strahovito zahtjevan i dugačak pothvat. Da bi programi biličitljiviji ljudima, oblikom što sličniji govornim rečenicama (Engleskog jezika),konstruirani su programski jezici viših nivoa. Jedan od njih je i FORTRAN.
FORTRAN je programski jezik čija prva verzija (FORTRAN I) datira iz 1956. Verzije II,III, IV, 66 nastale su u periodu od 1958. do 1966. i svaka je bila unaprijeđenjeprethodne. Njegovo ime je složeno od početnih dijelova riječi FORmula TRANslation iopisuje način na koji je jezik zamišljen. Ideja autora jezika je bila pružiti znanstvenicimai inžinjerima alat kojim bi uz pomoć računala, rješavali numeričke probleme, koji suzahtijevali velike količine matematičkih proračuna i baratanja s podacima.
Verzija koju mi koristimo u nastavi je FORTRAN 77, (kraće F77) kojoj je standardutvrđen 1977.
Nakon te verzije objavljeno je nekoliko, podosta proširenih, verzija standarda:
F90, F95 donijele su velike promjene u koncepciji jezika: slobodnu formu,modularnost, rekurzivnost, "pripremu" za objectoriented programiranje, operacije nad1D poljima, dinamičku alokaciju i pointere i t.d.
F2003 donosi pravo objectoriented programiranje, standardizaciju aritmetike (IEEEstd), naprednu manipulaciju podacima, interoperabilnost sa Com, CLI (commandlineinterface) parametre...
F2008 uvodi paralelizam, memory management...
U trenutku nastanka ovog teksta (točnije, njegove dopune 2013. godine) u planu jemanja revizija F2015. Takve revizije ne donose bitne novosti već samo dodatke ikorekcije.
Jezik: Pojmovi i struktura
Svaki programski jezik mora imati leksičku strukturu, sintaksu i semantiku.Objasnit ćemo što ti pojmovi znače i kako se generiraju.
Leksičku strukturu predstavljaju elementi od koji se tvori jezik
Alfabet
Alfabet (uobičajeno, naziv za skup svih slova u Grčkom pismu) je skup svih znakovakoje programski jezik koristi za tvorbu riječi i rečenica
Velika i mala slova engleske abecede (dijakritici č,ć,š,đ,ž nisu dopušteni) Znamenke 0 ... 9 specijalni znakovi (interpunkcija, +, /, , * i sl.)
Rječnik
Pomoću Alfabeta gradi se rječnik koji se sastoji od slijedećih klasa
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 tokomvježbi, kroz primjere i zadatke.
Iz osnovne leksičke strukture izvode se gradivi elementi jezika. U svimprogramskim jezicima pojavljuju se elementi koji opisuju pojmove. Pojmovi suuglavnom "svuda" isti, "riječi" koji ih opisuju su slične, no ono što razlikuje jedan jezikod drugog su sintaksa i semantika.
Radi ilustracije napomenimo da u govornim jezicima, na pr. Engleskom iHrvatskom ,ideja, tj pojam vode je isti, isgovorena riječ je slična u oba jezika, no razlika upisanju je očita
WATER <> VODA
Slično je i u programskim jezicima. Svaki postupak koji se može uobličiti uprogram, moguće je opisati, isprogramirati u bilo kojem programskom jeziku. Pojmovi iideje se ne mijenjaju s izborom jezika, ali način opisivanja a posebno riječi i rečenice da.
Za početak, opišimo i pojmove i riječi koje koristimo u FORTRANu
Brojevi
U FORTRANu razlikujemo dva tipa numeričkih vrijednosti cijele ( INTEGER ) idecimalne ( REAL )
Cijeli brojevi su ...,–3, 2, 1, 0, 1, 2, 3, ...
Decimalni brojevi su u stvari samo podskup realnih brojeva, no FORTRAN ih nazivarealnim (REAL) brojevima. Karakterizira ih decimalna točka koja odvaja cijeli dio oddecimalnog 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.
Identifikatori...
...su klasa riječi koja je karakterizirana slijedećim pravilom:
Identifikator se sastoji od znakova koji mogu biti slova i znamenke uz uvijet daprvi znak bude slovo.
Kraći zapis tog pravila je
"slovo" ["slovo" | "znamenka"]
Kod pisanja leksičkih pravila u uglate zagrade se stavlja ono što se pojavljujenijednom, jednom ili više puta (drugim riječima, može se ali i ne mora pojaviti uopće, aako se pojavi, može se i ponoviti)
Primjer 1:
7SAMURAJA, CVRČICVRČAK, +OSAM
nisu korektni identifikatori. Objasnite zašto.
Identifikatori se upotrebljavaju kao imena varijabli, funkcija i slično. Znak za razmak " "u identifikatoru nije dopušten. Možete li navesti zbog čega?
Niz znakova...
...definiran je slijedećim pravilom:
Niz znakova je proizvoljna kombinacija znakova unutar literala (apostrof, jednostrukinavodnik)
Primjer 2:
'ovo je broj 7 a ovo broj –9'
je takav niz.
Pravilo koje smo naveli gore, kraće se zapisuje ovako
'[znak]'
Konstante ...
...u FORTRANu mogu biti npr.:
numeričke
cjelobrojne 2, -88, ...realne 0.91, +5.0, -4. , -2.5E-3, ...
logičke
.TRUE. i .FALSE.
znakovne
' ' | 'znak'
Programiranje: Aritmetika u FORTRANU
Do sada smo upoznali najjednostavnije pojmove u FORTRANu odnosnoznakove i neke jednostavne riječi. Da bismo, međutim, mogli napisati program,potrebno je nešto više. Potrebne su riječi koje u kombinaciji s već navedenima stvarajunaredbe, rečenice koje računalu kažu što i kako treba napraviti.
U nastavku, dobrim dijelom i kroz primjere, naučit ćemo i nove riječi i način nakoji pišemo rečenice našeg programa. Prije svega upoznati ćemo mehanizam zaFORTRANu
Funkcije
Funkcije koje susrećemo u matematici, pojavljuju se redovito i u programskimjezicima, posebno u FORTRANu. Inžinjerski problemi pretrpani su funkcijama, i gotovosvi studenti tehničkih fakulteta već su upoznati s trigonomerijskim, logaritamskim idrugim funkcijama.
Funkcije predstavljaju izraze oblika
"ime_funkcije" ( "argument" )
pri čemu je argument – izraz. Uočite da argument funkcije mora stajati unutar okruglihzagrada! O tome što je "izraz" malo kasnije. Za počeak, dajmo konkretne primjere zagornje pravilo.
Primjer 3:
sin(x), F(y), log(3+4*a)
su korektno zapisane funkcije: sin, F i log su imena funkcija, x, y, i 3+4*a su argumenti.
Tablica funkcija u FORTRANu
|x| ABS (X)
√ x SQRT(X)ex EXP(X)ln x ALOG(X)log x ALOG10(X)sin x, cos x SIN(X), COS(X)tg x TAN(X)arc sin x ASIN(X)arc cos x ACOS(X)arc tg x ATAN(X)
Pozabaviti ćemo se sada onim radi čega je FORTRAN (sjetite se: FORmulaTRANslation) i smišljen – aritmetikom tj. načinom na koji se u FORTRANu zapisujeformula ili, preciznije, aritmetički izraz.
U FORTRANU ni jedna vrijednost, (konstanta, varijabla ili izraz) ne mogu stajati"sami za sebe". Nije, na pr. dopušteno usred programa napisati
11.4*x+12
i napisani izraz ostaviti da "lebdi u praznom prostoru". Svaka vrijednost koja se možeizračunati, mora se nekamo i smjestiti. Tomu služi
Pridruživanje
Općenito, u FORTRANu, izraze, odnosno vrijednosti izraza (a što je to izraz,objasniti ćemo malo kasnije), moramo pridružiti varijablama. To činimo ovako
"VARIJABLA" = "IZRAZ"
Varijabla je memorijska lokacija, rezervirani memorijski prostor, u koji možemostaviti neku vrijednost. Nama će to uglavnom biti numeričke vrijednosti, najčešćedobivene izračunavanjem nekog izraza. Ime varijable postaje sinonim za vrijednostspremljenu na danu lokaciju.
Što to znači?
varijabla izraz
pridruživanje
Uočite, ponovo, kako smo to postigli u FORTRANu,
"VARIJABLA" = "IZRAZ"
Primjećujete znak " = " između varijable i izraza. To NIJE znak jednakosti, jerovdje ne provjeravamo tzv. ekvivalenciju: ne razmišljamo o tome da li je "varijabla" istevrijednosti kao i "izraz". Naprotiv! Mi prisiljavamo varijablu da preuzme, poprimivrjednost izraza, odnosno, spremamo vrijednost izraza u varijablu. Uočite smjer streliceu ilustraciji. Tu strelicu u FORTRANu zamjenjujemo znakom " = ".
Dakle, znak "=" je znak za pridruživanje i u FORTRANu služi samo toj svrsi i nijednoj drugoj! Također, zapamtite, taj znak je jednosmjeran i smjer mu je onakavkakvog pokazuje ilustracija.
Nakon pridruživanja, varijabla sadrži vrijednost izraza i u programu, kad godzatrebamo taj izraz, možemo umjesto njega, upotrijebiti varijablu kojoj smo gapridružili (u koju smo izraz smjestili). Varijabla sadrži danu vrijednost sve do novogpridruživanja!
Primjer 4:
Varijabli S pridruži broj 7, a varijabli CRVENO pridruži vrijednost 3.1415
S=7CRVENO=3.1415
Primjer 5:
Pridruži A < 10, B <20, C < 30, a zatim C < B, B < A
A=10B=20C=30
C=BB=A
Ovo ilustrira mogućnost da varijabli pridružimo ne samo broj, nego i vrijednostspremljenu u neku drugu varijablu.
S CRVENO7 3.1415
A B C10 20 3010 10 20
Primjer 6: (N.B. OVO JE VAŽNO!) Pomoću pridruživanja, u FORTRANU se moženapisati minijaturni program koji je temelj zamjene vrijednosti dvjema varijablama, uzupotrebu treće, pomoćne.
A=10B=20
POMOCNA=AA=BB=POMOCNA
Pridruživanje, dakle omogućava čuvanje neke vrijednosti "pod nekim imenom". To jebitan i jak mehanizam, koji je temelj računanja u programiranju.
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 (N.B. OvoNIJE definicija, nego objašnjenje!)
Operator 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, stvarajuvezu između operanada.
Operandi, pak, mogu biti brojevi, varijable, funkcije i IZRAZI kao npr. u izrazu(a+b)*(cd).
Primijetite: ovo je tzv rekurzivna definicija, koja koristi pojam koji upravo definira
Aritmetički operatori koji se koriste u FORTRANu su (zapisani u fortranskoj notaciji)
predznak: + , zbrajanje, oduzimanje: + , množenje, dijeljenje: * , / potenciranje: **
Kad FORTRAN računa izraz, računanje provodi s lijeva u desno, osim kadprioritet računskih operacije ne zahtijeva drukčije:
Najveći prioritet( __ )
Funkcije, ***, /
predznakzbrajanje 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 akoniste sigurni u redoslijed izvođenja) dobiva se željeni redoslijed računanja.
Zadaci :
Pretvorite u klasičnu matematičku notaciju:
1. (a*b*c)**22. a/b*c/d3. a/b*c**24. 5.0/(a**3*b**2/3.2)
Pretvori u fortransku notaciju
1. x←3a+bc
2. x←5+a+2ba−b
3. x← 3a2
b3
4. x←
a+bc
d 2
Programiranje: Varijable
Varijabla je, spomenuli smo to na početku, rezervirani memorijski prostor čijisadrž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 eventualnoprethodno tamo stajao briše i zamjenjuje novim. Upisivanje vrijednosti u varijablu sevrši pridruživanjem.
Naravno, ukoliko je u varijablu nešto upisano, tada to možemo i pročitati,odnosno iskoristiti na neki način. Čitanje sadržaja nije destruktivno, tj čitanjem sesadržaj varijable ne mijenja i ne briše
Varijabele se razlikuju po imenima, te se njihovim sadržajem barata pomoću tihimena. Ime varijable je identifikator i ono mora biti JEDINSTVENO.
Da bismo u varijablu upisali sadržaj pridruživanjem koristimo slijedeće pravilo:
"ime_varijable" = "izraz"npr.
J=42, ZAGREB=16.0
Čitanje je zapravo samo jednostavan naziv za upotrebu vrijednosti spremljenu uvarijablu danog imena.
Primjer 7:
R=2.71PI=3.1415O=2*R*PI
Nakon ovih nekoliko redova koda, varijabla O sadržati će vrijednost 17.02693, jersu tokom računanja izraza iz memorije računala pročitane vrijednosti R i PI iupotrijebljene u aritmetičkom izrazu. R i PI pri tome nisu ni izgubile ni promijenilesvoje vrijednosti.
Dakle, u varijablu (u ovom slučaju O) ne sprema se stvarno sam izraz, većnjegova izračunata vrijednost! Što mora biti zadovoljeno da bi to bilo moguće?
Primjer 8: X=10.0
JEDAN = SIN(X)**2 + COS(X)**2dva=alog10(X**2)
Deklaracija
FORTRAN kao i brojni drugi programski jezici zahtijeva od programera da prijenego što počne koristiti imena varijabli u programu, ta imena deklarira, tj "najavi"njihovu upotrebu i rezervira ih. FORTRAN je u tome, međutim, nešto liberalniji od npr.Ca.
Što je deklaracija?
Deklaracija je popisivanje imena varijabli koje će biti korištene u programu, uzistovremeno određivanje tipova varijabli. Preciznije, deklaracijom se propisuje koji tippodatka smije biti smješten u koju varijablu.
Zašto?
Govorili smo o tipovima brojeva u FORTRANu (decimalni tj. realni i cijeli). Veličinaprostora koji će pri zapisivanju u memoriju zauzeti cijeli broj, općenito je manja odprostora koji je potreban realnom broju.
Pojednostavljeno, compiler želi, radi efikasnosti, unaprijed znati koliko mjesta trebarezervirati za korisnikove podatke. Također, određivanje tipa podatka unaprijed,omogućava compileru da te podatke adekvatno tretira pri prevođenju i kasnije, raduprograma.
Stoga, compileru nekako trebamo reći koliko varijabli imamo, kojeg su tipa i kako sezovu i to prije nego što "radni" dio programa dođe na prevođenje.
Kako?
Dva su načina za deklaraciju varijabli. Nazivaju se eksplicitna i implicitnadeklaracija. Općenita preporuka glasi: koristite eksplicitnu deklaraciju. Ipak, za nekeuobičajene slučajeve, mi ćemo koristiti i implicitnu deklaraciju.
Eksplicitna deklaracija
je ona u kojoj jasno i nedvosmisleno "crno na bijelo" navodimo tipove i imenavarijabli po pravilu
"oznaka_tipa" "ime_varijable" [, "ime_varijable"]
nprinteger DECKO, AS, DESETKAreal HERC, TREF, PIK
Implicitna deklaracija
je vrsta deklaracije koja se podrazumijeva ako ne specificiramo tipove varijabli.
Da bi "olakšali" rad programerima (najčešće iz matematičkih, fizikalnih i tehničkihstruka) 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 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 = 6DRAGICA=7.5
bez prethodne deklaracije, ali nije dopušteno slijedeće:
IVICA = 6.0DRAGICA = 7
Želimo li ipak izvesti to pridruživanje, moramo dodati eksplicitnu deklaraciju
real IVICAinteger DRAGICA
IVICA = 6.0DRAGICA = 7
Napomena: Deklaracija mora biti jednoznačna: ime varijable se u deklaraciji smijepojaviti samo jednom.
Objasnite zašto nije korektno pisati
integer A,B,Creal B,C,Dinteger C,D,E
Programiranje: Struktura programa u FORTRANu
Program je tekst koji sadrži niz naredbi, pri čemu u svakom redu stoji najvišejedna naredba. Pri tome ne mislimo da se pod naredbom podrazumijeva jedna "riječ"nego cijela "rečenica". Neke naredbe imaju proširenu strukturu i zauzimaju više redova.
Red u koji se upisuje naredba, u FORTRANu ima posebnu strukturu: podijeljenje na pozicije ili kolone tj. stupce (na svakoj poziciji može stajati samo jedan znak).
1 2 3 4 5 6 7 72
1 mjesto za oznaku komentara1 5 labela6 mjesto za oznaku retka za nastavak7 – 72 naredba
Komentar – Ako se na prvom mjestu u retku nalazi slovo "C", ostatak teksta u tomretku compiler ignorira. Takav se redak smatra komentarom 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 priradu s naredbama za kontrolu toka programa
Mjesto za nastavak – Ako je naredba preduga i ne stane u prostor veličine 66 znakova(od 7. do 72. znaka), treba ju nastaviti u slijedećem redu. U redu u kojem se piše nastavak naredbe, u 6. kolonum upišemo bilo koji znak osim ' 'i nule. Dogovorno, u okviru vježbi iz FORTRANA neka to bude znak "#"
Struktura programa
PROGRAM IME_PROGRAMA
Deklaracije varijabliInicijalizacija varijabli
123 naredba...naredba
END
Primjer 9:
Ovo je prvi program koji upoznajemo u FORTRANu. On je sasvim korektno napisan icompiler će ga prevesti u izvršni kod. Taj se program može nakon toga i pokrenuti.
program prviend
Što taj program radi?
Primjer 10:
U primjeru 7 izračunali smo opseg kruga pomoću nekoliko naredbi pridruživanja.Opremimo te naredbe dodatnima, i kompletirajmo program.
program opseg
real r, pi, o
r =2.71pi=3.1415o =2*r*pi
end
Zadatak 1:
Napišite program koji izračunava duljinu katete u pravokutnom trokutu ako je zadanadruga kateta i kut uz nju. Kut je zadan u radijanima.Napišite i varijantu programa koji računa katetu, ako je kut zadan u stupnjevima.