You are on page 1of 46

SVEUILITE U SPLITU, GRAEVINSKO-ARHITEKTONSKI FAKULTET

UNIVERSITY OF SPLIT, FACULTY OF CIVIL ENGINEERING AND ARCHITECTURE


MB 3149463 Matice hrvatske 15; 21000 Split - HRVATSKA; fax: + 385 (0)21 465 117; tel: + 385 (0)21 303 333

KRATKE OSNOVE RADA S PROGRAMSKIM JEZIKOM

FORTRAN

Interni materijali Alen Harapin, oujak 2009.

Ovi radni materijali nastali su kao pomo pri jednom kratkom teaju (radionici) za programski jezik FORTRAN. Ovi materijali nemaju pretenziju davanja uvida u potpune mogunosti programskog jezika FORTRAN. U tom smislu itatelji se upuuju u dokumentaciju: Compaq Developer Studia, kao i niz knjiga koje postoje o ovom programskom jeziku. Izraeni primjeri i objanjenja vrijede za Compaq Developer Studio, ver 6.6.0. Neki primjeri koji su ovdje navedeni mogue nee raditi pod nekim drugim okruenjem. Takoer, u materijalima nisu spomenute neke mogunosti koje posjeduje moderni FORTRAN. Kolege koje se misle ozbiljnije posvetiti programiranju svakako se upuuje na izuavanje modernih programskih rjeenja. Takoer, u ovim materijalima navedeno je niz programskih rjeenja koji su zastarjeli i vie se ne koriste. Ovo je iskljuivo iz razloga to Graevinski fakultet u Splitu ima dugu tradiciju programiranja u ovom jeziku s poecima sa standardom FORTRAN IV na raunalima PDP i VAX. Dio kdova s ovih raunala jo je prisutan u praksi, efikasan je i nema veih problema pri njihovom kompajliranju i linkanju. Autor

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Sadraj 1.
1.1

stranica

UVOD .....................................................................................................................................................5
O FORTRAN-u ...................................................................................................................................................................... 5

2.
2.1 2.2 2.3 2.4 2.5 2.6 2.7

Rad u integriranom okruenju: Compaq Developer Studio (ver. 6.6.0)............................................6


Kreiranje radnog okruenja.................................................................................................................................................... 6 Kreiranje datoteke s izvornim kodom programa .................................................................................................................... 7 Kompajliranje, linkanje i izvravanje programa...................................................................................................................... 8 Upozorenja i greke............................................................................................................................................................... 8 Kompatibilnost ..................................................................................................................................................................... 10 Release i debug mod........................................................................................................................................................... 10 Traenje greaka (debugiranje)........................................................................................................................................... 11

3.

Tipovi podataka u FORTRANU ..........................................................................................................12


3.1 Pohrana podataka u raunalu.............................................................................................................................................. 12 3.2 Osnovni tipovi podataka....................................................................................................................................................... 12 3.2.1 Tip CHARACTER ...................................................................................................................................................... 12 3.2.2 Tip INTEGER ............................................................................................................................................................ 13 3.2.3 Tip REAL ................................................................................................................................................................... 14 3.2.4 Konverzija tipova varijabli.......................................................................................................................................... 14 3.2.5 Tip LOGICAL............................................................................................................................................................. 15 3.2.6 Tip COMPLEX........................................................................................................................................................... 15 3.2.7 Nepromjenjive konstante........................................................................................................................................... 15 3.3 Izvedeni (sloeni) tipovi podataka........................................................................................................................................ 16 3.4 Vektori i Matrice (nizovi podataka)....................................................................................................................................... 16 3.4.1 Openito .................................................................................................................................................................... 16 3.4.2 Agregatne operacije .................................................................................................................................................. 17 3.4.3 Matrini raun............................................................................................................................................................ 17 3.5 Dinamiko zauzimanje memorije (dinamiko alociranje) ..................................................................................................... 17 3.6 Zajedniko memorijsko podruje COMMON blok i MODULE........................................................................................... 18

4.
4.1 4.2 4.3

Strukturiranje programa.....................................................................................................................20
Pravilo o strukturi programa................................................................................................................................................. 20 Konvencija o imenima varijabli............................................................................................................................................. 20 Komentari i aliniranje ........................................................................................................................................................... 21

5.

Kontrola toka programa .....................................................................................................................22


5.1 Grananje programa.............................................................................................................................................................. 22 5.1.1 Uvjetna naredba grananja: IF.................................................................................................................................... 22 5.1.1.1 Logika IF naredba............................................................................................................................................. 22 5.1.1.2 Blok IF naredba.................................................................................................................................................. 22 5.1.1.3 Arihmetika IF naredba - zastarjeli oblik IF naredbe .......................................................................................... 23 5.1.2 Uvjetna naredba grananja: CASE ............................................................................................................................. 23 5.1.3 Bezuvjetna naredba grananja: GOTO....................................................................................................................... 24 5.2 Petlje.................................................................................................................................................................................... 24 5.2.1 Petlja s kontrolnim parametrom................................................................................................................................. 24 5.2.2 DO-WHILE petlja....................................................................................................................................................... 25 5.2.3 Beskonana DO petlja............................................................................................................................................... 25

6.

Formatirani ispis podataka i rad s datotekama................................................................................25


6.1 Openito .............................................................................................................................................................................. 25 6.2 Naredba FORMAT............................................................................................................................................................... 26 6.2.1 Ispis cijelih brojeva .................................................................................................................................................... 26 6.2.2 Ispis logikih varijabli................................................................................................................................................. 27 6.2.3 Ispis niza znakova ..................................................................................................................................................... 27 6.2.4 Ispis realnih varijabli .................................................................................................................................................. 27 6.2.5 Posebni znakovi pri formatiranju ispisa ..................................................................................................................... 28 6.2.6 Ostale korisne napomene pri formatiranju ispisa ...................................................................................................... 28

Kratke osnove rada s programskim jezikom FORTRAN

str. 3

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

6.3 6.4 6.5 6.6

Naredbe OPEN i CLOSE .....................................................................................................................................................28 Naredbe WRITE i READ ......................................................................................................................................................29 Ostale naredbe za upis i ispis ..............................................................................................................................................30 Pisanje u niz znakova i itanje iz niza znakova....................................................................................................................31

7.
7.1 7.2 7.3 7.4

Funkcije i Subrutine............................................................................................................................32
Openito...............................................................................................................................................................................32 Funkcije (FUNCTIONS) .......................................................................................................................................................32 Subrutine (SUBROUTINE)...................................................................................................................................................33 O nainu razmjene varijabli..................................................................................................................................................33

8.

PRIMJER Programsko rjeenje: Ravninski tapni sustavi...........................................................38


8.1 Teorijske postavke ...............................................................................................................................................................38 8.1.1 Jednadba ravnotee.................................................................................................................................................38 8.1.2 Diskretizacija sustava i bazne funkcije.......................................................................................................................38 8.1.3 Formulacija principom virtualnog rada.......................................................................................................................39 8.1.4 Otputanje veza na rubovima elemenata ..................................................................................................................39 8.1.5 Ravnotea globalnog sustava....................................................................................................................................39 8.2 Kreiranje novog projekta ......................................................................................................................................................40 8.3 Tok programa.......................................................................................................................................................................41 8.4 Osnovne (globalne) varijable................................................................................................................................................42 8.5 Uitavanje ulaznih podataka iz datoteke Subroutine INPUT() ..........................................................................................44

Kratke osnove rada s programskim jezikom FORTRAN

str. 4

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

1.
1.1

UVOD
O FORTRAN-u

Fortran (FORmula TRANslation) je najstariji tzv. vii programski jezik. Sintaksa je vremenom mijenjana i propisana je nizom standarda, koji su donoeni u razmacima od 10 ili vie godina. Poznati standardi su: fortran II (1958.) fortran IV (1961.), fortran66 (1966.), fortran77 (1977.), fortran90 (1990.), fortran95 (1995.), Velika razlika u sintaksi nastaje izmeu Fortrana77 i Fortrana90. Razliiti standardi se obino razlikuju prema nastavku (eksenziji) imena datoteke, pa tako nastavke .f90 imaju datoteke koje sadre izvorni kod u Fortranu-90, a nastavke .for ili .f imaju datoteke koje sadre izvorni kod u Fortranu-77 ili ranijim verzijama. Kako je naglaeno, osnovna razlika Fortranskih standarda je u sintaksi zapisa, pa tako Fortran 77 (i nie) koristi fiksni format zapisa programa sa sljedeim ogranienjima: U jednoj liniji smije biti samo jedna naredba; Mjesta 1-5 u retku se koriste za labele; Popunjeno 6. mjesto indicira da je linija nastavak fortranske naredbe iz prethodne linije; Mjesta 7-72 rezervirana za pisanje fortranskih naredbi; Preko 72 mjesta je zabranjeno pisati. Razlika od Fortrana 90 prema novijim verzijama je sljedea: Mjesta 1-6 nisu rezervirana; Naredba u liniji moe biti vrlo dugaka; Nastavljanje naredbe u sljedei red vri se s ampersand-om (&) na kraju; Na istoj liniji moe biti vie naredbi, a meusobno su razdvojene s toka-zarezom (;); Posjeduje naredbe za rad s vektorima i matricama; Dinamiko rezerviranje memorije (velike matrice i vektori). PRIMJER: FORTRAN77
c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello write (*,*) Pozdrav i mir cijelom & svijetu goto 100 print *,ovo nece biti ispisano 100 continue end program

PRIMJER: FORTRAN90
Program hello write (*,*) Pozdrav i mir cijelom & svijetu write (*,*) svim bicima ; write (*,*) u svemiru i okolici ! End program

Fortran 90 prepoznaje kd pisan u Fortranu 77 ili ranijim verzijama i uredno ih kompajlira i linka. Sitne nekompatibilne razlike kompajler prijavi i lako ih je ispraviti i doraditi. Obrnuti sluaj ne vrijedi.

Kratke osnove rada s programskim jezikom FORTRAN

str. 5

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

2.
2.1

Rad u integriranom okruenju: Compaq Developer Studio (ver. 6.6.0)


Kreiranje radnog okruenja

Developer studio pokree se kao i svaka druga Windows aplikacija. Nakon pokretanja pojavljuje se inicijalni ekran. Svaka aplikacija koja se razvija putem ovoga okruenja mora biti integrirana u Radno okruenje (Workspace). Stvaranje novog okruenja vri se izborom sa Menija: File New

Nakon pokretanja ove opcije pojavljuje se novi prozor u kojem je mogue odabrati tip aplikacije koju mislimo razvijati. Prozor s imenom budueg projekta

Lokacija budueg projekta


NAPOMENA: Prilikom upisa imena projekta automatski se stvara poddirektorij s istim imenom

Prozor s izborom tipa aplikacije Tip akplikacije moe biti: Konzolna aplikacija (standardni DOS program), Windows aplikacija, Statika biblioteka, Dinamika biblioteka (Dynamic Link Library) i sl. Upisivanjem imena projekta (npr. Program1) i izbora lokacije gdje e se taj program nalaziti kreiramo novo Radni okruenje (Workspace).

Radno okruenje je jo uvijek prazno. Sad je potrebno kreirati datoteku s izvornim kodom programa.

Kratke osnove rada s programskim jezikom FORTRAN

str. 6

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

2.2

Kreiranje datoteke s izvornim kodom programa

Kreiranje datoteke s izvornim kodom programa vri se takoer preko Menija, opcijama: File New Tekui projekt

NAPOMENA: Ako je check-irano: Add to project, datoteka se automatski dodaje projektu

Ime datoteke

NAPOMENA: Ako je izabrano: Fortran fixed format source file, automatske se dodaje nastavak: .for.

Prozor s izborom tipa datoteke Nakon izbora ove opcije, datoteka Prog1.for se pojavljuje u sredinjem dijelu ekrana, a s lijeve strane je vidljivo da je i dodana projektu.

Sredinji dio ekrana radni prozor s datotekom Prog1.for u kojoj se ispisuje izvorni kd programa.
NAPOMENA: Datoteke s nastavkom .for ili .f spremne su za fortranski fiksni zapis. To je vidljivo i po zelenoj oznaci u 6. stupcu stupcu za nastavak.

Statusni prozor u kojem se nalaze podaci o projektu.

Prozor za poruke o grekama prilikom kompajliranja i linkanja.


NAPOMENA: Prilikom kodiranja (pisanja izvornog koda) dok nije potreban, moe se sakriti klikom na tipku Esc.

Ako je datoteka s izvornim kdom ranije kreirana, mogue ju je pridruiti programu desnim klikom mia dok se kursor nalazi u statusnom prozoru nad labelom Source files. Tada se otvara dodatni prozor u kojem je potrebno odabrati opciju: Add files to folder. Odabirom ove opcije otvara se standardni prozor za izbor datoteke. Dobra praksa je sve datoteke s izvornim kdom drati u istom direktoriju (folder-u).

Kratke osnove rada s programskim jezikom FORTRAN

str. 7

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

2.3

Kompajliranje, linkanje i izvravanje programa

Kompajliranje (eng. Compile prevesti), kako sama rije kae, predstavlja prevoenje izvornog kda (koji je napisan ljudima kolikotoliko razumljivim jezikom) na jezik raunala strojni jezik. Linkanje (eng. Link povezati) predstavlja povezivanje svih (kompajliranih) programskih modula (razliitih datoteka) u jedan jedinstven program. Naime, sam projekt se moe sastojati, kako e kasnije biti pokazano, od vie datoteka s izvornim kdom. Svaku je mogue kompajlirati zasebno, a linkanjem se sve one povezuju u jedinstvenu cjelinu Izvrni program (nastavak .exe). Kompajliranje svake pojedine datoteke s izvornim kdom moe se izvesti odabirom opcije: Build Compile (Ctrl+F7). Jednostavniji nain za formiranje izvrne (exe) datoteke, je izbor opcije: Build Build (F7).

Ako kompajler i linker nisu nali (sintaktike) greke u izvornom kodu, to e biti prikazano u prozoru za poruke, program je spreman za startanje. Izvravanje programa se provodi opcijom: Build Execute (Ctrl+F5). Rezultat izvrenja programa biti e prikazan u posebnom (DOS) prozoru.

Ako se izabere opcija: Build Execute (Ctrl+F5), prije kompajliranja i linkanja, program e se prvo prekompajlirati i linkati, a zatim i izvriti.

2.4

Upozorenja i greke

Nakon kompajliranja i linkanja u donjem prozoru se pojavljuje izvjetaj.Ako je sve u redu, tada izvjetaj glasi: Program1.exe - 0 error(s), 0 warning(s) Ako su prilikom kompajliranja ili linkanja pronaene greke, tada se u istom prozoru pojavljuje poruka o grekama. Kompajlerske greke su najee greke sintakse. Dvostrukim klikom na izvjetaj o greci vraamo se u glavni prozor, a s lijeve strane prozora se pojavljuje mala plava strelica koja upuuje na liniju u kojoj se greka nalazi.

Kratke osnove rada s programskim jezikom FORTRAN

str. 8

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Npr. u kdu u nastavku grekom je u etvrtom retku umjesto nule (DO I=1,100) upisano veliko slovo O (DO I=1.10O).
PROGRAM ZBRAJANJE INTEGER ZBROJ ZBROJ=0 DO I=1,10O ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

Prilikom kompajliranja, kompajler javlja poruku o greci. Dvostruki klik na tu poruku vraa nas u glavni prozor tono na etvrtu liniju.

No pogledajmo sljedei primjer. U kdu u nastavku, grekom je u etvrtom retku umjesto zareza (DO I=1,100) upisana toka (DO
I=1.100). PROGRAM ZBRAJANJE INTEGER ZBROJ ZBROJ=0 DO I=1.100 ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

Greka koju kompajler generira ukazuje na 6. redak, a ne na redak gdje mi prividno smatramo da se greka dogodila. U stvarnosti kompajler, zbog toke, nije registrirao da se pojavila (DO) naredba, te se buni na pojavu (ENDDO) naredbe bez prethodne (DO) ili (DO WHILE). Kod izvjetaja kompajliranja/linkanja potrebno je strogo razlikovati greke (errors) od upozorenja (warnings). Kada se pojave greke kompajler/linker nee izraditi izvrnu (.exe) verziju i program se nee moi startati. Potrebno je tada ispraviti sve greke i ponovo prekompajlirati/linkati progam. Upozorenje (warning) samo napominje programeru da je neto sumnjivo u programu, ali e izraditi (.exe) verziju koja s moe startati. Najee i upozorenja predstavljaju neloginosti u programu i potrebno im je posvetiti dunu panju.

Kratke osnove rada s programskim jezikom FORTRAN

str. 9

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

2.5

Kompatibilnost

Izvrni (.exe) program nalazi se u podfolderu: Debug, foldera kojeg smo kreirali kao folder projekta. Taj izvrni program mogue je kopirati na CD, Memory stick ili slino i prebaciti na drugo raunalo koje radi na istoj platformi (DOS-DOS, Windows XP-Windows XP). Nije mogue (bar ne u svim sluajevima) prijenos izvrnog programa izmeu platformi (npr. izvrni program kreiran u Windows XP okruju prebaciti na klaster raunalo koje radi pod Linux-om). Meutim, kako je ranije naglaeno, mogue je prenijeti izvorni kd programa te ga ponovno prekompajlirati. Podrazumijeva se, naravno, da postoji instaliran kompajler/linker na tom drugom raunalu.

2.6

Release i debug mod

Izvrni (.exe) program napravljen je u tzv. Debug modu. Ovaj mod omoguava olakano debugiranje (eng.: debugging) tj. ispravljanje pogreaka u kdu. Kada je program u potpunosti gotov tada je mogue prijei na tzv. Release mod. Ovaj mod iskljuuje dodatne informacije u izvrnoj verziji (.exe) te stoga ima znatno manje bytova, tj. ostaje vie memorije za neposredni rad. Prijelaz iz jednog u drugi mod vri se odabirom opcija: Build Set Active Configuration Ne preporua se prijelaz u Release mod sve dok se program u potpunosti oisti od svih greaka (bug-ova). Kod manjih programa ovaj prijelaz nije ni potreban. Kd u nastavku pokazuje primjer standardne greke koju kompajler ne dojavljuje: drugi korijen iz negativnog broja.
PROGRAM KORIJEN REAL A, B A=-10. B=SQRT(A) PRINT *,' Korijen iz: ',A,' je : ',B END

Kompajler/linker e uredno napraviti izvrni file, no prilikom izvrenja programa dolazi do greke (vidjeti sliku). Iako naizgled nije bitna razlika u izvjetaju, razlika jest bitna. U oba sluaja javlja se tip greke: sqrt: DOMAIN Error (Kvadratni korijen Greka u domeni), u prvom sluaju kompajler nam tono javlja liniju gdje je ta greka nastala, dok u drugom sluaju toga nemamo.

Kratke osnove rada s programskim jezikom FORTRAN

str. 10

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Program u Debug modu:

Program u Release modu:

2.7

Traenje greaka (debugiranje)

Ovdje pod pojmom traenja greaka ne mislimo na greke koje prijavljuje kompajler (iako ponekad i takve greke treba debugirati), ve na sutinske greke koje nastaju tokom izvrenja programa i pri kojima program uredno radi ali daje krive rezultate. U nastavku e se spomenuti samo tehnika traenja greaka dok e vie rijei o tome biti kroz primjer. Kada je program kompajliran/linkan u Debug modu (i samo u Debug modu) tada je mogue program izvravati liniju po liniju. Ovo se postie odabirom opcije: Build Start Debug Go (F5). Tehnike upravljanja procesom Debugiranja sortirane su u tablici s kratkim objanjenjem ikone. Ikona Hint
Restart Stop debugging Step Into Step Over Step Out Run to Cursor Execute Program Go Remove All Breakpoints Insert/Remove Breakpoints

Namjena
Prekida program, ponovno kompajlira i linka i ponovno pokree program Prestanak debugiranja prekida program i vraa se u glavni prozor s kodom Ako je trenutna linija izvrenja programa poziv subrutine ili funkcije program ulazi u nju i zaustavlja se na prvoj izvrnoj naredbi unutar subrutine/funkcije. Ako je trenutna linija izvrenja programa poziv subrutine ili funkcije program je izvrava i zaustavlja se na sljedeoj liniji nakon poziva. Ako je trenutna linija izvrenja programa unutar subrutine ili funkcije program je izvrava do kraja, izlazi iz nje i zaustavlja se na sljedeoj liniji nakon poziva. Program se izvrava sve do trenutne pozicije kursora. U sluaju da naie na Prekidnu toku (Brek Point) zaustavlja se na njoj. Startanje programa. Ovim se starta program u izvrnom modu. Startanje programa. Ovim se starta program u debug modu. Program se izvrava do prve Prekidne toke (Brek Point). Ako na nju ne naie onda se izvrava do kraja (isti efekt kao i opcije: Execute Program). Uklanjanje svih Prekidnih Toaka (Brekpoints). Sve toke se briu u svim datotekama koji pripadaju trenutno aktivnom projektu. Postavljanje ili uklanjanje Prekidnih Toaka (Brekpoints). Toka se postavlja u liniji na mjestu kursora. Puni crveni krug u sivoj traci skroz lijevo u glavnom prozoru ukazuje da je u toj liniji postavljena prekidna toka . Ako u toj liniji postoji ve Breakpoint tada se uklanja. Breakpoint se moe postaviti samo na izvrnim linijima, ne moe npr. na liniji komentara.

Nakon postavljanja Prekidnih toaka i startanja programa naredbom Go, Prozor u dnu ekrana se mijenja. U lijevom dijelu otvara se prozor sa svim varijablama, a u desnom tzv. Watch prozor u kojem se mogu pratiti eljene varijable. Klikom u Watch prozor i upisom imena pojedine varijable mogue je dobiti njenu trenutnu vrijednost.

Prozor u kojem su nabrojane sve varijable

Watch prozor

Kratke osnove rada s programskim jezikom FORTRAN

str. 11

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

3.
3.1

Tipovi podataka u FORTRANU


Pohrana podataka u raunalu

Podaci se u raunalu spremaju na memorijske lokacije u vidu bitova. Bit (eng. bit komadi, mali dio; oznaka: b) je najmanja jedinica za pohranu podataka i moe imati samo dvije vrijednosti: aktivno ili neaktivno, to se obino oznaava brojevima 0 i 1. Osam bitova sainjavaju 1 bajt (byte, oznaka: B). Vee jedinice su: Kilo bajt (Kilo Byte) 1 KB = 1024 byte (210 B) Mega bajt (Mega Byte) 1 MB = 1024 KB = 1 048 576 B (220 B) Giga bajt (Giga Byte) 1 GB = 1024 MB = 1 048 576 KB = 1 073 741 824 B (230 B) Itd.; Raunalno zapisanom podatku obino se moe pristupiti samo na nivou bajta (by), a ne na nivou bita. Dakle, prilikom pisanja ili itanja podataka moe se zapisati ili proitati samo puni bajt ili vie njih (2, 4, 8). Kada treba izdvojiti vrijednost nekog bita, onda se to radi tako da se izdvaja bit unutar skupine bytova koja se nalazi na toj i toj memorijskoj adresi u raunalu. U Fortranskom programu obino se definiraju imena varijabli, funkcija, procedura, programa Imena mogu sadravati: Slova a-z, A-Z. Nema razlike izmeu velikih i malih slova; podvuenu crtu (underscore): _; brojke: 0-9. Imena moraju poeti slovom (a-z, A-Z). Duina imena je obino ograniena na 31 znak (ogranienja kompajlera). Ime varijable ne smije biti kljuna rije, dakle ime ne smije biti: DO, IF, PROGRAM i sl. Ime varijable ne smije biti niti bibliotena funkcija (npr. SIN). Na raunalu nije mogue prikazati brojeve (cijele, realne) na nain kako ih se u matematici definira. Realni brojevi se spremaju s ogranienom tonou. Niti sve cijele brojeve nije mogue prikazati, jer jako veliki cijeli brojevi takoer trae veliki memorijski prostor. Stoga na raunalima postoji i ogranienje na veliinu brojeva.

3.2

Osnovni tipovi podataka

Osnovni tipovi varijabli u FORTRANU su, kao uostalom i u veini drugih programskih jezika: Karakterna varijabla (CHARACTER); Cjelobrojna varijabla cijeli broj (INTEGER); Logika varijabla (LOGICAL); Realna varijabla realni broj (REAL); Kompleksna varijabla kompleksni broj (COMPLEX);

3.2.1

Tip CHARACTER

Varijabla tipa CHARACTER zauzima 1 byte memorije i obino slui za prikaz znakova (slova, brojki, specijalnih znakova i sl.). Varijabla CHARACTER vezana je za tzv. ASCII cod. ASCII: American Standard Code for Information Interchange tj. Ameriki standardni znakovnik za razmjenu informacija, prvi put je objavljen 1967., a doraen je 1986. U kasnijoj inaici definira kodove za 33 veinom zastarjela kontrolna znaka koji djeluju na nain ispisa teksta, te 95 znakova za ispis teksta (poevi znakom razmaka) (33+95=128). Godine 1972. standard ISO-646 je definirao nain prilagoavanja nacionalnim abecedama, pa je tako inaica za hrvatsku abecedu danas poznata pod popularnim nazivom CROSCII. ASCII za kodiranje znakova koristi samo 7 bita (1. bit je kontrolni), ali se na njemu temelji i veina modernih znakovnika koji imaju vei raspon znakova od engleske abecede kao to su 8-bitni CP437, CP852, Windows-1250 i Windows-1252, te 16-bitni i 32-bitni Unicode. ASCII tablica:

01234567890123456789 ------------------------------30 OO !"#$%&()*+,-./01 50 23456789:;<=>? @ABCD 70 EFGHIJKLMNOPQRSTUVWX 90 YZ[\]_abcdefghijkl 110 mnopqrstuvwxyz{|}~OO

Kratke osnove rada s programskim jezikom FORTRAN

str. 12

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Definiranje karakterne varijable vri se naredbom CHARACTER. Pridjeljivanje znakovne vrijednosti karakternoj varijabli vri se na nain da se eljeni znak stavi u jednostruke navodnike. PRIMJER:
Program hello CHARACTER a a=a print *, Varijabla a = ,a end

Matrica karakternih varijabli predstavlja string. Vano je imati na umu da duina pridijeljenog teksta ne prijee broj rezerviranih znakovnih mjesta. O stringovima e biti rijei kasnije.
Program hello CHARACTER a(20) ! Stari nain deklaracije stringa CHARACTER (len=20) :: a ! Novi nain deklaracije stringa

3.2.2

Tip INTEGER

Varijabla tipa INTEGER predstavlja cjelobrojnu varijablu. Deklaracija ove varijable je sljedea:
INTEGER*1 i ! Stari nain INTEGER*2 i INTEGER*4 i ...... INTEGER (KIND=1):: i ! Novi nain INTEGER (KIND=2):: j INTEGER (KIND=4):: k INTEGER (KIND=8):: l INTEGER :: m ! ako KIND nije specificiran ! onda je (najee) KIND = 4

Rije KIND, tj. broj iza zvjezdice (kod starog naina) odreuje broj byte-ova koji se rezerviraju za varijablu. Ali taj broj ne moe biti proizvoljan nego su mogue vrijednosti zadane kompajlerom i hardware-om raunala. Maksimalni cijeli broj koji je mogue pohraniti u raunalu direktno je ovisan o broju rezerviranih bytova. Pa tako: INTEGER (KIND=1) : -128 do +127 INTEGER (KIND=2) : -32768 do +32767 INTEGER (KIND=4) : -2147483648 do +2147483647 INTEGER (KIND=8) : -9223372036854775808 do +9223372036854775807 Prvi bit u bajtu slui za prikaz predznaka (0: +; 1: -), a ostali za prikaz broja. Tako npr. Binarni Heksadecimalni Decimalni Binarni 00000000 00000000 0 00 00000000 00000000 10000000 65 41 01000001 00000001 00000000 127 7F 01111111 01000000 00000000 -128 80 10000000 10000000 00000001 -127 81 10000001 11111111 11111111 -1 FF 11111111 Binarni 0000 0001 0010 0011 0100 Heksadec. 0 1 2 3 4 Decimalni 0 1 2 3 4 Binarni 0101 0110 0111 1000 1001 Heksadec. 5 6 7 8 9 Decimalni 5 6 7 8 9 Binarni 1010 1011 1100 1101 1110 1111 Heksadecimalni 00 00 00 80 01 00 06 00 80 01 FF FF Heksadec. A B C D E F Decimalni 0 128 256 16384 -32768 -1 Decimalni 10 11 12 13 14 15

01100111 = (+ ) 1 26 + 1 25 + 0 2 4 + 0 23 + 1 22 + 1 21 + 1 20 = (+ )1 64 + 1 32 + 0 16 + 0 8 + 1 4 + 1 2 + 1 1 = 103
Compaq Developer Studio podrava cjelobrojne vrijednosti (INTEGER) od 2 ili 4 byte-a. Eksplicitno napisani cijeli broj, string ili realni broj u programu zovemo konstantom.

Kratke osnove rada s programskim jezikom FORTRAN

str. 13

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

3.2.3

Tip REAL

Varijabla tipa REAL predstavlja realnu varijablu ili konstantu. Deklaracija ove varijable je sljedea:
REAL*4 a ! Stari nain REAL*8 a ...... REAL (KIND=4):: a ! Novi nain REAL (KIND=8):: a REAL (KIND=16):: a REAL :: m ! ako KIND nije specificiran ! onda je (najee) KIND = 4

Rije KIND, tj. broj iza zvjezdice (kod starog naina), kao i kod cjelobrojnih varijabli, odreuje broj byte-ova koji se rezerviraju za varijablu. Taj broj, takoer, ne moe biti proizvoljan nego su mogue vrijednosti zadane kompajlerom i hardware-om raunala. Preciznost (KIND=16) podrava samo mali broj prevoditelja, ne i Compaq Developer Studio. Stari nain definiranja realne varijable s poveanom preciznou (REAL*8 a) je: DOUBLE PRECISION a Treba imati na umu da realni brojevi na raunalu nisu realni brojevi koji postoje u matematici. U matematici realni brojevi ine kontinuum. Za svaka dva, proizvoljno bliska, realna broja postoji realni broj koji se nalazi izmeu njih. Dapae, izmeu njih se nalazi beskonano mnogo realnih brojeva. Na raunalu to nije tako. To je zbog toga to na raunalu prikazujemo realni broj s konanim brojem byte-ova. Tipino koristi se 4 ili 8 byte-ova. Izmeu realnih brojeva na raunalu postoji razmak, a izmeu dva susjedna NEMA drugih realnih brojeva. Ovaj je razmak ujedno numerika greka koju inimo prikazujui neki pravi realni broj (u principu s beskonanim brojem decimala) pomou konanog broja byte-ova na raunalu. Stoga, numerike operacije s realnim brojevima na raunalu pate od greaka. Te greke se ponekad mogu akumulirati, i tako dovesti do velikih nepredvidivih greaka u konanom rezultatu. Raunalo realni broj sprema na sljedei nain: Od ukupnog broja bitova, jedan bit (onaj najvii) se koristi za oznaku predznaka. Ako je on jednak 1, radi se o negativnom broju. Jedan broj bitova se koristi za binarni prikaz eksponenta. Ostatak slui za prikaz decimala. Broj bitova namjenjen za prikaz eksponenta i za broj decimala standardiziran je. Postoje ovi standardi: Jednostruka preciznost. Ukupno se koriste 32 bita (4 byte-a): 1 bit - predznak 24 bita - frakcija (decimale) (jedan bit je implicitan) mogu se zapisati 8 bita - eksponent (jedan bit za predznak eksponenta) Dvostruka preciznost. Ukupno se koriste 64 bita (8 byte-a): 1 bit - predznak 53 bita - frakcija (decimale) (jedan bit je implicitan) 11 bita - eksponent (jedan bit za predznak eksponenta) Za oznaavanje ekponenta realne konstante u jednostrukoj preciznosti koristimo slovo E (npr. 1.0E-5). Za oznaavanje ekponenta realne konstante u dvostrukoj preciznosti koristimo slovo D (npr. 1.0D+50). Operacije koje se mogu provoditi nad realnim brojevima su standardne matematike operacije: zbrajanje (+), mnoenje (*), oduzimanje (-), dijeljenje (/) i potenciranje (**). Takoer je mogue provoditi i operacije pretvaranja: cijeli broj INT(a) i realni broj a REAL(i)

3.2.4

Konverzija tipova varijabli

Kod operacija koje sadre cijele i realne brojeve, cijeli brojevi se automatski konvertiraju u realne, a rezultat se automatski konvertira u tip podatka koji stoji na lijevoj strani znaka jednakosti. U izrazima koji sadre samo cijele brojeve i rezultat je cijeli broj koji se potom pretvara u vrst podatka na lijevoj strani znaka jednakosti. Stoga u sljedeem primjeru dobivamo nulu: na desnoj strani izraz sadri samo cijele brojeve i rezultat je cijeli broj (tj.

Kratke osnove rada s programskim jezikom FORTRAN

str. 14

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

nula) koja se potom konvertira u realni broj na lijevoj strani. Ako se u izraz na desnoj strani umijea realna konstanta, onda se cijeli brojevi prvo pretvaraju u realne, a tek onda se izvode numerike operacije.
PROGRAM konverzija REAL a a = 1/(1 + 1) PRINT *,a a = 1.0/(1 + 1) PRINT *,a END PROGRAM

! ispisuje: 0.0000000E+00 ! ispisuje: 0.5000000

3.2.5

Tip LOGICAL

Logiki podaci imaju dvije vrijednosti: istinu ili la (true or false). Deklaracija logike varijable vri se naredbom:
LOGICAL a,b

Operacije s logikim tipovima podataka su: .NOT. a pretvara istinu u la i obrnuto a .AND. b i (and) istinito ako su i a i b istiniti a .OR. b ili (or) istinito ako su a ili b istiniti a .XOR. b ekskluzivni ili istina ako je samo jedan istinit a. EQV. b istinito ako su oba ista

3.2.6

Tip COMPLEX

Fortran je jedan od rijetkih jezika koji ima kompleksni broj kao standardnu varijablu (ostali imaju kao eksterne funkcije). Kompleksni brojevi na raunalu se prikazuju par realnih brojeva koji se posebno tretiraju u numerikim operacijama. Pri tome realni brojevi mogu biti jednostruke ili dvostruke ili preciznosti.
COMPLEX (KIND=4) :: c,d,e c = (1.0,-5.3) d = CMPLX(-2.0) ! (-2.0,0.0) e = CMPLX(0.0,1.0) ! (0.0,1.0) d = e*d ! (0.0,-2.0) PRINT *,d

Iz kompleksnog broja moemo izdvojiti realni dio i imaginarni dio s funkcijama REAL i AIMAG, a konjugirani kompleksni broj dobiva se funkcijom CONJG.
COMPLEX (KIND=4) :: c REAL (KIND=4) :: a,b c = (1.0,-5.3) a = REAL(c) ; PRINT *,a b = AIMAG(c); PRINT *,b d = CONJG(c)

! 1.0 ! -5.3

3.2.7

Nepromjenjive konstante

Na poetku programa mogue je zadati posebnu vrstu podataka koji e za cijelo vrijeme izvoenja programa ostati konstante. Ovi konstantni podaci se zadaju kroz naredbu PARAMETER. Pokuaj promijene vrijednost parametra prevodilac e javiti kao greku.
INTEGER, PARAMETER :: single = KIND(1E0) INTEGER, PARAMETER :: double = KIND(1D0) REAL(single), PARAMETER :: spi = 3.1415927 REAL(double), PARAMETER :: dpi = 3.141592653589793 REAL(double), PARAMETER :: dpi2 = 0.5*dpi CHARACTERS(LEN=4), PARAMETER :: ime =Pero

Kratke osnove rada s programskim jezikom FORTRAN

str. 15

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

3.3

Izvedeni (sloeni) tipovi podataka

Sloeni tipovi podataka izvode se iz osnovnih tipova podataka. Postoje dva naina definiranja sloenih tipova podataka: preko naredbe STRUCTURE END STRUCTURE i preko naredbe TYPE END TYPE. Sloeni tipovi podataka slue da bi se svi podaci o jednom objektu drali na jednom mjestu. Tako npr. moemo promatrati poloaj nekog vora u prostoru koji je odreen s njegove tri kartezijeve koordinate. Pri tome moemo definirati tri polja koji uvaju podatke o koordinatama ili jedno dvodimenzionalno polje. Npr.
REAL COORD_X(Npoin), COORD_Y(Npoin), COORD_Z(Npoin) REAL COORDS(Npoin,3)

Umjesto ovog pristupa moemo koristiti sloeni tip podataka, tzv. strukturu ili objekt:
TYPE Koordinate REAL x,y,z END TYPE Koordinate TYPE(Koordinate) :: v1,v2 v1%x = 1.0 v1%y = 1.0 v1%z = 1.0 v2 = Koordinate(-1.0,0.0,5.0) PRINT *,v1 ! 1.0 1.0 1.0 PRINT *,v2 ! -1.0 0.0 5.0 STRUCTURE /Koordinate/ REAL x,y,z END STRUCTURE RECORD /Koordinate/ v1,v2 v1.x = 1.0 v1.y = 1.0 v1.z = 1.0 v2 = Koordinate(-1.0,0.0,5.0) PRINT *,v1 ! 1.0 1.0 1.0 PRINT *,v2 ! -1.0 0.0 5.0

U oba sluaja rezultat je identian. Izvedeni tipovi podataka mogu se gnijezditi jedan u drugog, pa je tako mogue definirati npr. strukturu trokut koja sadri strukturu koordinate:
PROGRAM Linija STRUCTURE /Koordinate/ ! definira strukturu koordinate REAL x,y,z END STRUCTURE STRUCTURE /Linija/ ! definira strukturu trokut RECORD /Koordinate/ Cvor(2) ! koja u sebi sadri strukturu Koordinate END STRUCTURE RECORD /Linija/ L1 L1.Cvor(1).x = 1.0 ! pridjeljivanje pojedinane vrijednosti L1.Cvor(1).y = 0.0 L1.Cvor(1).z = 2.0 L1.Cvor(2) = Koordinate (4.0,5.0,3.0) PRINT *,' Linija od:',L1.Cvor(1),' do: ',L1.Cvor(2) END PROGRAM

3.4
3.4.1

Vektori i Matrice (nizovi podataka)


Openito

Nizovi podataka, tj. Vektori (jednodimenzionalna polja) i Matrice (arrays viedimenzionalna polja) deklariraju se ako da se nakon tipa i imena navede njihova dimenzionalnost. Npr. sljedei dio koda rezervira 120 mjesta za spremanje cjelobrojnih varijabli, 120130 mjesta za spremanje realnih varijabli jednostruke preciznosti i 240 mjesta za spremanje realnih varijabli dvostruke preciznosti.
INTEGER a(120) REAL*4 b(120,130) REAL*8 c(240)

U starijim Fortran programima mogue je nai funkciju DIMENSION, koja postie isti uinak. U sljedeem primjeru naredbom DIMENSION biti e rezervirano 120 mjesta, ali za spremanje realnih varijabli jednostruke preciznosti (Vidi dalje dio: Konvencija o imenima varijabli). Ako je zadana naredba: IMPLICIT NONE, tada e kompajler dojaviti poruku o greci.
DIMENSION a(120)

Prema novoj konvenciji pisanja Fortran programa takoer se pri deklariranju koristi naredba DIMENSION. Sljedea sintaksa vrijedi samo za Fortran 90 i vie verzije
INTEGER, PARAMETER :: n=3 REAL, DIMENSION(n,n) :: a a = 0.0 ! svi a(i,j) = 0.0
Kratke osnove rada s programskim jezikom FORTRAN str. 16

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

a a a a a

= = = = =

a + 1 2*a SQRT(a) SIN(a) a*a

! ! ! ! !

svi a(i,j) = 1.0 svi a(i,j) = 2.0 Vadi korijen iz svih elemenata Izracunava sinus iz svih elemenata kvadrira svaki element

Dakle kada se navede samo ime niza (vektora/matrice) umerike operacije primjenjuju se svakom pojedinom lanu niza, a rezultat se sprema u niz na lijevoj strani znaka jednakosti. U Fortranu 77 bilo je potrebno koristiti DO-petlje da bi se postigao isti rezultat. U Fortranu matrica se u memoriji raunala sprema po stupcima tj. po prvom indeksu.
REAL, DIMENSION(3,3) :: a

U memoriju se sprema: a(1,1), a(2,1), a(3,1), a(1,2), a(2,2). a(3,3) U strukturi matrice ne postoji poseban podatak koji govori o obliku matrice. Ako se matrica koristi kao jedan od argumenata u pozivu nekoj funkciji ili potprogramu, onda je potrebno dodatno navesti i dimenziju matrice, odnosno njen oblik. Npr. ako je argument matrica 3x3, funkcija (potprogram) ne zna da li je to 9x1, 3x3 ili 1x9 matrica

3.4.2

Agregatne operacije

Agregatna operacija = operacija na nizu podataka koja kao rezultat ima jedan broj. Primjer:
REAL, REAL, REAL, PRINT PRINT PRINT PRINT PRINT PRINT DIMENSION(3) :: a = (/ (REAL(i), i=1,3) /) DIMENSION(3) :: b = (/ (i**2 , i=1,3) /) DIMENSION(6) :: c = (/ ((i-2)**2,i=1,6) /) *,Broj elemenata = ,SIZE(a) *,Najveci element = ,MAXVAL(b) *,Najmanji element = ,MINVAL(c) *,Suma elemenata = ,SUM(a) *,Produkt elemenata = ,PRODUCT(b) *,Skalarni produkt = ,DOT_PRODUCT(a,b)

! ! ! ! !

3 9.0 0.0 6.0 36.0 ! 36.0

3.4.3

Matrini raun

Veina kompajlera sadri i funkcije za operacije s matricama. Pri tome valja biti oprezan (prouiti help) kako koristiti pojedine funkcije. Funkcija MATMUL mnoi matricu s matricom u matematikom smislu, za razliku od operacije mnoenja (*) koja mnoi element s elementom. Funkcija TRANSPOSE kao rezultat ima transponiranu matricu.
REAL :: fi = 0.25*3.1415927 REAL, DIMENSION(2) :: a = (/ 1.0, 0.0 /) REAL, DIMENSION(2) :: b REAL, DIMENSION(2,2) :: r r(1,1:2) = (/ COS(fi), SIN(fi) /) r(2,1:2) = (/ -SIN(fi), COS(fi) /) PRINT *,vektor a = ,a b = MATMUL(r,a) ! Rotacija za kut pi/4 PRINT *,vektor R*a = ,b b = MATMUL(r,b) ! Jos jedna rotacija PRINT *,vektor R*b = ,b PRINT *,R = ,r r = MATMUL(r,r) ! Matrica rotacije za 2*fi PRINT *,R*R = ,r

3.5

Dinamiko zauzimanje memorije (dinamiko alociranje)

Ponekad nije mogue unaprijed znati tonu duinu niza podataka koji e se rabiti u programu, pa se obino rezervira navie to se misli da e biti potrebno. S druge strane prevelika koliina rezervirane memorije moe usporiti program jer ona moe nadmaiti dostupni RAM na raunalu. U tim situacijama je zgodno koristiti mogunost naknadne rezervacije memorijskog prostora, za trenutak kada je podatak o koliini potrebne memorije poznat. Nizovi za koje e se memorijski prostor rezervirati naknadno deklariraju se s naznakom ALLOCATABLE. Memorija se rezervira s naredbom ALLOCATE a oslobaa se s naredbom DEALLOCATE

Kratke osnove rada s programskim jezikom FORTRAN

str. 17

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Matrica se ne smije rabiti prije rezervacije memorije, a to se moe provjeriti naredbom ALLOCATED. Umjesto brojke u zagradama se upisuje : (dvotoka).
PROGRAM analiza REAL, ALLOCATABLE::PODACI(:) INTEGER :: n REAL :: aver,sigma PRINT *,Upisi broj podataka; READ (*,*) n ALLOCATE (podaci(n)) PRINT *,Upisi podatke; READ (*,*) podaci(1:n) aver = SUM(podaci(1:n))/REAL(n) sigma = SQRT(SUM((podaci(1:n)-aver)**2 )/REAL(n-1)) PRINT *,prosjecna vrijednost = ,aver PRINT *,standardna devijacija = ,sigma DEALLOCATE (podaci) END PROGRAM

Primjer programa koji ita sa standardnog unosa (inputa) podatke te izraunava srednju vrijednost i standardnu devijaciju.

3.6

Zajedniko memorijsko podruje COMMON blok i MODULE

Programske cjeline (glavni program, potprogrami, funkcije,) mogu imati zajednike podatke uskladitene u COMMON bloku. Prije Fortrana 90 to je bio jednini nain kako je to bilo mogue postii. U Fortranu 90 preferirani nain uvanja zajednikih podataka su moduli. Common blok se zadaje s listom (prethodno deklariranih) varijabli koja slijedi iza naredbe COMMON. Izmeu liste varijabli i naredbe COMMON moe biti navedeno i ime common bloka zatvoreno izmeu dvije kose crte. Imenovanih common blokova moe biti proizvoljno puno, ali samo jedan bez imena. Common blok je globalni entitet, ne postoje common blokovi koji postoje samo unutar jedne programske cjeline. Jedna varijabla se ne moe pojavljivati u dva razliita common bloka. Varijable u common bloku zauzimaju memoriju raunala po redu kako su izlistane. Varijable u common bloku u razliitim programskim jedinicama mogu imati razliita imena ali moraju biti istog tipa. Dvije ili vie uzastopnih varijabli u common bloku koje su istog tipa mogu u drugoj programskoj jedinici initi niz.
INTEGER A, B, C(100) STRUCTURE /OPIS_CVORA/ INTEGER ICVOR REAL CX, CY END STRUCTURE RECORD /OPIS_CVORA/ CVOR(NNODE) COMMON /GEOM_1/ CVOR, A, B, C

Dinamiki alocirana matrica ne moe se nalaziti u COMMON bloku. U Fortranu 90 umjesto common bloka, preferirani nain uvanja zajednikih podataka izmeu razliitih programskih cjelina su Moduli (MODULE - globalne) programske cjeline. Moduli se moraju nalaziti prije poetka programa.
MODULE zajedno_smo_jaci IMPLICIT NONE INTEGER :: i,j REAL :: a REAL, DIMENSION(5) :: b END MODULE C----------------------PROGRAM zajednistvo USE zajedno_smo_jaci IMPLICIT NONE i = 1; j = 2 a = SQRT(2.0) b = 0.0 b(3) = 1.0 PRINT *,a,b a = SQRT(3.0) PRINT *,a END PROGRAM

Kratke osnove rada s programskim jezikom FORTRAN

str. 18

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Za razliku od common bloka: kod modula nije potrebno ponovo deklarirati tipove varijabli i zadati im imena. Varijable se mogu odmah koristiti s imenima kakva su im zadana u modulu. Upotrebu modula potrebno je odmah navesti kao prvu liniju u programskoj cjelini (USE). Osim podataka, moduli mogu sadravati i zajednike funkcije i/ili potprograme, te definicije novih tipova varijabli. Moduli mogu sadravati nizove naznaene kao ALLOCATABLE koji se inae ne mogu nalaziti u common bloku.

Programske cjeline koje koriste module mogu koristiti druga imena od onih specificiranih u modulu. To se postie dodatnim argumentima kod USE naredbe, gdje treba navesti: <novo_ime> => <staro_ime>.
USE zajednicki_podaci, novo => b

Programske cjeline ne moraju koristiti sve raspoloive podatke iz modula, ve samo dio njih izlistan iza naznake ONLY.
USE zajednicki_podaci, ONLY : a,b

Varijable, novi tipovi podataka, funkcije i podprogrami mogu se deklarirati javnim ili privatnim.
MODULE zajednicki podaci INTEGER, PRIVATE :: i,j REAL, PUBLIC :: a REAL, DIMENSION(5) :: b ! PUBLIC ! END MODULE

Ako podaci nisu eksplicitno naznaeni da su privatni onda su javni. Javni znai dostupni drugim programskim cjelinama koje koriste taj modul. Ako definicija modula zapoinje s PRIVATE onda su svi podaci po pretpostavci privatni, osim onih koji su eksplicitno naznaeni da su javni. Privatni podaci dostupni su svim funkcijama i potprogramima unutar modula, pa i onima koje su naznaeni kao javni. Uporaba privatnih podataka mogua je posredno kroz javno dostupne funkcije i potprograme.

Kratke osnove rada s programskim jezikom FORTRAN

str. 19

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

4.

Strukturiranje programa

Prilikom pisanja programa u Fortranu potrebno je potovati neka pravila strukturiranja programa. Neka pravila su stroga i ne smije se odstupiti od njih, dok su druga opcionalna, ali ih je dobro potivati.

4.1

Pravilo o strukturi programa

Fortranska struktura programa je strogo odreena. Fortranska struktura zahtijeva sljedee pravilo pisanja programa: Prva linija: Naredbe: PROGRAM, SUBROUTINE ili FUNCTION poetak programa ili potprograma 1. dio: deklaracija varijabli 2. dio: samo tijelo programa ili potprograma Npr. sljedei kd je dobro napisan kd:
PROGRAM ZBRAJANJE INTEGER I, ZBROJ ZBROJ=0 DO I=1,100 ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

Ime programa koji slijedi, ujedno oznaka i poetka programa Deklaracija varijabli Tijelo programa

Kraj programa Ime programa koji slijedi, ujedno oznaka i poetka programa Deklaracija varijabli u koje se umjeala jedna izvrna naredba (ZBROJ=0) Tijelo programa

Sljedei kd je loe napisan kd. Greku e javiti kompajler i program nee biti kompajliran.
PROGRAM ZBRAJANJE INTEGER ZBROJ ZBROJ=0 INTEGER I DO I=1,100 ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

Kraj programa

4.2

Konvencija o imenima varijabli

Jedno od opcionalnih pravila je, npr. pravilo o deklariranju varijabli. Fortran po default-u sve varijable koje zapoinju slovima I, J, K, L, M i N shvaa kao cjelobrojne varijable (INTEGER), dok su ostale varijable realne (REAL). Varijable ostalih tipova (CHARACTER, LOGICAL, COMPLEX) potrebno je eksplicitno deklarirati. Dobra praksa (ali ne i pravilo) je da se sve varijable deklariraju. Takoer dobra praksa je navoenje naredbe: IMPLICIT NONE prije samog deklariranja. Ova naredba zabranjuje upotrebu nedeklarirane varijable (kompajler javlja greku). Npr. sljedei dio koda:
PROGRAM ZBRAJANJE IMPLICIT NONE INTEGER I, ZBROJ ZBROJ=0 DO I=1,100 ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

javiti e greku jer varijabla (I) nije eksplicitno deklarirana. Bez naredbe (IMPLICIT NONE) program bi se uredno iskompajlirao i izvrio bez greke. U ovom sluaju (ovom jednostavnom programu) naredba (IMPLICIT NONE) ak nije ni potrebna. Meutim u sljedeem sluaju:
PROGRAM ZBRAJANJE INTEGER I,ZBROJ DO I=1,100 ZBROJ=ZBROJ+I ENDDO PRINT *,' Zbroj : ',ZBROJ END

Kratke osnove rada s programskim jezikom FORTRAN

str. 20

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Varijabla (ZBROJ) nije deklarirana niti ponitena. U etvrtom retku prilikom prvog koritenja uzima se vrijednost varijable (ZBROJ) i dodaje joj se (I). Kompajler e prilikom izvrenja moda javiti upozorenje (warning) ali nee prekinuti prevoenje programa. Program e se izvriti s nepredvidivim rezultatom1. Jedna dobra praksa je oznaavanje imena varijabli nazivima koji opisuju svrhu te varijable. Npr. u prethodno prikazanom kdu Varijabla ZBROJ oznaava zbroj svih brojeva (1-100). Potpuno funkcionalan bio bi i sljedei kd:
PROGRAM ZBRAJANJE INTEGER I,GFCD DO I=1,100 GFCD = GFCD+I ENDDO PRINT *, GFCD END

Ali njegov izlaz (ispis - varijabla GFCD) ne bi u potpunosti bila jasna.

4.3

Komentari i aliniranje

Komentari se u fortranu piu na nain da se u prvom stupcu (fiksni format) upie (tradicionalno) slovo C (comment) ili bilo koje drugo slovo. Kod slobodnog formata u tu svrhu slui usklinik (!). Usklinikom se moe sluiti i kod fiksnog formata kada se komentar eli postaviti u nastavku izvrne linije. Sav tekst koji slijedi iza biti e ignoriran od kompajlera i slui samo kao podsjetnik programeru Iako pisanje komentara esto predstavlja optereenje tijekom kodiranja, komentari su vrlo vani dijelovi programa. Oni pojanjavaju sami program i olakavaju itanje i razumijevanje programa, posebno drugim osobama koje nisu taj program kodirale. Pri pisanju komentara valja se ipak ograniiti na osnovne komentare, jer viak komentara moe proizvesti suprotan efekt.
PROGRAM analiza REAL PODACI(100) INTEGER n REAL aver, sigma PRINT *,Upisi broj podataka READ (*,*) n C*** Ako je N veci od rezervirane dimenzije - prekini IF (n >= 100) GOTO 100 C*** Citanje podataka s ekrana PRINT *,Upisi podatke READ (*,*) podaci(1:n) C*** Izracunaj srednju vrijednost (aver) i stand. Devijaciju (sigma) aver = SUM(podaci(1:n))/REAL(n) sigma = SQRT(SUM((podaci(1:n)-aver)**2 )/REAL(n-1)) PRINT *,prosjecna vrijednost = ,aver PRINT *,standardna devijacija = ,sigma 100 CONTINUE END PROGRAM

Takoer je zgodno pri programu zasebne cjeline (npr. DO petlje, deklaraciju varijabli) uvlaenjem nastojati vizualno odvojiti od samog tijela programa. Takvi programi su vizualno pregledniji i lake ih je itati i analizirati

U ovom sluaju vjerojatni rezultat e biti toan jer veina kompajlera ponitava sve varijable prije koritenja (izjednaava ih s nulom). Meutim, kod velikih programa rezultat je stvarno nepredvidiv.
str. 21

Kratke osnove rada s programskim jezikom FORTRAN

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

5.
5.1

Kontrola toka programa


Grananje programa

Tijekom izvravanja programa mogu se pojaviti razliite situacije koje je potrebno rjeavati na razliite naine. To se postie naredbama grananja. Npr. pri izraunu kvadratnog korijena potrebno je ispitati da li je broj pozitivan ili negativan prije samog izrauna korijena, te postupiti prema trenutnoj vrijednosti. Generalno se naredbe grananja mogu podijeliti na naredbe uvjetnog grananja (IF i CASE) i naredbe bezuvjetnog grananja (GOTO).

5.1.1
5.1.1.1

Uvjetna naredba grananja: IF


Logika IF naredba

U fortranskom programu postoji vei broj razliitih vrsta IF naredbi. Logiki IF je najjednostavnija IF-naredba, tj. naredba od samo jedne linije.
IF (a.LT.0.0) PRINT *,Imaginarni broj IF (a < 0.0) PRINT *,Imaginarni broj ! Stari nain ! Novi nain

Karakteristike logikog IF-a su sljedee: Iza rijei IF slijedi logiki izraz zatvoren u okrugle zagrade. Vrijednost logikog izraza je tono ili pogreno. Iza logikog izraza slijedi naredba koja se izvrava samo ako je logiki izraz toan. IF nema direktni utjecaj na izvravanje naredbi koje slijede iza njega. Znaenje A je jednako A nije jednako A je manje od A je manje ili jednako A je vee od A je vee ili jednako

Kao operatori usporedbe koriste se sljedei znakovi/izrazi (logiki operatori): Fortran 77 i nie verzije Fortran 90 i vie verzije .EQ. A.EQ.B == A==B .NE. A.NE.B <> A<>B .LT. A.LT.B < A<B .LE. A.LE.B <= A<=B .GT. A.GT.B > A>B .GE. A.GE.B >= A>=B Primjer jednostavnog programa s logikom IF naredbom:
PROGRAM kvadratni_korijen REAL :: a PRINT *,Upii neki realni broj READ (*,*) a IF (a < 0.0) PRINT *,Upisan je negativan broj IF (a >= 0.0) PRINT *,Kvadratni korijen je = ,SQRT(a) END

B B B B B B

5.1.1.2

Blok IF naredba
IF (a < 0.0) THEN PRINT *,Imaginarni broj ENDIF

Umjesto logikog IF-a, mogue se koristiti IF u kombinaciji s THEN. Primjer:

IF (logiki izraz) THEN zapoinje blok (skupinu) naredbi koja e se izvravati samo ako je logiki izraz toan, a ENDIF (ili END IF) je oznaka kraja bloka naredbi. Unutar bloka mogue imati ili jednu ili vie naredbi. U blok naredbi IF - THEN - ENDIF mogue je ugnjezditi jedan ili vie drugih IF - THEN - ENDIF blokova ili logikih IF-ova. Prethodni primjer bi se mogao proiriti na sljedei nain:
POGRAM kvadratni_korijen REAL :: a PRINT *,Upii neki realni broj READ (*,*) a IF (a < 0.0) THEN PRINT *,Negativni broj
Kratke osnove rada s programskim jezikom FORTRAN str. 22

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

END IF IF (a >= 0.0) THEN IF (INT(SQRT(a))**2 == a) THEN PRINT *,Upisani broj je kvadrat cijelog broja = ,INT(SQRT(a)) END IF IF (INT(SQRT(a))**2 /= a) THEN PRINT *,Kvadratni korijen je = ,SQRT(a) END IF END IF END

Jo sloenija forma IF naredbe (IF-THEN-ELSE-ENDIF) sastoji se od dva bloka. Prvi blok naredbi se izvrava ako je logiki izraz toan, a drugi ako je logiki izraz pogrean.
IF (a >= 0.0) THEN PRINT *,Kvadratni korijen je = ,SQRT(a) ELSE PRINT *,Zadan je negativni broj END IF

Svaki blok naredbi (IF-dio i ELSE-dio) mogu sadravati druge sloenije i jednostavnije verzije IF-naredbe. Prethodni primjer:
POGRAM kvadratni_korijen REAL :: a PRINT *,Upii neki realni broj READ (*,*) a IF (a .GE. 0.0) THEN IF (INT(SQRT(a))**2 .EQ. a) THEN PRINT *,Upisani broj je kvadrat cijelog broja = ,INT(SQRT(a)) ELSE PRINT *,Kvadratni korijen je = ,SQRT(a) END IF ELSE PRINT *,Zadan je negativni broj END IF END

Postoji i vrlo sloena forma IF naredbe koja moe provjeravati vie razliitih logikih izraza, te izvravati blok (skupinu) fortranskih naredbi ako je samo jedan od njih toan, te opcionalno ELSE grupu naredbi ako niti jedan od logikih izraza nije toan.
IF (a < 0.0) THEN PRINT *,Zadan je negativni broj ELSE IF ((a > 0.0) .AND. (a < 100.0)) THEN PRINT *,Kvadratni korijen broja ,a, je ,SQRT(a) ELSE PRINT *,Ne znam vaditi korjene brojeva vecih od 100 END IF

5.1.1.3

Arihmetika IF naredba - zastarjeli oblik IF naredbe

U pojedinim Fortranskim programima moe se pronai zastarjeli oblik IF naredbe, koju nije vie upitno koristiti iako je kompajleri jo uvijek prepoznavaju. Ovaj oblik naredbe IF naziava se arihmetika IF naredba i ima oblik:
IF (a) lab1,lab2,lab3

Ovisno o broju a, koji moe biti manji, jednak ili vei od nule izvravanje programa se nastavlja od lab1 (a<0), lab2 (a=0) ili lab3 (a>0). Prethodni primjer se moe napisati u obliku:
IF (a) 1,2,2 PRINT *,Zadan je negativni broj GOTO 3 2 PRINT *,Kvadratni korijen broja ,a, je ,SQRT(a) 3 CONTINUE 1

5.1.2

Uvjetna naredba grananja: CASE

CASE naredba je vrlo slina najsloenijem obliku IF naredbe, s tim da nije nuno da se izraunavaju logiki izrazi, ve to moe biti bilo koji izraz. U pojedinim sluajevima moe se navesti lista vrijednosti odvojena zarezom.

Kratke osnove rada s programskim jezikom FORTRAN

str. 23

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Mogue je navesti podruje vrijednosti pomou dvotoke. Ispred dvotoke stoji poetna vrijednost, a iza dvotoke stoji konana vrijednost intervala. Granice su ukljuene. Za navoenje polubeskonanog intervala moe se donja ili gornja granica ispustiti. Vrsta vrijednosti (konstanti) mora odgovarati vrsti izraza koji se navodi u poetnoj SELECT liniji CASE naredbe. Izvrava se jedna ili vie naredbi koje se nalaze u bloku koji slijedi iza CASE iskaza ovisno o vrijednosti izraza.
PROGRAM izbornik CHARACTER i PRINT *,Odaberi opciju izbornika; READ (*,*) i SELECT CASE (i) CASE (f,'F'); PRINT *,Odabrao si opciju: File CASE (e,'E'); PRINT *,Odabrao si opciju: Edit CASE (i,'I'); PRINT *,Odabrao si opciju: Insert CASE (w,'W'); PRINT *,Odabrao si opciju: Window ... CASE DEFAULT; PRINT *,Nema takve opcije! END SELECT END PROGRAM

S toka-zarezom odvojene su razliite fortranske naredbe na istoj liniji!

5.1.3

Bezuvjetna naredba grananja: GOTO


GOTO lab1

GOTO (ili GO TO) je bezuvjetna naredba grananja. Ima oblik: Nakon izvrenja ove naredbe program se nastavlja na labeli lab1. Primjer:
Program hello write (*,*) Pozdrav i mir cijelom svijetu goto 100 print *,ovo nece biti ispisano 100 continue end program

Nakon izvrenja naredbe GOTO program nastavlja radom na naredbi: 100 continue i tekst: ovo nece biti ispisano stvarno nee biti ispisano.

5.2

Petlje

Za viestruko ponavljanje grupe naredbi sluimo se petljama. U Fortranu petlja poinje s rjeju DO a zavrava s ENDDO (END DO). Postoji vie verzija DO-petlje: Petlja s kontrolnim parametrom; Petlja DO-WHILE koja se ponavlja dok je neki uvjet zadovoljen; Beskonana petlja.

5.2.1

Petlja s kontrolnim parametrom


DO I = poc,kraj,korak ! tijelo petlje ENDDO

DO petlja s kontrolnim parametrom (I) ima oblik:

Tijelo petlje se izvrava za svaku vrijednost kontrolnog parametra (I). Vrijednost kontrolnog parametra u prvom izvravanju je (poc). Pri svakom sljedeem izvravanju poveava se za (korak), sve dok je vrijednost I<kraj. Primjer zbrajanja samo parnih brojeva od 1 do 256, pomou DO petlje moe se napisati na nain:
PROGRAM Zbrajanje INTEGER I, ZBROJ ZBROJ=0 DO I = 2, 256, 2 ZBROJ = ZBROJ + I ENDDO PRINT *,Zbroj=,ZBROJ END

Kratke osnove rada s programskim jezikom FORTRAN

str. 24

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Za DO petlju vrijedi: Ako korak nije naveden onda se podrazumijeva da je on jedan. Ako je poetna vrijednost veca od konane, a korak je pozitivan petlja se ne izvodi. Ako je poetna vrijednost manja od konane, a korak je negativan petlja se ne izvodi. Unutar DO petlje mogu se nalaziti druge DO petlje ali se ne smiju preplitati (svaka unutarnja DO petlja mora zavriti prije vanjske). Takoer se DO petlju moe prisiliti na sljedei korak ili prisilno izai iz nje. Vrijedi: Naredba CYCLE prisiljava izvoenje slijedeeg koraka DO-petlje. Podrazumijeva se da se prelazi na sljedei korak najnie petlje ako je nekoliko DO petlji ugnjedeno. Naredba EXIT prekida izvoenje DO-petlje. Podrazumijeva se da se prekida najnia petlju ako je nekoliko DO petlji ugnjedeno. Naredni primjer zbrajat e brojeve samo dok je ZBROJ < 1000. Kada ZBROJ prijee 1000 izvriti e se IF naredba i petlja e biti nasilno prekinuta. Slijedi ispis i kraj programa.
PROGRAM Zbrajanje INTEGER I, ZBROJ ZBROJ=0 DO I = 2, 256, 2 ZBROJ = ZBROJ + I IF (ZBROJ > 1000) EXIT ENDDO PRINT *,Zbroj=,ZBROJ END

Stari oblik DO petlje s kontrolnim parametrom ima oblik:


DO 100 I = poc,kraj,korak ! tijelo petlje 100 CONTINUE

Ovaj oblik ima u potpunosti istu funkciju kao i novi oblik.

5.2.2

DO-WHILE petlja

DO WHILE-petlja nema kontrolni parametar, nego ponavljanje izvravanja je kontrolirano logikim izrazom. Standardna DO petlja: DO-WHILE petlja:
ZBROJ=0 DO I = 2,100,2 ZBROJ = ZBROJ + I ENDDO ZBROJ=0 I=2 DO WHILE (I <= 100) ZBROJ = ZBROJ + I I=I+2 ENDDO

5.2.3

Beskonana DO petlja

Beskonana DO nema kontrolnog parametara, niti kontrolni logiki izraz. Prestanak izvravanja preputen je naredbi EXIT koja se mora nalaziti negdje unutar petlje. Standardna DO petlja: Beskonana DO petlja:
ZBROJ=0 DO I = 2,100,2 ZBROJ = ZBROJ + I ENDDO ZBROJ=0 I=2 DO IF (I > 100) ZBROJ = ZBROJ + I I=I+2 ENDDO

6.
6.1

Formatirani ispis podataka i rad s datotekama


Openito

Fortran sadri cijeli niz naredbi za pisanje i itanje, kao i za formatirani unos i ispis. Podatke ispisujemo pomou PRINT i WRITE naredbi. Za Razlika izmeu PRINT i WRITE je da PRINT ispisuje na standardni izlaz (ekran), dok WRITE naredba moe ispisivati na razne ureaje, te broj moguih opcija i puno vei (vidjeti u nastavku). PRINT
Kratke osnove rada s programskim jezikom FORTRAN

WRITE:
str. 25

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

INTEGER :: a=1, b=2, c=3 PRINT *, a PRINT (i),b PRINT 100,c 100 FORMAT (i)

INTEGER :: a=1, b=2, c=3 WRITE (*,*) a WRITE (*,(i)) b WRITE (*,100) c 100 FORMAT (i)

Nain ispisa podatak moe se ostaviti nedefiniranim, nego ostaviti sustavu (prevoditelju) da ispie podatke na predefinirani nain za tu vrstu podataka. To je tzv. slobodni format ispisa.

6.2

Naredba FORMAT

Ispis podataka moe se zadati preko format instrukcija koje su dio PRINT/WRITE naredni ili se moe zadati preko FORMAT naredbe. Nema razlike izmeu jednog ili drugog naina. FORMAT naredbe je posebna u tome to to nije naredba koja se izvrava nego je vie informacija PRINT/WRITE naredbi. FORMAT naredba moe biti bilo gdje unutar programske cjeline, te ima jedinstvenu numeriku labelu pomou koje se naredbe PRINT/WRITE referiraju na nju. FORMAT naredba ima kao argumente listu slovnih oznaka kombiniranih opcionalno s brojkama (te jo nekim dodatnim znakovima) meusobno odvojenih zarezima. Svaki lan u listi odnosi se na jedan podatak u listi varijabli za ispis u PRINT/WRITE naredbi. Ove slovne oznake u FORMAT naredbi nazivamo ureivanje (eng. editing). Svaka vrsta podataka trai svoju posebnu specifikaciju ispisa, tj. svoje posebno ureivanje, osim slobodnog formata (oznaen zvjezdicom - *) koji se moe koristiti za ispis svih vrsta podataka.

6.2.1

Ispis cijelih brojeva


INTEGER :: i i = -1234 PRINT (i),i

Za ispis cijelih brojeva (INTEGER-a) u decimalnom ispisu, koristi se I format:

! -1234

Za ispis cijelih brojeva (INTEGER-a) u binarnom ispisu, koristi se B format:


INTEGER :: i i = -1234 PRINT (b),i

! 11111111111111111111101100101110

Za ispis cijelih brojeva (INTEGER-a) u heksadecimalnom ispisu, koristi se Z format:


INTEGER :: i i = -1234 PRINT (z),i

! FFFFFB2E

Iza oznake ureivanja, slova I, B i Z moe stajati broj koji je irina podruja unutar kojeg treba ispisati cijeli broj (npr. (I10)). Ako ispis broja ne stane u naznaenu irinu, ispisuju se zvjezdice. Ako je broj krai od naznaene irine, broj se ispisuje na desnom kraju s prazninom (ne raunajui predznak) ispred. Praznina ispred moe se popuniti s nulama ako iza naznaene irine se doda toka i dodatna brojka. Dodatna brojka oznaava minimalni broj znamenki u broju, raunajui i nule ispred. Obavezno ili opcionalno ispisivanje predznaka se posebno moe regulirati s ureivanjem.
i = 1234 PRINT (i3),i PRINT (i5),i PRINT (i10),i PRINT (i10.7),i PRINT (i16),i ! 123456789_123456789_ ! *** ! 1234 ! 1234 ! 0001234 ! 1234

Kratke osnove rada s programskim jezikom FORTRAN

str. 26

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

6.2.2

Ispis logikih varijabli


LOGICAL :: lll lll = .TRUE. PRINT (l),lll

Za ispis logikih varijabli koristi se L format:

! T

6.2.3

Ispis niza znakova

Za ispis niza znakova (stringa) koristi se A format. Iza a ureivanja moe doi opcionalno broj koji je irina podruja unutar kojeg se niz znakova ispisuje. Znakovi se ispisuju na lijevoj strani naznaene irine. Ako irina podruja nije dovoljna za ispis, ispisuje se onoliko znakova koliko stane u naznaenu irinu.
CHARACTER(len=20) :: str str = 9 znakova u stringu PRINT (a)',str PRINT (a8),str PRINT (a9),str PRINT (a11),str PRINT (a15),str PRINT (a20),str ! ! ! ! ! ! 9 9 9 9 9 9 znakova znakov znakova znakova znakova znakova u stringu u u str u stringu

Stari format ispisa niza znakova je H format (Hollerith format). U ovom formatu se ispisuje svaki znak posebno.

6.2.4

Ispis realnih varijabli


REAL A A=0.0191881 PRINT (f15.5)',A PRINT (e15.5),A PRINT (g15.5),A PRINT (en15.5),A PRINT (en15.5),A

Za ispis realnih brojeva (REAL-a) u decimalnom ispisu, koriste se F, E, G, EN i ES formati.


! 123456789_123456789_ ! 0.01919 ! 0.19188E-01 ! 0.19188E-01 ! 19.18807E-03 ! 1.91881E-02

Format F je normalni ispis. Prvi broj ispred toke oznaava ukupan broj mjesta rezerviran za ispis broja, a broj iza toke oznaava broj mjesta rezerviran za decimale. U prvi broj se broje i predznak, decimalna toka, eksponent i predznak eksponenta. Ako je broj koji se eli ispisati malen, biti e ispisane nule, a ako je velik ispisati e se zvjezdice.
REAL A A=.123E-12 PRINT (f15.5)',A A=.123E+12 PRINT (f8.2)',A ! 123456789_123456789_ ! 0.00000 ! ********

Format E je za znanstveni (eksponencijalni) ispis.Kao i kod F formata broj ispred toke oznaava ukupan broj mjesta rezerviran za ispis broja, a broj iza toke oznaava broj mjesta rezerviran za decimale. G format, u sluaju kada je broj normalne veliine ispisuje ga u F formatu, a ako je velik ili malen u E formatu
REAL A A=.123E-12 PRINT (e15.5)',A PRINT (g15.5)',A A=123.1 PRINT (e15.5)',A PRINT (g15.5)',A ! 123456789_123456789_ ! 0.12300-12 ! 0.12300-12 ! ! 0.12310+03 123.10

Kako je vidljivo na gornjem primjeru, iako broj 123.1 zapisuje u normalnom formatu, G format ostavlja 3 mjesta rezervirana za eksponent i predznak eksponenta, pa to treba uzeti u obzir prilikom dimenzioniranja formata. Takoer, treba imati na umu da kod realnih varijabli dvostruke preciznosti (KIND=8), eksponent se sastoji od tri znamenke. Kod E formata neeksponencijalni dio broja je izmeu 1.0 i 0.1 (broj uvijek ima oblik: 0.xxxx-yy). ES oznaava tz. znanstveno ureivanje, sve brojke se ispisuju tako da je neeksponencijalni dio broja manji od 10 a vei od 1. EN je tzv. inenjersko ureivanje, neeksponencijalni dio broja je manji od 1000 a vei od 1. Opcionalno mogue je regulirati broj znamenki u eksponentu (e20.5E3 - 3 znamenke za eksponent).

Kratke osnove rada s programskim jezikom FORTRAN

str. 27

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

6.2.5

Posebni znakovi pri formatiranju ispisa

Posebni znakovi slue nam za jo bolje kontroliranje ispisa. To su: x ureivanje - broj praznih mjesta $ ureivanje - ne prijei na novu liniju nakon ispisa / ureivanje preskae jednu liniju kod ispisa sp - u nastavku aktivirati ispisivanje znaka + gdje je inae opcionalan s - deaktivirati obavezno ispisivanje opcionalnog znaka + t ureivanje slui za pozicioniranje ispisa.

6.2.6

Ostale korisne napomene pri formatiranju ispisa

Brojke ispred ureivanja znae broj ponavljanja (npr. 5i10 znai: 5 puta po 10 mjesta za ispis cijelih brojeva). Zagrade se mogu koristiti za ponavljanje grupe ureivanja (npr. 2(i5,f10.5) znai: 2 puta po 15 mjesta, od toga prvih 5 za cijeli broj a drugih 10 za realni broj). Ako se ispisuje vei broj varijabli od zadanog broja ureivanja, ispisuje se onoliko varijabli koliko je zadano ureivanjem, a ostatak se ispisuje ponavljanjem cijele format naredbe ali na novim linijama. Ponekad je mogue koristiti varijabilno ureivanje (nije dio standarda).

6.3

Naredbe OPEN i CLOSE

Naredbe OPEN i CLOSE slue za otvaranje/zatvaranje komunikacije s vanjskim ureajima. Vanjskim ureajima se smatraju tvrdi disk, trana jedinica, konzola (terminal) s tipkovnicom. Rad s sloenim ureajima poput grafike konzole zahtijeva uporabu biblioteka ije naredbe nisu dio Fortrana kao jezika. Ureaji koji se automatski otvaraju kod pokretanja programa je konzola (ekran) s tipkovnicom. Konzola (ekran) se tretira kao ureaj za standardni ispis (pisanje). Ureaju je pridruen broj 6. Tipkovnica je ureaj za standardni upis (unos, itanje) i pridruen joj je broj 5. Ovo je napomenuto samo radi boljeg snalaenja u starijim programima (Fortran IV) koji su ovu konvenciju bezuvjetno potivali. Umjesto standardnih brojeva 5 i 6 praktino se posluiti zvjezdicom (*) koja zamjenjuje oba broja. Ovo e se u nastavku koristiti. Konzolu (ekran) i tipkovnicu ne treba posebno otvarati. Za rad s ostalim ureajima (prvenstveno datotekama) treba ureaju pridruiti broj ureaja koristei naredbu OPEN. Naredba OPEN ima veliki broj argumenata, od koji je obavezan broj ureaja. Broj ureaja je bilo koji prirodni broj, ali mora biti jedinstven u programu, tj. ne smije se ponoviti za neki drugi ureaj.
& OPEN([UNIT=]<cijeli_broj>, FILE=<ime_datoteke>, FORM=<string>, ERR=<labela>, STATUS=<status>, ACCESS=<metod>, ACTION=<nacin>, ...)

Argument [UNIT=]<cijeli_broj> specificira broj ureaja. Ime argumenta UNIT je opcionalno, tj. moe se ispustiti, to je naznaeno stavljanjem toga argumenta u uglate zagrade konvencija iz help-a. Argument FILE odreuje ime datoteke koja se otvara. Opcionalni argument FORM ima dvije vrijednosti: FORMATTED - Zapisi su ureeni i moe ih se itati. Ova vrijednost je pretpostavljena ako drugaije nije navedeno. UNFORMATTED - zapisi su u binarnom obliku. Argument STATUS govori o stanju ureaja, da li je stara ili nova datoteka. Mogue vrijednosti su: OLD - radi se o datoteci koja ve postoji. NEW - treba otvoriti novu datoteku. REPLACE - staru datoteku treba zamijeniti novom. SCRATCH - privremena datoteka koja e po zatvaranju biti izbrisana. UNKNOWN - Ako postoji otvara se kao OLD datoteka, a ako ne postoji onda kao NEW. Argument ACCESS specificira nain pristupa zapisima u ureaju. Postoje dvije mogunosti: SEQUENTIAL - za itanje ili pisanje liniju po liniju, DIRECT - za direktni pristup pojedinim zapisima uz pomo ID broja zapisa. U ovom sluaju je potrebno kod otvaranja navesti i duinu zapisa pomou opcionalnog argumenta RECL=duina_zapisa.

Kratke osnove rada s programskim jezikom FORTRAN

str. 28

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Argument ACTION navodi nau nakanu: itanje, pisanje ili oboje. Mogue vrijednosti su: READ - otvaramo ureaj samo za itanje, WRITE - otvaramo ureaj samo za pisanje, READWRITE - otvaramo ureaj za itanje i pisanje (pretpostavljena vrijednost). Argument ERR navodi broj labele u Fortranskom programu na koju treba ii ako doe do greke kod otvaranja ureaja. Opcionalni argument IOSTAT=<int_varijabla> pridjeljuje vrijednost cjelobrojnoj varijabli u sluaju greke. Iznos varijable indicira vrst greke. Ako IOSTAT ili/i ERR nisu prisutni u pozivu naredbe OPEN, greka kod otvaranja izazvat e prijevremeni zavretak programa. Ureaj zatvaramo naredbom CLOSE(<broj_ureaja>). Pri tome treba navesti broj ureaja koji se zatvara. Dodatni argument je STATUS s dvije mogue vrijednosti: 'KEEP' ili 'DELETE'.
PROGRAM Datoteka INTEGER :: ioerr OPEN(14, FILE=input.dat, STATUS=OLD, FORM=FORMATTED, & ACCESS=SEQUENTIAL, ACTION=READ, ERR=10, IOSTAT=ioerr) ................ READ(14,..) .... ................ CLOSE(14, STATUS=KEEP) 10 IF (ioerr>0) THEN WRITE (*,*) Greska kod otvaranja :,iostat STOP END IF END PROGRAM

6.4

Naredbe WRITE i READ


WRITE ([UNIT=]<cijeli_broj>, [FMT=]<ureenje>, IOSTAT=<int_var>, ERR=<labela>, ADVANCE=<yes,no>,...) lista_varijabli

Opa forma naredbe WRITE je:


&

Argument [UNIT=]<cijeli_broj> specificira broj ureaja (datoteke) s kojeg se ita.


IOSTAT i ERR argumenti slue za rukovanje izvravanjem programa u sluaju pojave greke. ADVANCE=<yes,no> odreuje prelazak ispisa na sljedei redak po zavretku.

Kod pisanja u UNFORMATTED ureaj format se ne specificira. Najee se kod naredbe WRITE koriste samo oznaka jedinice i oznaka formata. Opa forma naredbe READ je:
& & READ ([UNIT=]<cijeli_broj>,[FMT=]<ureenje>,ADVANCE=<yes,no>, IOSTAT=<int_var>,ERR=<labela>,END=<labela>,EOR=<label>, REC=<id_zapisa>,SIZE=<broj_znakova_var>) lista_varijabli

Veina argumenata ima standardno znaenje kao i kod naredbi OPEN, tj. WRITE. Osim njih kao dodatne opcionalne argumente imamo:
END=<labela>, koje imenuje broj labele na koju treba programa skoiti ako se pokua itati iza oznake kraja datoteke.

Argument EOR imenuje broj labele s koje se nastavlja izvravanje programa ako se pokua itati iza kraja zapisa datoteke. S argumentom REC navodi se broj zapisa kod direktnog itanja. Argument SIZE se koristi zajedno s argumentom ADVANCE i njime se imenuje varijabla koja sadri podatak koliko je znakova proitano. Kao i kod WRITE kod naredbe READ najee se koriste samo oznaka jedinice i oznaka formata.

Kratke osnove rada s programskim jezikom FORTRAN

str. 29

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

C SUBROUTINE INPUT CHARACTER*80 TEXT C C*** OTVARANJE ULAZNOG I IZLAZNOG FAJLA OPEN (UNIT=10,FILE='Input.dat',FORM='FORMATTED',STATUS='OLD',ERR=9990) OPEN (UNIT=11,FILE='Output.dat',FORM='FORMATTED') C C*** UCITAVANJE OSNOVNOG RETKA READ (10,'(A80)') TEXT WRITE (11,'(A10,A80)') ' Naslov: ',TEXT C C*** UCITAVANJE OSNOVNIH PARAMETARA MODELA READ (10,*) NELEM,NPOIN,NFIXE,NMATS WRITE (11,20) 20 FORMAT (//,' Broj stapova : ',I5, & ' Broj cvorova : ',I5, & ' Broj pridrz. cvorova : ',I5, & ' Broj materijala : ',I5) C C*** UCITAVANJE KOORDINATA CVOROVA WRITE (11,30) WRITE (11,31) DO I=1,NPOIN READ (10,*) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY, & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3) WRITE (11,32) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY, & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3) ENDDO 30 FORMAT (/,/,' CVOR X Y PRIDRZ') 31 FORMAT ( '---------------------------------------------') 32 FORMAT (I5,2F14.3,5X,3I3) ................ C...itd.......... ................ GOTO 9999 9990 WRITE (*,'(/,A40)') ' Nepostojeca ulazna datoteka!' C 9999 CONTINUE RETURN END

6.5

Ostale naredbe za upis i ispis

Ostale Fortranske naredbe za rad s datotekama su: Naredba BACKSPACE (UNIT=8) kod sekvencijalnog itanja pozicionira itanje/pisanje na poetak prethodnog zapisa. Dodatni argumenti su ERR i IOSTAT. Naredba REWIND (UNIT=8) pozicionira itanje/pisanje na poetak datoteke (sekvencijalni upis/ispis). Dodatni argumenti su ERR i IOSTAT. Naredba ENDFILE (UNIT=8) stavlja oznaku kraja datoteke kod sekvencijalnog pisanje. Dodatni argumenti su ERR i IOSTAT. Podatak o statusu ureaja ili datoteke mogu se saznati pomou naredbe INQUIRE (FILE=<datoteka>,...) ili INQUIRE
(UNIT=...). Osim ERR i IOSTAT postoji i niz drugih argumenata.

Kratke osnove rada s programskim jezikom FORTRAN

str. 30

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

6.6

Pisanje u niz znakova i itanje iz niza znakova

Ako neka varijabla tipa niza znakova ima vrijednost cijelog (ili realnog) broja, ili niza brojeva, te se vrijednosti mogu uitati u cjelobrojne (ili realne) varijable koritenjem READ naredbe. Pri tome se umjesto broja ureaja navodi ime string varijable.
CHARACTER(LEN=10) :: ch = 12345 INTEGER :: i READ (ch,(i)) i

Isto tako, nizu znakova moemo zadati vrijednost koja se dobije ureenim ispisom realnih ili cjelobrojnih brojeva uporabom WRITE naredbe. Umjesto broja ureaja navodi se string varijabla.
CHARACTER(LEN=10) :: ch INTEGER :: i = 98765 WRITE (ch,(i)) i

Kratke osnove rada s programskim jezikom FORTRAN

str. 31

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

7.
7.1

Funkcije i Subrutine
Openito

Funkcije i Subrutine (FUNCTION i SUBROUTINE) su zasebni dijelovi programa koji obavljaju odreenu operaciju. Osnovna razlika Funkcija i Subrutina je ta to funkcije povratno vraaju samo jednu vrijednost, dok Subrutine mogu imati cijeli niz povratnih vrijednosti. Veliki niz funkcija su bibliotene funkcije, koje esto i nesvjesno koristimo. To su obino matematike funkcije koje dolaze s radnim okrujem i automatski se linkaju s programom (ako je potrebno). To su npr. (jedan mali podskup): FUNKCIJA ABS (a) SIGN (a,b) SQRT (a) SIN (a) COS (a) TAN (a) ASIN (a) ACOS (a) ATAN (a) EXP (a) LOG (a) LOG10 (a) SINH (a) COSH (a) TANH (a) to radi absolutna vrijednost vrijednost od a s predznakom od b kvadratni korjen sinus od a (argument u radijanima) kosinus od a tanges od a arkus sinus - inverzna funkcija od sinusa arkus kosinus arkus tanges od a eksponent (prirodni) prirodni logaritam logaritam u bazi 10 hiperbolini sinus hiperbolini kosinus hiperbolini tanges

Upotreba ovih funkcija je jednostavna, kako je prethodno pokazano na primjeru funkcije SQRT. Osim bibliotenih mogue je formirati i cijeli niz drugih funkcija.

7.2

Funkcije (FUNCTIONS)

Funkcija vraa podatak ili rezultat ija vrsta treba biti navedena na poetnoj liniji definicije funkcije. Funkcija moe imati argumente iji tip treba navesti unutar definicije funkcije. Funkcija treba imati jedinstveno ime unutar programske jedinice. Ime funkcije je varijabla (memorijska lokacija) ija vrijednost treba biti zadana unutar definicije funkcije.
PROGRAM N_Faktorijel IMPLICIT NONE INTEGER*4 NN, FACT, FAKTORIJEL WRITE (*,10) READ (*,20) NN FACT = FAKTORIJEL(NN) WRITE (*,30) NN,'! = ',FACT 10 FORMAT (' Upisi broj : ',$) 20 FORMAT (I5) 30 FORMAT (I3,A,I15) END PROGRAM C INTEGER*4 FUNCTION FAKTORIJEL(N) IMPLICIT NONE INTEGER*4 N,I FAKTORIJEL=1 DO I=1,N FAKTORIJEL=FAKTORIJEL*I ENDDO RETURN END

U glavnom programu izvrenje funkcije postie se pozivom te funkcije, tako da se odreenoj varijabli pridoda povratna vrijednost funkcije (FACT = FAKTORIJEL(NN)). Vano je zapamtiti da varijabla kojoj se pridodaje vrijednost funkcije i sama funkcija moraju biti istog tipa (INTEGER*2, INTEGER*4, CHARACTER*12, REAL*4). Izvrenje gornjeg programa ima sljedei ispis:

Kratke osnove rada s programskim jezikom FORTRAN

str. 32

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Ako izmijenimo tip funkcije, npr. (vidjeti crveni redak):


REAL*4 FUNCTION FAKTORIJEL(N) IMPLICIT NONE INTEGER*4 I,N FAKTORIJEL=1 DO I=1,N FAKTORIJEL=FAKTORIJEL*I ENDDO RETURN END

Izvrenje programa ima ispis:

Kompajler ne prijavljuje greku u kdu, pa ako programer ne obrati panju na dobivene rezultate, rezultat je stvarno nepredvidiv. Takoer, argumenti koji se predaju funkciji i argumenti u funkciji moraju biti istog tipa (iako nije vano da imaju i isto ime). Pogrean tip varijable esto dovodi do nepredvidivih greaka. Primjer s grekom u argumentima prikazan je kod subrutine.

7.3

Subrutine (SUBROUTINE)

Subrutine (Podprogrami) su u svemu slini funkcijama, osim to one ne vraaju rezultat. Subrutine se uvode kao posebne skupine naredbi koje obavljaju odreenu vrst posla i koja se esto se koristi unutar programa. Definicija subrutine (potprograma) poinje s SUBROUTINE iza koje slijedi ime subrutine koje mora biti jedinstveno unutar programske jedinice. Definicija subrutine zavrava s END ili s END SUBROUTINE. Iza imena subrutine slijedi lista opcionalnih argumenata zatvorena u okrugle zagrade. Tip argumenata se mora specificirati unutar podprograma. Argumenti koji se predaju subrutini i argumenti u subrutini moraju biti istog tipa (iako nije vano da imaju i isto ime). U glavnom programu izvrenje subrutine se postie naredbom CALL ime_subrutine (args). Po izvrenju zadnje naredbe u subrutini program se nastavlja izvravati u glavnom programu na naredbama koje slijede iza CALL .. naredbe. Prisilni izlazak iz subrutine moe se postii naredbom RETURN. U jednoj subrutini moe biti vie naredbi RETURN. Subrutine ili funkcije takoer mogu zvati (CALL ..) druge definirane subrutine ili funkcije. Postoje subrutine i funkcije koje mogu zvati sami sebe, tz. rekurzivne subrutine ili funkcije.

7.4

O nainu razmjene varijabli

Nain razmjene varijabli u Fortranu izmeu glavnog programa i subrutina/funkcija, ako i izmeu samih subrutina/funkcija je tzv. by reference, za razliku od npr. C jezika, gdje je prijenos tzv. by value. Naime prilikom prijenosa varijabli u Fortranu ne prenosi se njena vrijednost ve njena referenca, tj. adresa memorijske lokacije na kojoj je varijabla spremljena. Ovo ima za posljedicu da ako se vrijednost varijable promijeni u subrutini/funkciji vrijednost varijable mijenja i u glavnom kdu. Pogledajmo donji, jednostavni primjer:

Kratke osnove rada s programskim jezikom FORTRAN

str. 33

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

PROGRAM NNN IMPLICIT NONE INTEGER*4 NN WRITE (*,10) READ (*,20) NN WRITE (*,30) ' N je : ',NN CALL PROMIJENI(NN) WRITE (*,30) ' N je : ',NN 10 FORMAT (' Upisi broj : ',$) 20 FORMAT (I5) 30 FORMAT (A,I15) END PROGRAM C SUBROUTINE PROMIJENI(N) IMPLICIT NONE INTEGER*4 N N=N+1 RETURN END

Rezultat izvrenja donjeg programa (ako za N upiemo npr. broj 12) je:

Izmijenimo malo subrutinu (izmjene su oznaene crveno).


SUBROUTINE PROMIJENI(N) IMPLICIT NONE REAL*4 N N=N+1 RETURN END

Sada je rezultat izvrenja programa nepredvidiv:

Kratki komentar: Glavni program inicira cjelobrojnu varijablu NN i uita je s tipkovnice. Tu varijablu sprema na odreeno mjesto u memoriji (memorijsku lokaciju) veliine 4 byte-a. Program zatim poziva subrutinu istovremeno joj aljui memorijsku lokaciju na kojoj je spremljena varijabla NN. Subrutina prima tu varijablu, ali je grekom inicira kao realnu. Odlazi na dobru memorijsku lokaciju ali ita varijablu na pogrean nain (s nepredvidivim rezultatom). Usput, ime ove varijable je N, to je sasvim nebitno raunalu. Vrijednost varijable uveava za 1 te tako uveanu vrijednost sprema na istu lokaciju, te se vraa u glavni program. Glavni program ispisuje vrijednost iz zadane memorijske lokacije, ali sada ponovno itajui varijablu kao cjelobrojnu. Konana vrijednost je sasvim nepredvidiva. Posebnu panju treba posvetiti prilikom prijenosa polja (matrica) u subrutinu. Sljedei primjer pokazuje neke osobitosti prijenosa matrica u i iz subrutine.
PROGRAM POLJA IMPLICIT NONE

Kratke osnove rada s programskim jezikom FORTRAN

str. 34

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

INTEGER*4 I,J,A(5,5) C Punjenje vrijednsti u 'A' CALL NAPUNI_A(A) C Original matrica 'A' WRITE (*,10) ((A(I,J),J=1,5),I=1,5) WRITE (*,20) '----------------------' C Promijeni vrijednsti u 'A' CALL PROMJENI_A_1(A) C Promijenjena matrica 'A' - 1. put WRITE (*,10) ((A(I,J),J=1,5),I=1,5) WRITE (*,20) '----------------------' C Vrati na staro CALL NAPUNI_A(A) C Promijeni vrijednsti u 'A' CALL PROMJENI_A_2(A) C Promijenjena matrica 'A' - 2. put WRITE (*,10) ((A(I,J),J=1,5),I=1,5) WRITE (*,20) '----------------------' C Vrati na staro CALL NAPUNI_A(A) C Promijeni vrijednsti u trecem stupcu 'A' CALL PROMJENI_A_3(A(1,3)) C Promijenjena matrica 'A' - 3. put WRITE (*,10) ((A(I,J),J=1,5),I=1,5) WRITE (*,20) '----------------------' C 10 FORMAT (5I10) 20 FORMAT (A) C END PROGRAM C-----------------------------------------SUBROUTINE NAPUNI_A(A) IMPLICIT NONE INTEGER*4 I,J,A(5,5) DO I=1,5 DO J=1,5 A(I,J)=I*10+J ENDDO ENDDO RETURN END C-----------------------------------------SUBROUTINE PROMJENI_A_1(A) IMPLICIT NONE INTEGER*4 I,J,A(5,5) DO I=1,5 DO J=1,5 A(I,J)=A(I,J)+100 ENDDO ENDDO RETURN END C-----------------------------------------SUBROUTINE PROMJENI_A_1_1(A) IMPLICIT NONE INTEGER*4 I,J,A(5,5) A=A+100 RETURN END C-----------------------------------------SUBROUTINE PROMJENI_A_2(A) IMPLICIT NONE INTEGER*4 I,A(25) DO I=1,25 A(I)=A(I)+100 ENDDO RETURN END C-----------------------------------------SUBROUTINE PROMJENI_A_3(A) IMPLICIT NONE INTEGER*4 I,A(5) DO I=1,5 A(I)=A(I)+100 ENDDO RETURN END C------------------------------------------

Kratke osnove rada s programskim jezikom FORTRAN

str. 35

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

Rezultat gornjeg programa je:

Sljedea subrutina (FILNAM) prima ime ulazne datoteke, skida joj ekstenziju, te vraa ime s dodanom novom ekstenzijom. Tako se nakon to korisnik upie ime ulazne datoteke (npr. podaci.dat), stvaraju dvije nove datoteke: podaci.izl za izlazne rezultate i podaci.dxf za dxf (AutoCAD) file.
PROGRAM AAAA IMPLICIT NONE CHARACTER*13 INPUT1,OUTPUT,DXFOUT C C*** DEKLARACIJA OSTALIH VARIJABLI U PROGRAMU ................ ................ C C*** UCITAVANJE ULAZNOG I IZLAZNOG FAJLA WRITE (*,14) READ (*,15) INPUT1 CALL FILNAM(INPUT1,OUTPUT,'IZL') CALL FILNAM(INPUT1,DXFOUT,'DXF') WRITE (*,16) OUTPUT WRITE (*,18) DXFOUT C 14 FORMAT (' Ulazna datoteka: ',$) 15 FORMAT (A13) 16 FORMAT (' Izlazna datoteka: ',A13) 18 FORMAT (' DXF datoteka: ',A13) C OPEN (UNIT=10,FILE=INPUT1,FORM='FORMATTED',STATUS='OLD',ERR=9990) OPEN (UNIT=11,FILE=OUTPUT,FORM='FORMATTED') OPEN (UNIT=88,FILE=DXFOUT,FORM='FORMATTED') ................ C...itd.......... ................ CLOSE (UNIT=10) CLOSE (UNIT=11) CLOSE (UNIT=88) END C C C--------------------------------------------------------------------SUBROUTINE FILNAM(FILEIN,FILEOU,EXT) IMPLICIT NONE CHARACTER*13 FILEIN,FILEOU CHARACTER*3 EXT INTEGER I, NUM NUM=0 DO I=1,9 NUM=I IF(FILEIN(I:I).EQ.' ') EXIT IF(FILEIN(I:I).EQ.'.') EXIT FILEOU(I:I)=FILEIN(I:I) ENDDO C FILEOU(NUM:NUM)='.' DO I=1,3 FILEOU((NUM+I):(NUM+I))=EXT(I:I) ENDDO RETURN END
Kratke osnove rada s programskim jezikom FORTRAN str. 36

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

C---------------------------------------------------------------------

Kratke osnove rada s programskim jezikom FORTRAN

str. 37

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

8.
8.1

PRIMJER Programsko rjeenje: Ravninski tapni sustavi


Teorijske postavke
8.1.1 Jednadba ravnotee

Neka je os x uzduna os elementa, a osi y i z osi tromosti presjeka elementa. Tada se jednadba ravnotee linearnog sustava na diferencijalnom dijelu elementa moe napisati kao:

LQ f = 0

LDL p f = 0
T

(1)

gdje su Q vektor unutranjih sila i f vektor optereenja:

{ } f = {f , f , m }
Q = Nx , Ty ,Mz
T x y z

(2)

a L diferencijalni operator oblika:

0 0 d dx 0 L= d dx 0 0 0 d dx
Formalno, za komponente vektora unutranjih sila moe se pisati:

(3)

Q = D
gdje je D matrica krutosti presjeka (koja ukljuuju njegove materijalne i geometrijske karakteristike)

(4)

EA x D= 0 0
= Lp

0 GA y 0

0 0 EIz

(5)

a vektor deformacije presjeka, koji ovisi o vektoru pomaka:

p = {u, v, w}

(6)

Da bi se rijeilo gornju jednadbu potrebno je uvesti rubne uvjete, koji u sluaju statikog problema, predstavljaju zadane sile i pomake na rubovima sustava.

8.1.2 Diskretizacija sustava i bazne funkcije


U nedostatku analitikih rjeenja, rjeenje jednadbe (1) se obino trai numerikim postupcima. Jedan od najee primjenjivanih i najpriznatijih postupaka je Metoda ili Tehnika konanih elemenata. Bit ove metode je da se sustav koji ima beskonani broj stupnjeva slobode zamijeni (simulira) sustavom koji ima konaan broj stupnjeva slobode. Da bi se to postiglo pretpostavljamo (programiramo) ponaanje niza toaka sustava na jednom konanom elementu, vezano uz odreeni broj fiksnih, prethodno odreenih toaka (vorova) na tom istom elementu. Pretpostavimo priblino rjeenje za polje pomaka:

) p =p = Hu

(7)

gdje je H matrica baznih funkcija a u vektor nepoznatih vornih pomaka. Bazne (oblikovne) funkcije se najee za tapne sustave biraju iz grupe Hermite-ovih polinoma, a prikazane su na crteu.
1.0 h1 1.0 h3 h4
1.0

0 1.0 h2

l 1.0

h5 0 h6
1.0

Kratke osnove rada s programskim jezikom FORTRAN

str. 38

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

8.1.3 Formulacija principom virtualnog rada


Ako virtualne pomake odaberemo iz porodice Hermite-ovih funkcija, od kojih je konstruirano i priblino rjeenje (7), tada iz jednakosti vanjskih i unutranjih sila slijedi:

u Ts + p T f dx = D dx
odnosno:

(8)

u Ts + u T H T f dx = u B T D B u dx
tj., nakon mnoenja s lijeve strane s ili skraeno:

(9) (10) (11)

uT :
s=

(B

D B u dx H T f dx

se = k e u F e
gdje su:

se - vektor reznih sila na krajevima konanog elementa


k e - matrica krutosti elementa F e - vektor sila pune upetosti

8.1.4 Otputanje veza na rubovima elemenata


Numeriki modeli obino predviaju mogunost oslobaanja neke od veza rubova elemenata s okolinom. Time se eliminira (nulira) odgovarajua sila na rubovima. Postupak kojim se to provodi predstavlja jedan vid lokalne eliminacije. Jednadbu ravnotee konanog elementa moemo zapisati u obliku:

s e = k e {u i } Fie ij

[ ]

{ }

(12)

i presloiti tako da u prve retke postavimo one jednadbe ija pripadna veza nije otputena. Te jednadbe oznaimo indeksom n. Iza njih sloimo jednadbe onih veza koje su otputene i oznaimo ih indeksom o, pa imamo:

s e n = 0

k nn k on

k no u n Fn k oo u o Fo

(13)

Kombinacija otputanja mora dati k nn kao regularnu matricu, inae smo otputanjem element pretvorili u lokalni mehanizam. Iz grupe jednadbi otputenih veza otputeni pomaci se mogu izraziti u funkciji neotputenih, prema:
1 u o = k oo Fo k on u n

(14) (15) (16) (17) (18)

Sile u neotputenim vezama dobivamo iz grupe jednadbi neotputenih veza kao:

s e = k nn u n k no u o Fn n
Uvoenjem (6.16) u (6.17) moemo eliminirati otputene pomake:
1 1 s e = k nn u n + k nok ook on u n k nok oo Fo Fn n

ili skraeno odnosno

s e = k nn + k nn u n Fn Fn n se = k un F n

Posljednja relacija (18) predstavlja kondenzirane jednadbe ravnotee konanog elementa koje moramo rastegnuti na poetno stanje tako da svaku pojedinu jednadbu vratimo na poziciju veze koja nije otputena, dok e se na pozicijama otputenih veza javiti nul jednadbe.

8.1.5 Ravnotea globalnog sustava


Ravnotea globalnog sustava uspostavlja se slaganjem sila na rubovima konanog elementa i sila upetosti u odgovarajuim vorovima mree konanih elemenata. Prije toga potrebno je izvriti preslikavanje krutosti i sila iz lokalnog u globalni sustav.
Kratke osnove rada s programskim jezikom FORTRAN str. 39

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

k e = TT k e T gl
e Fgl = T F e

(19)

Preslikavanje se vri matricom transformacije (T), koja ima oblik:

cos x l , x g T= cos x l , y g

( (

) )

cos y l , x g cos y l , y g
F=

( (

) )

(20)

Uvrtavanjem rubnih uvjeta dobivamo ravnoteu globalnog sustava u sljedeem obliku:

K=

k
e

e gl

F
e

e gl

(21)

Ku = F
gdje su K i F matrice krutosti i optereenja, a u vektor globalnih pomaka.

8.2

Kreiranje novog projekta

Kreirajmo novi projekt. Nazovimo ga npr. Stasus2D (tapni sustavi za 2D probleme). Postavimo osnovne parametre:

Odmah zatim kreirajmo i osnovnu datoteku s izvornim Fortranskim kdom. Koristit emo fiksni zapis.

Definirajmo odmah i duinu zapisa realnih i cjelobrojnih varijabli. Upotrijebimo opcije: Project Settings, pa na tabu: Fortran izaberimo opciju Fortran data.

Podesimo Default real kind na 8 (8 byte-ova po jednoj realnoj varijabli) i Default integer kind na 4 (4 byte-a po jednoj cjelobrojnoj varijabli to je i default vrijednost).

Kratke osnove rada s programskim jezikom FORTRAN

str. 40

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

8.3

Tok programa

Prije poetka pisanja samog koda dobro je izvesti dvije predradnje. Prva je definiranje toka programa, a druga definiranje osnovnih (globalnih) varijabli. Tok programa je naelna shema kako bi na program trebao izgledati. On bi mogao funkcionirati npr. na ovaj nain: START INPUT STIFFS LOADS SOLVE FORCE OUTPUT END Poetak programa Uitavanje ulaznih podataka Izraunavanje lokalnih i globalne matrice krutosti Izraunavanje sila pune upetosti za svaki tap i proraun globalnog vektora optereenja Proraun sustava i izraunavanje pomaka Izraunavanje reznih sila za svaki tap Ispis rezultata Kraj programa

Ako prihvatimo ovaj tok programa, tada moemo kreirati (kodirati) osnovno tijelo programa:
C C C C C C C C PROGRAM Stasus2D Definiranje varijabli

Ucitavanje ulaznih podataka CALL INPUT() Izracunavanje matrica krutosti CALL STIFFS() Izracunavanje vektora opterecenja CALL LOADS() Proracun sustava CALL SOLVE() Izracunavanje reznih sila CALL FORCE() Ispis CALL OUTPUT() Kraj END

Ovaj program je sasvim korektan, iako jo uvijek nije funkcionalan. Ako ga probamo kompajlirati vidjet emo da ga kompajler uredno prevodi. S druge strane linker javlja greke. To je sasvim razumljivo jer navedene subrutine nismo jo definirali niti se one nalaze u standardnim bibliotekama okruenja. Prije prijelaza na definiranje samih dijelova programa (subrutina), definirajmo osnovne varijable.

Kratke osnove rada s programskim jezikom FORTRAN

str. 41

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

8.4

Osnovne (globalne) varijable

Postoje neki podaci koji e nam biti potrebni tijekom cijelog toka izvrenja programa. To su npr. podaci o vorovima i tapovima, dakle geometrijski podaci. Koji vorovi definiraju poetak i kraj tapa, kojeg je materijala tap, da li su njegovi krajevi slobodni ili pridrani u prostoru i sl. Takoer su tu podaci o materijalu i njegovim karakteristikama, te rezultati prorauna. Sve ove podatke dobro je definirati kao globalne varijable koje e moi dosegnuti bilo koji dio programa. Globalne varijable moemo definirati u okviru osnovnog dijela programa, meutim znatno ih je jednostavnije (i itljivije) definirati u posebnoj datoteci. Definirajmo novu datoteku koja (inicijalno) nee biti sastavni dio projekta. Neka ta datoteka ima nastavak .inc (include). Odaberimo opciju: File New Tekui projekt

NAPOMENA: Iskljuiti Add to project, datoteka se ne dodaje projektu

Ime datoteke

NAPOMENA: Upisati ime i dodati nastavak: .inc.

Prozor s izborom tipa datoteke


NAPOMENA: Odabrati Text file.

Datoteka Stasus2D.inc se pojavljuje u radnom dijelu okruenja (sredinji prozor). Vidljivo je da nema zelenu crtu, jer je program ne prepoznaje kao fortransku datoteku. Definirajmo odmah na poetku neke maksimalne vrijednosti. Ove vrijednosti je, dakako, kasnije mogue mijenjati. Definirajmo vrijednosti za maksimalni broj tapova, maksimalni broj vorova i maksimalni broj materijala. Upotrijebit emo naredbu PARAMETER koja definira nepromjenjivu konstantu.
C--------------------------------------------------C INCLUDE FILE ZA PROGRAM C STAPNI SUSTAVI C C--------------------------------------------------C MAKSIMALNI PARAMETRI C C MXNODE - MAKSIMALNI BROJ CVOROVA C MXELEM - MAKSIMALNI BROJ ELEMENATA C MXMATE - MAKSIMALNI BROJ MATERIJALA C PARAMETER (MXNODE=500, MXELEM=100, MXMATE=10) C---------------------------------------------------

Definirajmo takoer i stvarni broj tapova, vorova, pridranih vorova i materijala. Ovi podaci e se uitavati za svaki model posebno. Dakle, to su cjelobrojne varijable.
C--------------------------------------------------C STVARNI PARAMETRI MODELA C C NELEM - BROJ STAPOVA C NPOIN - BROJ CVOROVA C NFIXE - BROJ PRIDRZANIH CVOROVA C NMATS - BROJ MATERIJALA C INTEGER NELEM,NPOIN,NFIXE,NMATS C---------------------------------------------------

Za opis vorova definirat emo sloeni tip podataka u kojem emo uvati sve podatke za svaki pojedini vor. Dakle, svaki vor ima svoju oznaku, koordinate (x i y), oznaku rubnog uvjeta, nain pridranja, prisilni (poetni) pomak u x i/ili y smjeru te rotaciju i rezultate prorauna: pomak u x i y smjeru i rotaciju. Svaki ovaj podatak moe se uvati u posebnoj varijabli (polju, matrici) ili se moe kreirati sloeni tip podataka koji e sve ove podatke uvati na jednom mjestu.
C--------------------------------------------------C STRUKTURA CVORA C C ICVOR - oznaka cvora C COORD(2) - koordinata cvora: X-COORD(1) i Y-COORD(2) C BC - rubni uvjet cvora (0 - slobodan, 1 - pridrzan)
Kratke osnove rada s programskim jezikom FORTRAN str. 42

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

C C C

DISP(3) - pocetni pomaci (DISP(1)-x,DISP(2)-y,DISP(3)-fi) DIST(3) - izracunati pomaci (DIST(1)-x,DIST(2)-y,DIST(3)-fi)

STRUCTURE /OPIS_CVORA/ INTEGER ICVOR REAL CX, CY INTEGER BC(3) REAL DISP(3) REAL DIST(3) END STRUCTURE RECORD /OPIS_CVORA/ CVOR(MXNODE) C---------------------------------------------------

Zadnji redak kreira sloeni tip podataka CVOR, koji je tipa OPIS_CVORA i ukupno sadrava MXNODE lanova. Jednaki postupak emo upotrijebiti za tapove. Kreirati emo sloeni tip podataka strukturu, koja e u sebi sadravati: oznaku (ime) tapa, poetni i krajnji vor tapa, oznaku materijala od kojeg je tap izraen te duinu tapa (koja e se naknadno izraunati i upisati u strukturu). Takoer u strukturi emo uvati izlazne rezultate: rezne sile na oba kraja tapa
C--------------------------------------------------C STRUKTURA STAPA C C ISTAP - oznaka stapa C C1 - Pocetni cvor na stapu C C2 - Krajnji cvor na stapu C MAT - materijal stapa C LEN - duzina stapa (interno) C FORC(6) izracunate rezne sile C N1,T1,M1 i N2,T2,M2 C STRUCTURE /OPIS_STAPA/ INTEGER ISTAP INTEGER C1,C2 INTEGER MAT REAL LEN REAL FORC(6) END STRUCTURE RECORD /OPIS_STAPA/ STAP(MXELEM) C C---------------------------------------------------

Zadnji redak kreira sloeni tip podataka STAP, koji je tipa OPIS_STAPA i ukupno sadrava MXELEM lanova. Takoer, isti postupak emo upotrijebiti za opis materijala. U strukturu materijala uvrstiti emo materijalne karakteristike tapa i karakteristike poprenog presjeka tapa:
C--------------------------------------------------C C MATERIJALNE I GEOMETRIJSKE KARAKTERISTIKE C C E - modul elasticnosti C NI Poissonov koeficijent C G - MODUL POSMIKA C A - POVRSINA C I - MOMENT INERCIJE C STRUCTURE /MAT_GEOM_KAR/ REAL A,I,E,NI,G END STRUCTURE RECORD /MAT_GEOM_KAR/ GEOM(MXMATE) C C---------------------------------------------------

Zadnji redak,kao i u ranijim sluajevima, kreira sloeni tip podataka GEOM, koji je tipa MAT_GEOM_KAR i ukupno sadrava MXMATE lanova. Definirajmo i strukturu optereenje, koju emo detaljno komentirati kasnije:
C--------------------------------------------------C C STRUKTURA OPTERECENJA C C TIP OPTERECENJA 1 - CVORNO C MOZE SE ZADATI: SILA U SMJEROVIMA X I Y I MOMENT OKO Z C TIP OPTERECENJA 2 - JEDNOLIKO PO STAPU C ZADAJE SE Q - INTENZITET C L1 - POCETAK DJELOVANJA OD CVORA 1 C L - DUZINA DJELOVANJA STRUCTURE /OPTERECENJE/

Kratke osnove rada s programskim jezikom FORTRAN

str. 43

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

C C---------------------------------------------------

REAL A,B,C ! Fx,Fy,Mz ili Q,L1,L END STRUCTURE RECORD /OPTERECENJE/ PLOAD(MXNODE) RECORD /OPTERECENJE/ MLOAD(MXELEM)

Ovdje su definirana dva polja iz sloenog tipa podataka strukture OPTERECENJE: PLOAD (Point Load) koja uva podatke o vornom optereenju i MLOAD (Member Load) koja uva podatke o optereenju po elementima. Konano, omoguimo da svi ovi globalni podaci budu na zajednikom dijelu memorije:
C--------------------------------------------------C C ZAJEDNICKO PODRUCJE ZA DOSTUPNOST PODATAKA COMMON /GEOM_1/ CVOR, STAP, GEOM COMMON /GEOM_2/ NELEM,NPOIN,NFIXE,NMATS COMMON /GEOM_3/ PLOAD, SLOAD C C---------------------------------------------------

Da bi glavni dio programa vidio ove globalne podatke potrebno ih je ukljuiti u njemu. To postiemo naredbom INCLUDE u glavnom dijelu programa. Dakle, u glavnom programu dodajmo sljedei redak ( oznaavaju da ostatak ostaje nepromijenjen):
C C PROGRAM Stasus2D Definiranje varijabli INCLUDE Stasus2D.inc Ucitavanje ulaznih podataka ......

Naredba: INCLUDE Stasus2D.inc daje nalog kompajleru da na tom mjestu u potpunosti ukljui sadraj datoteke Stasus2D.inc. Ovo ujedno i znai da datoteka mora biti pisana po svim pravilima fortranskog zapisa. Dakle, ako je fiksni zapis tada stupci 1-6 moraju ostati slobodni, ne smije se pisati preko 72. stupca itd.

8.5

Uitavanje ulaznih podataka iz datoteke Subroutine INPUT()

Definiranje ulaznih podataka za koritenje programa (u konanici kad ga u potpunosti izradimo) odvijat e se preko datoteke s ulaznim podacima. Ovu datoteku je potrebno prije startanja programa kreirati u nekom editoru (moe i u samom Developer Studiu), prema uputama koje emo sami definirati.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 C OSUBROUTINE INPUT() Definiranje varijabli OIMPLICIT NONE OINCLUDE Stasus2D.inc OCHARACTER*13 INPUT1,OUTPU1,DXFOU1 Ucitavanje imena datoteka OWRITE (*,14) OREAD (*,15) INPUT1 OCALL FILNAM(INPUT1,OUTPU1,'IZL') OCALL FILNAM(INPUT1,DXFOU1,'DXF') OWRITE (*,16) OUTPUT OWRITE (*,18) DXFOUT 14OFORMAT 15OFORMAT 16OFORMAT 18OFORMAT (' Ulazna datoteka: ',$) (A13) (' Izlazna datoteka: ',A13) (' DXF datoteka: ',A13)

C C

C C C C

OOPEN (UNIT=10,FILE=INPUT1,FORM='FORMATTED',STATUS='OLD',ERR=9990) OOPEN (UNIT=11,FILE=OUTPU1,FORM='FORMATTED') OOPEN (UNIT=88,FILE=DXFOU1,FORM='FORMATTED') Ucitavanje osnovnog retka READ (10,'(A80)') TEXT WRITE (11,'(A10,A80)') ' Naslov: ',TEXT UCITAVANJE OSNOVNIH PARAMETARA MODELA READ (10,*) NELEM,NPOIN,NFIXE,NMATS WRITE (11,20) 20 FORMAT (//,' Broj stapova : ',I5, & ' Broj cvorova : ',I5, & ' Broj pridrz. cvorova : ',I5,

Kratke osnove rada s programskim jezikom FORTRAN

str. 44

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 97 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

& C C

' Broj materijala : ',I5)

C C

UCITAVANJE KOORDINATA CVOROVA WRITE (11,30) WRITE (11,31) DO I=1,NPOIN READ (10,*) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY, & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3) WRITE (11,32) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY, & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3) ENDDO 30 FORMAT (/,/,' CVOR X Y PRIDRZ') 31 FORMAT ( '---------------------------------------------') 32 FORMAT (I5,2F14.3,5X,3I3) UCITAVANJE VEZE STAPOVA WRITE (11,40) WRITE (11,41) DO I=1,NELEM READ (10,*) IELEM, STAP(IELEM).MAT, & STAP(IELEM).C1, STAP(IELEM).C2, STAP(IELEM).C3 WRITE (11,42) IELEM, STAP(IELEM).MAT, & STAP(IELEM).C1, STAP(IELEM).C2, STAP(IELEM).C3 ENDDO 40 FORMAT (/,/,' STAP MAT C1 C2 C3') 41 FORMAT ( '---------------------------------') 42 FORMAT (2I5,3I7) UCITAVANJE MATERIJALNIH I GEOM. KARAKTERISTIKA DO I=1,NMATS READ (10,*) IMATS,GEOM(IMATS).A, GEOM(IMATS).I, & GEOM(IMATS).E, GEOM(IMATS).NI WRITE (11,50) IMATS,GEOM(IMATS).A, GEOM(IMATS).I, & GEOM(IMATS).E, GEOM(IMATS).NI ENDDO 50 FORMAT (//,' Materijal : ',I5,/ & ' Povrsina : ',F15.6,/ & ' Moment inercije : ',F15.6,/ & ' Modul elsticnosti : ',F15.6,/ & ' Poissonov koef. : ',F15.6)

C C

C C CRTANJE GEOMETRIJE U DXF-FILE C*** Entities section WRITE (88,'(A,/,A)') ' 0','SECTION' WRITE (88,'(A,/,A)') ' 2','ENTITIES' C L1='Konstrukci' DO ISTAP=1,NELEM X1=CVOR(STAP(ISTAP).C1).CX Y1=CVOR(STAP(ISTAP).C1).CY Z1=0.0 X2=CVOR(STAP(ISTAP).C2).CX Y2=CVOR(STAP(ISTAP).C2).CY Z2=0.0 CALL DXF_LINE (L1,X1,Y1,Z1,X2,Y2,Z2,1) ENDDO C CALL DXF_CLOSE() C C UCITAVANJE OPTERECENJA.... C C TIP OPTERECENJA 1 - CVORNO C MOZE SE ZADATI: SILA U SMJEROVIMA X I Y I MOMENT OKO Z C TIP OPTERECENJA 2 - JEDNOLIKO PO STAPU C ZADAJE SE Q - INTENZITET C L1 - POCETAK DJELOVANJA OD CVORA 1 C L - DUZINA DJELOVANJA DO LCVOR=1,NPOIN PLOAD(LCVOR).A=0.0 PLOAD(LCVOR).B=0.0 PLOAD(LCVOR).C=0.0 ENDDO DO LELEM=1,NELEM SLOAD(LELEM).A=0.0 SLOAD(LELEM).B=0.0 SLOAD(LELEM).C=0.0 ENDDO C 100 CONTINUE
str. 45

Kratke osnove rada s programskim jezikom FORTRAN

Sveuilite u Splitu, Graevinsko-arhitektonski fakultet Katedra za Betonske konstrukcije i Mostove

113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

READ (10,*) LCVOR,A,B,C PLOAD(LCVOR).A=A PLOAD(LCVOR).B=B PLOAD(LCVOR).C=C IF (LCVOR.NE.NPOIN) GOTO 100 200 CONTINUE READ (10,*) LELEM,A,B,C SLOAD(LELEM).A=A SLOAD(LELEM).B=B SLOAD(LELEM).C=C IF (LELEM.NE.NELEM) GOTO 200 WRITE (11,61) DO LCVOR=1,NPOIN WRITE (11,60) LCVOR, & PLOAD(LCVOR).A,PLOAD(LCVOR).B,PLOAD(LCVOR).C ENDDO WRITE (11,62) DO LELEM=1,NELEM WRITE (11,60) LELEM, & SLOAD(LELEM).A,SLOAD(LELEM).B,SLOAD(LELEM).C ENDDO

60 FORMAT (I5,3F12.3) 61 FORMAT (/,' SILE U CVOROVIMA') 62 FORMAT (/,' OPTERECENJE NA ELEMENTIMA')

GOTO 9999 9990 WRITE (*,'(/,A40)') ' Nepostojeca ulazna datoteka!' C 9999 CONTINUE RETURN END OSUBROUTINE FILNAM(FILEIN,FILEOU,EXT) OIMPLICIT NONE OCHARACTER*13 FILEIN, FILEOU OCHARACTER*3 EXT OINTEGER NUM, I ONUM=0 O DO I=1,9 O NUM=I O IF(FILEIN(I:I).EQ.' ') EXIT O IF(FILEIN(I:I).EQ.'.') EXIT O FILEOU(I:I)=FILEIN(I:I) O ENDDO O FILEOU(NUM:NUM)='.' O DO I=1,3 O FILEOU((NUM+I):(NUM+I))=EXT(I:I) O ENDDO ORETURN OEND

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Kratke osnove rada s programskim jezikom FORTRAN

str. 46