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.


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

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

str. 2 Kratke osnove rada s programskim jezikom FORTRAN


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

Sadraj stranica
1. UVOD .....................................................................................................................................................5
1.1 O FORTRAN-u ...................................................................................................................................................................... 5
2. Rad u integriranom okruenju: Compaq Developer Studio (ver. 6.6.0)............................................6
2.1 Kreiranje radnog okruenja.................................................................................................................................................... 6
2.2 Kreiranje datoteke s izvornim kodom programa .................................................................................................................... 7
2.3 Kompajliranje, linkanje i izvravanje programa...................................................................................................................... 8
2.4 Upozorenja i greke............................................................................................................................................................... 8
2.5 Kompatibilnost ..................................................................................................................................................................... 10
2.6 Release i debug mod........................................................................................................................................................... 10
2.7 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. Strukturiranje programa.....................................................................................................................20
4.1 Pravilo o strukturi programa................................................................................................................................................. 20
4.2 Konvencija o imenima varijabli............................................................................................................................................. 20
4.3 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 Naredbe OPEN i CLOSE .....................................................................................................................................................28


6.4 Naredbe WRITE i READ ......................................................................................................................................................29
6.5 Ostale naredbe za upis i ispis ..............................................................................................................................................30
6.6 Pisanje u niz znakova i itanje iz niza znakova....................................................................................................................31
7. Funkcije i Subrutine............................................................................................................................32
7.1 Openito...............................................................................................................................................................................32
7.2 Funkcije (FUNCTIONS) .......................................................................................................................................................32
7.3 Subrutine (SUBROUTINE)...................................................................................................................................................33
7.4 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

str. 4 Kratke osnove rada s programskim jezikom FORTRAN


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

1. UVOD
1.1 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. Rad u integriranom okruenju: Compaq Developer Studio (ver. 6.6.0)


2.1 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: FileNew

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.

str. 6 Kratke osnove rada s programskim jezikom FORTRAN


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: FileNew

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 koliko-
toliko 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: BuildCompile (Ctrl+F7). Jednostavniji
nain za formiranje izvrne (exe) datoteke, je izbor opcije: BuildBuild (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: BuildExecute (Ctrl+F5). Rezultat izvrenja programa biti e prikazan u
posebnom (DOS) prozoru.

Ako se izabere opcija: BuildExecute (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.

str. 8 Kratke osnove rada s programskim jezikom FORTRAN


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: BuildSet 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.

str. 10 Kratke osnove rada s programskim jezikom FORTRAN


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: BuildStart DebugGo (F5). Tehnike upravljanja procesom Debugiranja sortirane su u tablici s kratkim
objanjenjem ikone.

Ikona Hint Namjena


Restart Prekida program, ponovno kompajlira i linka i ponovno pokree program

Stop debugging 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
Step Into izvrnoj naredbi unutar subrutine/funkcije.
Ako je trenutna linija izvrenja programa poziv subrutine ili funkcije program je izvrava i zaustavlja se na sljedeoj
Step Over liniji nakon poziva.
Ako je trenutna linija izvrenja programa unutar subrutine ili funkcije program je izvrava do kraja, izlazi iz nje i
Step Out 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
Run to Cursor se na njoj.

Execute Program 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
Go 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
Remove All Breakpoints aktivnom projektu.
Postavljanje ili uklanjanje Prekidnih Toaka (Brekpoints). Toka se postavlja u liniji na mjestu kursora. Puni crveni
Insert/Remove Breakpoints 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. Tipovi podataka u FORTRANU


3.1 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

str. 12 Kratke osnove rada s programskim jezikom FORTRAN


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 Heksadecimalni Decimalni
00000000 00 0 00000000 00000000 00 00 0
01000001 41 65 00000000 10000000 00 80 128
01111111 7F 127 00000001 00000000 01 00 256
10000000 80 -128 01000000 00000000 06 00 16384
10000001 81 -127 10000000 00000001 80 01 -32768
11111111 FF -1 11111111 11111111 FF FF -1

Binarni Heksadec. Decimalni Binarni Heksadec. Decimalni Binarni Heksadec. Decimalni


0000 0 0 0101 5 5 1010 A 10
0001 1 1 0110 6 6 1011 B 11
0010 2 2 0111 7 7 1100 C 12
0011 3 3 1000 8 8 1101 D 13
0100 4 4 1001 9 9 1110 E 14
1111 F 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 realni broj
INT(a) a
i 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.

str. 14 Kratke osnove rada s programskim jezikom FORTRAN


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 ! ispisuje: 0.0000000E+00
a = 1.0/(1 + 1)
PRINT *,a ! ispisuje: 0.5000000
END PROGRAM

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 ! 1.0
b = AIMAG(c); PRINT *,b ! -5.3
d = CONJG(c)

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 STRUCTURE /Koordinate/
REAL x,y,z REAL x,y,z
END TYPE Koordinate END STRUCTURE
TYPE(Koordinate) :: v1,v2 RECORD /Koordinate/ v1,v2
v1%x = 1.0 v1.x = 1.0
v1%y = 1.0 v1.y = 1.0
v1%z = 1.0 v1.z = 1.0
v2 = Koordinate(-1.0,0.0,5.0) v2 = Koordinate(-1.0,0.0,5.0)
PRINT *,v1 ! 1.0 1.0 1.0 PRINT *,v1 ! 1.0 1.0 1.0
PRINT *,v2 ! -1.0 0.0 5.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 Vektori i Matrice (nizovi podataka)


3.4.1 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

str. 16 Kratke osnove rada s programskim jezikom FORTRAN


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

a = a + 1 ! svi a(i,j) = 1.0


a = 2*a ! svi a(i,j) = 2.0
a = SQRT(a) ! Vadi korijen iz svih elemenata
a = SIN(a) ! Izracunava sinus iz svih elemenata
a = a*a ! 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, DIMENSION(3) :: a = (/ (REAL(i), i=1,3) /)
REAL, DIMENSION(3) :: b = (/ (i**2 , i=1,3) /)
REAL, DIMENSION(6) :: c = (/ ((i-2)**2,i=1,6) /)
PRINT *,Broj elemenata = ,SIZE(a) ! 3
PRINT *,Najveci element = ,MAXVAL(b) ! 9.0
PRINT *,Najmanji element = ,MINVAL(c) ! 0.0
PRINT *,Suma elemenata = ,SUM(a) ! 6.0
PRINT *,Produkt elemenata = ,PRODUCT(b) ! 36.0
PRINT *,Skalarni produkt = ,DOT_PRODUCT(a,b) ! 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).
Primjer programa koji ita sa standardnog unosa (inputa) podatke te izraunava srednju vrijednost i standardnu devijaciju.
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

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

str. 18 Kratke osnove rada s programskim jezikom FORTRAN


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 Ime programa koji slijedi, ujedno oznaka i poetka programa
INTEGER I, ZBROJ Deklaracija varijabli
ZBROJ=0 Tijelo programa
DO I=1,100
ZBROJ=ZBROJ+I
ENDDO
PRINT *,' Zbroj : ',ZBROJ
END Kraj programa
Sljedei kd je loe napisan kd. Greku e javiti kompajler i program nee biti kompajliran.
PROGRAM ZBRAJANJE Ime programa koji slijedi, ujedno oznaka i poetka programa
INTEGER ZBROJ Deklaracija varijabli u koje se umjeala jedna izvrna naredba (ZBROJ=0)
ZBROJ=0
INTEGER I
DO I=1,100 Tijelo programa
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

str. 20 Kratke osnove rada s programskim jezikom FORTRAN


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

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

Kratke osnove rada s programskim jezikom FORTRAN str. 21


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

5. Kontrola toka programa


5.1 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 Uvjetna naredba grananja: IF


5.1.1.1 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 ! Stari nain
IF (a < 0.0) PRINT *,Imaginarni broj ! 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.
Kao operatori usporedbe koriste se sljedei znakovi/izrazi (logiki operatori):
Fortran 77 i nie verzije Fortran 90 i vie verzije Znaenje
.EQ. A.EQ.B == A==B A je jednako B
.NE. A.NE.B <> A<>B A nije jednako B
.LT. A.LT.B < A<B A je manje od B
.LE. A.LE.B <= A<=B A je manje ili jednako B
.GT. A.GT.B > A>B A je vee od B
.GE. A.GE.B >= A>=B A je vee ili jednako 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

5.1.1.2 Blok IF naredba


Umjesto logikog IF-a, mogue se koristiti IF u kombinaciji s THEN. Primjer:
IF (a < 0.0) THEN
PRINT *,Imaginarni broj
ENDIF

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

str. 22 Kratke osnove rada s programskim jezikom FORTRAN


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
1 PRINT *,Zadan je negativni broj
GOTO 3
2 PRINT *,Kvadratni korijen broja ,a, je ,SQRT(a)
3 CONTINUE

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 (ili GO TO) je bezuvjetna naredba grananja. Ima oblik:
GOTO lab1
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 petlja s kontrolnim parametrom (I) ima oblik:
DO I = poc,kraj,korak
! tijelo petlje
ENDDO

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

str. 24 Kratke osnove rada s programskim jezikom FORTRAN


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 vea 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 ZBROJ=0
DO I = 2,100,2 I=2
ZBROJ = ZBROJ + I DO WHILE (I <= 100)
ENDDO 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 ZBROJ=0
DO I = 2,100,2 I=2
ZBROJ = ZBROJ + I DO
ENDDO IF (I > 100)
ZBROJ = ZBROJ + I
I=I+2
ENDDO

6. Formatirani ispis podataka i rad s datotekama


6.1 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 WRITE:

Kratke osnove rada s programskim jezikom FORTRAN str. 25


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

INTEGER :: a=1, b=2, c=3 INTEGER :: a=1, b=2, c=3


PRINT *, a WRITE (*,*) a
PRINT (i),b WRITE (*,(i)) b
PRINT 100,c WRITE (*,100) c
100 FORMAT (i) 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


Za ispis cijelih brojeva (INTEGER-a) u decimalnom ispisu, koristi se I format:
INTEGER :: i
i = -1234
PRINT (i),i ! -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 ! 123456789_123456789_
PRINT (i3),i ! ***
PRINT (i5),i ! 1234
PRINT (i10),i ! 1234
PRINT (i10.7),i ! 0001234
PRINT (i16),i ! 1234

str. 26 Kratke osnove rada s programskim jezikom FORTRAN


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

6.2.2 Ispis logikih varijabli


Za ispis logikih varijabli koristi se L format:
LOGICAL :: lll
lll = .TRUE.
PRINT (l),lll ! 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 ! 9 znakova u stringu
PRINT (a8),str ! 9 znakov
PRINT (a9),str ! 9 znakova
PRINT (a11),str ! 9 znakova u
PRINT (a15),str ! 9 znakova u str
PRINT (a20),str ! 9 znakova 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


Za ispis realnih brojeva (REAL-a) u decimalnom ispisu, koriste se F, E, G, EN i ES formati.
REAL A
A=0.0191881 ! 123456789_123456789_
PRINT (f15.5)',A ! 0.01919
PRINT (e15.5),A ! 0.19188E-01
PRINT (g15.5),A ! 0.19188E-01
PRINT (en15.5),A ! 19.18807E-03
PRINT (en15.5),A ! 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 ! 123456789_123456789_
PRINT (f15.5)',A ! 0.00000
A=.123E+12
PRINT (f8.2)',A ! ********

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 ! 123456789_123456789_
PRINT (e15.5)',A ! 0.12300-12
PRINT (g15.5)',A ! 0.12300-12
A=123.1
PRINT (e15.5)',A ! 0.12310+03
PRINT (g15.5)',A ! 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.

str. 28 Kratke osnove rada s programskim jezikom FORTRAN


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


Opa forma naredbe WRITE je:
WRITE ([UNIT=]<cijeli_broj>, [FMT=]<ureenje>, IOSTAT=<int_var>,
& ERR=<labela>, ADVANCE=<yes,no>,...) lista_varijabli

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.

str. 30 Kratke osnove rada s programskim jezikom FORTRAN


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. Funkcije i Subrutine
7.1 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 to radi
ABS (a) absolutna vrijednost
SIGN (a,b) vrijednost od a s predznakom od b
SQRT (a) kvadratni korjen
SIN (a) sinus od a (argument u radijanima)
COS (a) kosinus od a
TAN (a) tanges od a
ASIN (a) arkus sinus - inverzna funkcija od sinusa
ACOS (a) arkus kosinus
ATAN (a) arkus tanges od a
EXP (a) eksponent (prirodni)
LOG (a) prirodni logaritam
LOG10 (a) logaritam u bazi 10
SINH (a) hiperbolini sinus
COSH (a) hiperbolini kosinus
TANH (a) 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:

str. 32 Kratke osnove rada s programskim jezikom FORTRAN


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

str. 34 Kratke osnove rada s programskim jezikom FORTRAN


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

str. 36 Kratke osnove rada s programskim jezikom FORTRAN


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. PRIMJER Programsko rjeenje: Ravninski tapni sustavi


8.1 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 (1)
gdje su Q vektor unutranjih sila i f vektor optereenja:
{
Q = Nx , Ty ,Mz } T

(2)
f = {f , f , m }
T
x y z

a L diferencijalni operator oblika:


d dx 0 0

L= 0 d dx 0 (3)
0 0 d dx
Formalno, za komponente vektora unutranjih sila moe se pisati:
Q = D (4)
gdje je D matrica krutosti presjeka (koja ukljuuju njegove materijalne i geometrijske karakteristike)
EA x 0 0
(5)
D= 0 GA y 0
0 0 EIz

a vektor deformacije presjeka, koji ovisi o vektoru pomaka:


= Lp 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 1.0

h1 h3

h4
1.0

0 l 0 l 0 l

1.0 1.0

h2 h5
0 l
h6 1.0

0 l 0 l

str. 38 Kratke osnove rada s programskim jezikom FORTRAN


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 (8)
odnosno:

(
u Ts + u T H T f dx = u B T D B u dx ) (9)
tj., nakon mnoenja s lijeve strane s uT :
s= (B )
D B u dx H T f dx (10)
T

ili skraeno:
se = k e u F e (11)
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 eij {u i } Fie { } (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 en k nn k no u n Fn
= (13)
0 k on k oo u o Fo

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)
Sile u neotputenim vezama dobivamo iz grupe jednadbi neotputenih veza kao:
s en = k nn u n k no u o Fn (15)
Uvoenjem (6.16) u (6.17) moemo eliminirati otputene pomake:
1 1
s en = k nn u n + k nok oo k on u n k nok oo Fo Fn (16)
ili skraeno
( )
s en = k nn + k nn u n F n Fn (17)
odnosno
sen = k u n F (18)
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 egl = TT k e T
(19)
Fgle = T F e
Preslikavanje se vri matricom transformacije (T), koja ima oblik:
(
cos x l , x g ) ( )
cos y l , x g
T= (20)
(
cos x l , y g ) ( )
cos y l , y g
Uvrtavanjem rubnih uvjeta dobivamo ravnoteu globalnog sustava u sljedeem obliku:
K= k
e
e
gl ; F= 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: ProjectSettings, 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).

str. 40 Kratke osnove rada s programskim jezikom FORTRAN


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 Poetak programa

INPUT Uitavanje ulaznih podataka

STIFFS Izraunavanje lokalnih i globalne matrice krutosti

Izraunavanje sila pune upetosti za svaki tap i proraun globalnog vektora


LOADS
optereenja

SOLVE Proraun sustava i izraunavanje pomaka

FORCE Izraunavanje reznih sila za svaki tap

OUTPUT Ispis rezultata

END Kraj programa

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

C Ucitavanje ulaznih podataka


CALL INPUT()
C Izracunavanje matrica krutosti
CALL STIFFS()
C Izracunavanje vektora opterecenja
CALL LOADS()
C Proracun sustava
CALL SOLVE()
C Izracunavanje reznih sila
CALL FORCE()
C Ispis
CALL OUTPUT()
C 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: FileNew

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)

str. 42 Kratke osnove rada s programskim jezikom FORTRAN


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

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


C DIST(3) - izracunati pomaci (DIST(1)-x,DIST(2)-y,DIST(3)-fi)
C
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

REAL A,B,C ! Fx,Fy,Mz ili Q,L1,L


END STRUCTURE
RECORD /OPTERECENJE/ PLOAD(MXNODE)
RECORD /OPTERECENJE/ MLOAD(MXELEM)
C
C---------------------------------------------------

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):

PROGRAM Stasus2D
C Definiranje varijabli
INCLUDE Stasus2D.inc
C 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 OSUBROUTINE INPUT()
2 C Definiranje varijabli
3 OIMPLICIT NONE
4 OINCLUDE Stasus2D.inc
5 OCHARACTER*13 INPUT1,OUTPU1,DXFOU1
6 C
7 C Ucitavanje imena datoteka
8 OWRITE (*,14)
9 OREAD (*,15) INPUT1
10 OCALL FILNAM(INPUT1,OUTPU1,'IZL')
11 OCALL FILNAM(INPUT1,DXFOU1,'DXF')
12 OWRITE (*,16) OUTPUT
13 OWRITE (*,18) DXFOUT
14 C
15 14OFORMAT (' Ulazna datoteka: ',$)
16 15OFORMAT (A13)
17 16OFORMAT (' Izlazna datoteka: ',A13)
18 18OFORMAT (' DXF datoteka: ',A13)
19 C
20 OOPEN (UNIT=10,FILE=INPUT1,FORM='FORMATTED',STATUS='OLD',ERR=9990)
21 OOPEN (UNIT=11,FILE=OUTPU1,FORM='FORMATTED')
22 OOPEN (UNIT=88,FILE=DXFOU1,FORM='FORMATTED')
23 C
24 C Ucitavanje osnovnog retka
25 READ (10,'(A80)') TEXT
26 WRITE (11,'(A10,A80)') ' Naslov: ',TEXT
27 C
28 C UCITAVANJE OSNOVNIH PARAMETARA MODELA
29 READ (10,*) NELEM,NPOIN,NFIXE,NMATS
30 WRITE (11,20)
31 20 FORMAT (//,' Broj stapova : ',I5,
32 & ' Broj cvorova : ',I5,
33 & ' Broj pridrz. cvorova : ',I5,

str. 44 Kratke osnove rada s programskim jezikom FORTRAN


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

34 & ' Broj materijala : ',I5)


35 C
36 C UCITAVANJE KOORDINATA CVOROVA
37 WRITE (11,30)
38 WRITE (11,31)
39 DO I=1,NPOIN
40 READ (10,*) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY,
41 & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3)
42 WRITE (11,32) IPOIN, CVOR(IPOIN).CX, CVOR(IPOIN).CY,
43 & CVOR(IPOIN).BC(1),CVOR(IPOIN).BC(2),CVOR(IPOIN).BC(3)
44 ENDDO
45 30 FORMAT (/,/,' CVOR X Y PRIDRZ')
46 31 FORMAT ( '---------------------------------------------')
47 32 FORMAT (I5,2F14.3,5X,3I3)
48 C
49 C UCITAVANJE VEZE STAPOVA
50 WRITE (11,40)
51 WRITE (11,41)
52 DO I=1,NELEM
53 READ (10,*) IELEM, STAP(IELEM).MAT,
54 & STAP(IELEM).C1, STAP(IELEM).C2, STAP(IELEM).C3
55 WRITE (11,42) IELEM, STAP(IELEM).MAT,
56 & STAP(IELEM).C1, STAP(IELEM).C2, STAP(IELEM).C3
57 ENDDO
58 40 FORMAT (/,/,' STAP MAT C1 C2 C3')
59 41 FORMAT ( '---------------------------------')
60 42 FORMAT (2I5,3I7)
61 C
62 C UCITAVANJE MATERIJALNIH I GEOM. KARAKTERISTIKA
63 DO I=1,NMATS
64 READ (10,*) IMATS,GEOM(IMATS).A, GEOM(IMATS).I,
65 & GEOM(IMATS).E, GEOM(IMATS).NI
66 WRITE (11,50) IMATS,GEOM(IMATS).A, GEOM(IMATS).I,
67 & GEOM(IMATS).E, GEOM(IMATS).NI
68 ENDDO
69 50 FORMAT (//,' Materijal : ',I5,/
70 & ' Povrsina : ',F15.6,/
71 & ' Moment inercije : ',F15.6,/
72 & ' Modul elsticnosti : ',F15.6,/
73 & ' Poissonov koef. : ',F15.6)
74 C
75 C CRTANJE GEOMETRIJE U DXF-FILE
76 C*** Entities section
77 WRITE (88,'(A,/,A)') ' 0','SECTION'
78 WRITE (88,'(A,/,A)') ' 2','ENTITIES'
79 C
80 L1='Konstrukci'
81 DO ISTAP=1,NELEM
82 X1=CVOR(STAP(ISTAP).C1).CX
83 Y1=CVOR(STAP(ISTAP).C1).CY
84 Z1=0.0
85 X2=CVOR(STAP(ISTAP).C2).CX
86 Y2=CVOR(STAP(ISTAP).C2).CY
97 Z2=0.0
88 CALL DXF_LINE (L1,X1,Y1,Z1,X2,Y2,Z2,1)
89 ENDDO
90 C
91 CALL DXF_CLOSE()
92 C
93 C UCITAVANJE OPTERECENJA....
94 C
95 C TIP OPTERECENJA 1 - CVORNO
96 C MOZE SE ZADATI: SILA U SMJEROVIMA X I Y I MOMENT OKO Z
97 C TIP OPTERECENJA 2 - JEDNOLIKO PO STAPU
98 C ZADAJE SE Q - INTENZITET
99 C L1 - POCETAK DJELOVANJA OD CVORA 1
100 C L - DUZINA DJELOVANJA
101 DO LCVOR=1,NPOIN
102 PLOAD(LCVOR).A=0.0
103 PLOAD(LCVOR).B=0.0
104 PLOAD(LCVOR).C=0.0
105 ENDDO
106 DO LELEM=1,NELEM
107 SLOAD(LELEM).A=0.0
108 SLOAD(LELEM).B=0.0
109 SLOAD(LELEM).C=0.0
110 ENDDO
111 C
112 100 CONTINUE

Kratke osnove rada s programskim jezikom FORTRAN str. 45


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

113 READ (10,*) LCVOR,A,B,C


114 PLOAD(LCVOR).A=A
115 PLOAD(LCVOR).B=B
116 PLOAD(LCVOR).C=C
117 IF (LCVOR.NE.NPOIN) GOTO 100
118 C
119 200 CONTINUE
120 READ (10,*) LELEM,A,B,C
121 SLOAD(LELEM).A=A
122 SLOAD(LELEM).B=B
123 SLOAD(LELEM).C=C
124 IF (LELEM.NE.NELEM) GOTO 200
125 C
126 WRITE (11,61)
127 DO LCVOR=1,NPOIN
128 WRITE (11,60) LCVOR,
129 & PLOAD(LCVOR).A,PLOAD(LCVOR).B,PLOAD(LCVOR).C
130 ENDDO
131 C
132 WRITE (11,62)
133 DO LELEM=1,NELEM
134 WRITE (11,60) LELEM,
135 & SLOAD(LELEM).A,SLOAD(LELEM).B,SLOAD(LELEM).C
136
137 ENDDO
138 C
139 60 FORMAT (I5,3F12.3)
140 61 FORMAT (/,' SILE U CVOROVIMA')
141 62 FORMAT (/,' OPTERECENJE NA ELEMENTIMA')
142 C
143 GOTO 9999
144 9990 WRITE (*,'(/,A40)') ' Nepostojeca ulazna datoteka!'
145 C
146 9999 CONTINUE
RETURN
END

1 OSUBROUTINE FILNAM(FILEIN,FILEOU,EXT)
2 OIMPLICIT NONE
3 OCHARACTER*13 FILEIN, FILEOU
4 OCHARACTER*3 EXT
5 OINTEGER NUM, I
6 ONUM=0
7 O DO I=1,9
8 O NUM=I
9 O IF(FILEIN(I:I).EQ.' ') EXIT
10 O IF(FILEIN(I:I).EQ.'.') EXIT
11 O FILEOU(I:I)=FILEIN(I:I)
12 O ENDDO
13 C
14 O FILEOU(NUM:NUM)='.'
15 O DO I=1,3
16 O FILEOU((NUM+I):(NUM+I))=EXT(I:I)
17 O ENDDO
18 ORETURN
19 OEND

str. 46 Kratke osnove rada s programskim jezikom FORTRAN

You might also like