Вы находитесь на странице: 1из 11

Kratak uvodni kurs programiranja u Fortranu 77

Filip Bri cc

Contents
1 Osnovni koncepti programiranja 2 Osnovni elementi Fortrana 77 2.1 Izgled programa u Fortranu 77 . . . . . 2.2 Prosti tipovi promenljivih . . . . . . . . 2.3 Nizovi i matrice . . . . . . . . . . . . . . 2.4 Izrazi i operatori . . . . . . . . . . . . . 2.4.1 Aritmetiki izrazi . . . . . . . . . c 2.4.2 Izrazi sa slovnim promenljivama 2.4.3 Relacioni operatori . . . . . . . . 2.4.4 Logiki izrazi . . . . . . . . . . . c 2.5 Kontrola toka programa . . . . . . . . . 2.5.1 Uslovno grananje - IF . . . . . . 2.5.2 Petlja - DO . . . . . . . . . . . . . 2.5.3 Bezuslovan skok - GO TO . . . . . 2.5.4 Kraj rada - STOP . . . . . . . . . 3 4 4 5 6 7 7 8 9 9 10 10 10 11 11

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

Osnovni koncepti programiranja

Programiranje se u veini sluajeva ne razlikuje bitno od bilo kog drugog plana c c rada. Jedino to u programiranju mora da bude sve striktno i jednoznano s c denisano. Recimo, ako bismo na obinom jeziku rekli Stari ovek i ena prelaze c c z ulicu, nije jednoznano denisano da li je star samo ovek ili je stara i ena. U c c z nekom preciznijem programerskom ili matematikom jeziku mogli bismo rei c c Stari (ovek i ena) prelaze ulicu i tu bi ve bilo jasnije da se pridev stari odnosi c z c i na oveka i na enu! c z Sam proces programiranja obuhvata nekoliko bazinih faza: c 1. Denisanje problema podrazumeva strogo i jednoznano denisanje c problema koji treba da se isprogramira. 2. Podela problema na podprobleme da bi se sve pojednostavilo i uprostilo. Podela se vri postepeno, po nivoima, sve dok se ne dodje do temelja, s tj. do nivoa u kome su svi podproblemi jasni i samim tim ve reeni. c s 3. Sklapanje potproblema natrag u polazni problem je nalni korak u kome se samo sakupe sva reenja podproblema i sve to uoblii u nalni s c program. Ovo je generalna ema za reavanje svakog problema, nezavisno od njegove s s teine. Ako je problem laki, tj. ako je problem sam po sebi na niem nivou, z s z manje e biti grananja na podprobleme, a ako je tei, bie vie grananja, ali c z c s princip je isti. Vrlo je bitno pravilno sagledati sam taj proces, pa u zato sada c dati jedan primer problema. Problem:Napisati program za crtanje graka funkcije iji je opti oblik c s i(t) = I0 sin(t + )eat gde se parametri I0 , , i a zadaju iz komandne linije. Reenje problema: Moda sam uzeo malo zahtevniji problem kao prvi s z primer, ali to je namerno. Ideja je da pokaem da bez obzira na kompleksnost z problema, njegovo reavanje ne dobija nita na teini. Jedino to dobija jeste s s z s vei kod, tj. dui program, to efektivno zahteva vie vremena za pisanje, ali ne c z s s i mnogo vie razmiljanja! s s Sada treba podeliti problem na podprobleme: Uitavanje parametara c Raunanje funkcije i(t) u zavisnosti od parametra t c Crtanje take sa koordinatama (t, i(t)) c Ponavljanje prethodne dve take za razliite vrednosti parametra t c c

Ovo reenje deluje smeno i svako ko ga vidi, mora da pomisli pa sta je ovo, ovo s s sam ve znao/la!. Upravo i jeste tako. Ovo je sve vrlo jednostavno ako se gleda c iz pravog ugla. Dalje treba napisati detaljnije kako se to uitavaju parametri, c kako se izraunava onakva funkcija, kao i bilo koja drugaija funkcija, i treba c c videti kako da se te take nacrtaju. Finalno, treba da se vidi kako da se napravi c petlja, odnosno, kako da se ponavljaju druga i trea taka za razliite vrednosti c c c parametra t. O svemu tome sada neu nita da kaem, ali videe se u daljem c s z c tekstu da je to jo jednostavnije od ovog prvog koraka. s Takodje bitan koncept u programiranju koji nekim ljudima nije odmah jasan je da promenljiva nema ksnu vrednost, ve promenljivu vrednost (to joj i ime c s kae). Promenljiva u programiranju ustvari predstavlja lepi naziv za neku z s lokaciju u memoriji raunara. U tu memoriju moe da se upie bilo ta, i iz nje c z s s moe to isto i da se proita. Tako da ako se napie x = x+1, to u matematikom z c s s c smislu predstavlja kontradikciju, u programiranju predstavlja naredbu dodeljivanja. To znai da se promenljivoj x dodeljuje nova vrednost koja je jednaka c x+1. Ako je vrednost promenljive x bila recimo 3, nova vrednost e biti 3+1 = c 4. U nekim knjigama iz programiranja se umesto znaka jednakosti koristi ili naredba dodeljivanja iz PASCALa :=. Moda je i bolje tako jer je manja z mogunost da se pomea matematika jednakost sa programerskom jednakosti, c s c i jasnije se vidi ta se dodeljuje emu. s c

Osnovni elementi Fortrana 77

Fortran 77 je jedan od jezika visokog nivoa. To znai da se ne piu direkc s tno instrukcije za procesor ve se pie na nekom viem nivou. U skladu sa c s s tim, u fortranu 77 postoji razlika izmedju tipova podataka, postoje raznorazne mogunosti grananja u programima i pravljenja petlji. c

2.1

Izgled programa u Fortranu 77

U fortranskim programima mora da se dri odredjenih pravila da bi ih kompajler z lepo obradio, odnosno da bi programi radili. U fortranu mogu da se koriste samo velika slova! Fortranski program je podeljen u kolone, pri emu svaka kolona c ima svoje znaenje i funkciju. Prva kolona slui za pisanje komentara. Ako je c z prvo slovo u prvoj koloni C, onda se ceo red tretira kao komentar i prevodilac ga ne uzima u obzir. Pisanje komentara je vrlo bitna stvar u programiranju da bi se lake snalazilo u veim programima. Kolone od druge do pete slue s c z da se u njih upisuju oznake komandi, takozvani label-i. Te oznake slue da bi z se kasnije moglo pozvati na tu istu komandu. To je slino kao i obeleavanje c z matematikih formula sa strane, u knjigama. Sesta kolona slui da se nastavi c z komanda iz prethodnog reda. Ako je komanda suvie dugaka da stane u jedan s c red ili iz bilo kog drugog razloga (preglednost, recimo) se eli da komanda stoji z u vie od jednog reda, u estu kolonu treba da se stavi neki karakter (najbolje s s

recimo + ili * ili $) to znai da tekui red nije nova komanda, ve nastavak s c c c komande iz prethodnog reda. Od sedme kolone, pa nadalje, zakljuno sa 72c gom kolonom slue za upis naredbi fortrana. Evo kako bi mogao da izgleda neki z fortran program: C23456789 C C Program za ispis reci Hello World dokle god korisnik unosi broj 1 C PROGRAM Pr1 C Definicija promenljivih INTEGER I C Pocetni uslov za petlju I = 1 C Petlja dokle god korisnik unosi jedinicu 10 WRITE(*,*) Hello World READ(*,*) I IF(I.EQ.1) GOTO 10

C Kraj progama END

2.2

Prosti tipovi promenljivih

U fortranu promenljive mogu da se sastoje od najvie est karaktera. Postoji s s est osnovnih tipova podataka u fortranu. s INTEGER je celobrojni tip podataka. REAL je realni tip podataka. To su realni brojevi ija se preciznost kree c c otprilike od 1038 do 10+38 . DOUBLE PRECISION je jo jedan realni tip podataka, koji ima veu pres c ciznost od REAL. COMPLEX predstavlja tip podataka za zapis kompleksnih brojeva. LOGICAL je tip podataka koji moe da bude ili taan (TRUE) ili netaan z c c (FALSE). Takav tip se obino koristi za proveravanje da li je zadovoljen c neki uslov ili nije. CHARACTER je tip podataka koji sadrzi reci i recenice pod navodnicima. Koristi se uglavnom za ispis teksta. 5

Realni brojevi se u fortranu zapisuju u uobicajenom scientic formatu, kao i na veini kalkulatora. Znai, prvo ide znak (+ ili -, pri emu + nije neophodan), c c c pa posle toga broj, pa decimalna taka, i na kraju eksponent u obliku E+/-[broj], c + koji predstavlja zamenu za 10 [broj] . Da bi bilo jasnije, realni brojevi su: 1, -1, +0.429, -34.187, +11E13, -72.5E-5, +76.36E-41, . . . Double precision brojevi se zapisuju isto kao i realni brojevi, samo se umesto oznake E za eksponent koristi oznaka D i mora da se napie, pa makar eksponent s bio 0. Kompleksni brojevi se zapisuju u formatu ([realni],[imaginarni]), tj. kao (0,0), (0,1), (1,0), (3E2,0,5), (1.8E-3,72.1E13) . . . Stringovi, tj. promenljive tipa CHARACTER se zapisuju pod jednostrukim navodnicima, odnosno kao Pera ide u skolu ili astabilni multivibrator ili takagi yoshin ryu . . . Ako treba da se napie navodnik, on se dobija dus pliranjem navodnika, odnosno Dukic je rekao: Izadji napolje i zatvori vrata sto je student i uradio. U fortranu postoji nekoliko naina da se denie tip podataka. Za realne c s i cele brojeve postoje podrazumevani nazivi, tj. ako je prvo slovo u nazivu promenljive od I do N, onda je ta promenljiva INTEGER, a ako je prvo slovo od A do H ili od O do Z, onda je promenljiva tipa REAL. Ipak, taj nain i nije c preterano preporuljiv jer doprinosi nepreglednosti celokupnog programa. Bolje c je koristiti formalno deklarisanje promenljivih koje se vri tako to se navede s s kao komanda naziv tipa pa onda naziv promenljive (ili nazivi vie promenljivih s odvojenih zarezima). Specijalno za tip string, moe dodatno da se dopie kolika z s je duina stringa, u formatu CHARACTER IME*20, PREZ*20, TELEF*7. Duina z z stringa ak i ne mora da bude konstanta, ve moe da bude i neki celobrojni c c z izraz tipa CHARACTER NAZIV*(PRVI+DRUGI) gde su PRVI i DRUGI neke INTEGER promenljive. Postoji i mogunost da se navede komanda IMPLICIT koja denie sa kojim c s slovom treba da poinju promenljive odredjenog tipa. Na primer, IMPLICIT c DOUBLE PRECISION(D,X-Z) bi znailo da sve promenljive koje poinju slovom c c D ili slovima od X do Z treba da budu DOUBLE PRECISION, ako se drugaije ne c kae. z Ako neko eli da denie konstante sa nazivom, to moe da se postigne z s z komandom PARAMETER i to u sledeem obliku: c C2345678 REAL PI, PIPOLA, DVAPI PARAMETER (PI=3.14159265, DVAPI=2*PI) PARAMETER (PIPOLA=PI/2)

2.3

Nizovi i matrice

Nizovi se u fortranu deniu slino kao i obine promenljive. Jedina razlika je s c c to se iza naziva promenljive u zagradama navede broj elemenata niza. Recimo, s 6

komandom REAL A(4) se dobija niz od etiri realne promenljive i to su A(1), c A(2), A(3) i A(4). Ako je potrebno da niz ne poinje od indeksa 1, ve od c c nekog drugog broja, moe i da se napie [tip] [ime]([donja]:[gornja]), z s kao recimo INTEGER GOD(1980:2010), gde se denie niz GOD sa elementima od s GOD(1980) do GOD(2010). Matrice i nizovi viih dimenzija se deniu tako to se u zagradama zarezs s s ima odvoje dimenzije dimenzija. Na primer DOUBLE PRECISION X(3,4) denie s matricu X dimenzija 3x4.

2.4
2.4.1

Izrazi i operatori
Aritmetiki izrazi c

Izraz u fortranu moe da bude ili samo neki operand (to je ili konstanta ili z promenljiva), ili [unarni operator] [operand], gde su unarni operatori + i -, ili [izraz] [operator] [izraz]. Operatori u fortranu su sledei: c + * / ** sabiranje oduzimanje mnoenje z deljenje stepenovanje

Pri formiranju izraza, sve promenljive moraju da budu istog tipa. Pri tome, INTEGER moe automatski da se transformie u REAL, a tip REAL moe z s z automatski da se transrmie u DOUBLE PRECISION ili u COMPLEX, ako je to s potrebno. U izrazu takodje mogu da uestvuju i razne matematike funkcije. U sledeoj c c c tabeli e biti navedene te funkcije (radi kraeg i preglednijeg izgleda tabele, za c c tip INTEGER pisano je samo slovo I, za tip REAL pisano je samo slovo R, za tip DOUBLE PRECISION pisano je slovo D, a za tip COMPLEX slovo C):

Funkcija SIN(x) COS(x) TAN(x) ASIN(x) ACOS(x) ATAN(x) SINH(x) COSH(x) TANH(x) SQRT(x) LOG(x) EXP(x) LOG10(x) MIN(x,...) MAX(x,...) INT(x) REAL(x) DBLE(x) CMPLX(x) CMPLX(r,i) AINT(x) ANINT(x) NINT(x) ABS(x) MOD(a,b) AIMAG(x) CONJG(x) 2.4.2

Tipovi na koje deluje R, D, C R, D, C R, D R, D R, D R, D R, D R, D R, D R, D, C R, D, C R, D, C R, D I, R, D I, R, D I, R, D, C I, R, D, C I, R, D, C I, R, D, C I, R, D R, D R, D R, D I, R, D, C I, R, D C C

Opis sinus od x kosinus od x tangens od x arkus-sinus od x arkus-kosinus od x arkus-tangens od x hiperboliki sinus od x c hiperboliki kosinus od x c hiperboliki tangens od x c koren iz x prirodni logaritam od x ex dekadni logaritam od x minimum argumenata maksimum argumenata pretvara u INTEGER odpisujui ostatak c pretvara u REAL pretvara u DOUBLE PRECISION pretvara u COMPLEX pretvara u COMPLEX samo otpisuje ostatak od celog broja zaokruuje na najblii celi broj z z ANINT + vraa INTEGER c apsolutna vrednost odnosno moduo ostatak pri deljenju a/b vraa imaginarni deo c konjugovano kompleksni par

Izrazi sa slovnim promenljivama

Stringovi odnosno nizovi karaktera se u Fortranu 77 deniu kao CHARACTER s [naziv]*[velicina], kao na primer CHARACTER METAL*10. Konstante tipa CHARACTER se obelezavaju sa jednostrukim navodnicima, pri cemu se za jednostruki navodnik unutar samog stringa koristi dupli jednostruki navodnik. Na primer METAL = ALUMINIUM, ili Its. Podstringovi se obelezavaju tako sto se u zagradama navede prvi i poslednji element podstringa, odvojeni navodnicima. Na primer: METAL(1:3) daje ALU ili METAL(4:9) daje MINIUM. Podstringovima mogu i da se dodeljuju vrednosti. Na primer, ako bi se napisalo METAL(4:9) = FOLIJA, onda bi sadraj promenljive METAL bio ALUFOLIJA. z Ako postoji potreba da se nadoveu dva stringa, to moe da se uradi operz z atorom // koji slui za konkatenaciju stringova. Ako bi se napisalo ALU // z

FOLIJA, opet bi se dobila ALUFOLIJA. U ovakvom primeru tako nesto ne deluje korisno, ali zna da bude korisno ako se upotrebi nad samim promenljivama. Na primer: C234567 CHARACTER IME*10, PREZ*10, PUNO*21 WRITE (*,*) Unesite vase ime: READ (*,*) IME WRITE (*,*) Unesite vase prezime: READ (*,*) PREZ PUNO = IME // // PREZ WRITE (*,*) Puno ime i prezime je: WRITE (*,*) PUNO Postoje i neke funkcije sa kojima je mogue bolje baratati znakovnim promenljic vama. U narednom tekstu e biti razmatrane te funkcije. c Funkcija CHAR(I) vraa karakter ija je ASCII vrednost zadata u INTEGER c c promenljivoj I. Funkcija ICHAR(S) vraa ASCII vrednost prvog karaktera iz stringa S. c Funkcija INDEX(S1,S2) vraa poziciju prvog pojavljivanja stringa S2 unutar c stringa S1. Funkcija LEN(S) vraa duinu stringa S. c z 2.4.3 Relacioni operatori

U Fortranu 77 postoje i neki relacioni operatori nad celobrojnim promenljivama i nad stringovima. Oni vraaju logike promenljive i mogu da se koriste kao c c uslovi u IF kontrolnim konstrukcijama. Ti relacioni operatori su .EQ. .GE. .GT. .LE. .LT. .NE. 2.4.4 EQual, odnosno jednako Greater of Equal, odnosno vei ili jednak c Greater Than, odnosno vei c Less or Equal, odnosno manji ili jednak Less Than, odnosno manji Not Equal, odnosno nije jednak

Logiki izrazi c

Od unarnih logikih operatora, u fortranu postoji samo operator negacije, .NOT., c a od binarnih, tu su sledei: c .AND. .OR. .EQV. .NEQV. logiko I (AND) c logiko ILI (OR) c logika ekvivalencija (XNOR) c logika ne-ekvivalencija, tj. ekskluzivno ILI (XOR) c 9

U logike izraze mogu da budu ukljuene i promenljive koje nisu logikog c c c tipa, putem relacionih operatora (npr. (X .GT. A) .OR. (Y .GT. B)

2.5
2.5.1

Kontrola toka programa


Uslovno grananje - IF

Najkorieniji oblik grananja je IF - ELSE konstrukcija. Opti oblik izgleda sc s ovako: C234567 IF( uslov1 ) THEN blok1 ELSE IF( uslov2 ) THEN blok2 ELSE blok3 END IF Ako je ispunjen uslov1, onda se izvrava blok1. U suprotnom, ako je zados voljen uslov2, onda se izvrava blok2. Ako nijedan uslov nije zadovoljen, s izvrava se blok3. Poslednji deo (ELSE) je opcioni, a srednji deo (ELSE IF) s moe da postoji proizvoljan broj puta (ukljuujui tu i nijednom). z c c Evo jednog primera IF uslovnog grananja: C234567 CHARACTER KOMANDA*5 WRITE(*,*) Unesite komandu (PRINT, READ ili QUIT): READ(*,*) KOMANDA IF(KOMANDA .EQ. PRINT) THEN CALL PRINT ELSE IF(KOMANDA .EQ. READ) THEN CALL READ ELSE IF(KOMANDA .EQ. QUIT) THEN STOP Kraj programa ELSE WRITE(*,*) Pogresna komanda!!! END IF 2.5.2 Petlja - DO

Ponekad je potrebno da se odredjeni broj puta izvri neka operacija. Tada je s najzgodnije koristiti DO konstrukciju petlje. Opti oblik te petlje je DO i[labela], s [promenljiva]= [pocetna vrednost],[krajnja vrednost],[korak], pri emu [korak] c nije neophodan (podrazumeva se da je [korak] = 1). Takva konstrukcija izvrava s 10

blok instrukcija od same DO instrukcije do instrukcije sa labelom [labela]. Taj blok instrukcija ponavlja za sve vrednosti celobrojne promenljive [promenljiva] od [pocetna vrednost] do [krajnja vrednost]. Najee se taj blok instrukcija c sc zavrava praznom instrukcijom CONTINUE radi preglednosti. Evo primera koji s izraunava zbir svih kvadrata brojeva prvih N elemenata niza X: c C234567 REAL SUMA INTEGER I,N SUMA = 0.0 DO 10, I=1,N SUMA = SUMA + X(I)**2 10 CONTINUE 2.5.3 Bezuslovan skok - GO TO

Ako je potrebno bez ikakvih uslova skoiti na neku instrukciju, za to se koristi c GO TO instrukcija, iji je oblik GO TO [labela]. c 2.5.4 Kraj rada - STOP

Komandom STOP se zavrava rad programa i vraa se kontrola operativnom s c sistemu. Postoji i opcioni parametar (string) koji se ispisuje na ekranu pre kraja rada (videti primer za IF grananje).

11

Вам также может понравиться