Aleksandar
S. Stamatović
University professor, Ph.D. and M.Sc. In Physics,
B.Sc. In Physical Chemistry at University of Belgrade, Yugoslavia.
Text related to
teaching subjects
( Sorry, Serbian only!)
Job
title
Full Professor at Faculty of Physics, University of Belgrade,
Yugoslavia.
Full Professor (part time) at Faculty of Physical Chemistry,
University of Belgrade, Yugoslavia.
Honorary Professor of Ion Physics in Institute for Ion Physics,
Faculty of Natural Sciences at Leopold Franzens Universitaet, Innsbruck, Austria.
Key
responsibilities
Responsible for the following subjects:
Department of Physics: Electronics, Automation.
Department of Meteorology: Meteorological Measurements,
Meteorological Information.
Faculty of Physical Chemistry: Application of Computers in Physical
Chemistry,
Instrumental Electronics.
Department
or workgroup
Department of Physics: Chair of Metrology and Applied Physics
Department of Meteorology: Chair of General Meteorology
Institute for Ion Physics
Insert a hyperlink
Insert a hyperlink
Insert a hyperlink
Electronic
mail address
skela@ff.bg.ac.rs skela@mail.ff.bg.ac.rs skela@rudjer.ff.bg.ac.rs
alekstam@lotos.ffh.bg.ac.rs
Aleksandar.Stamatovic@uibk.ac.at
Web
address
Type
some text.
Office
phone
+381-11-630-152 extension 111 or +x381-11-3282-111 extension 819
Electron / molecule / cluster interaction
Contrails
List of some publication in the period 1996-2000.
1
Title: Kinetic energy release in
electron-induced decay reactions of molecular ions: C/sub 3/H/sub 8//sup +/ and
C/sub 3/H/sub 7//sup +/
Author: Matt-S; Echt-O; Stamatovic-A;
Mark-TD
Source: Journal-of-Chemical-Physics. vol.113,
no.2; 8 July 2000; p.616-20
Publication Year: 2000
2
Title: Electron attachment to nitric oxide clusters
and electron impact ionization of carbon monoxide clusters
Author: Senn-G; Muigg-D;
Denifl-G; Stamatovic-A;
Scheier-P; Mark-TDSource:
European-Physical-Journal-D. vol.9, no.1-4; Dec. 1999; p.159-62
Publication Year: 1999
3
Title: Spontaneous and induced dissociation
of singly and multiply charged fullerene ions
Author: Biasioli-F;
Fiegele-T; Mair-C; Senn-G; Matt-S; David-R;
Sonderegger-M; Stamatovic-A; Scheier-P; Mark-TD
Source:
International-Journal-of-Mass-Spectrometry. vol.192; 27 Sept. 1999; p.267-80
Publication Year: 1999
4
Title: Electron attachment to oxygen clusters
studied with high energy resolution
Author: Matejcik-S;
Stampfli-P; Stamatovic-A; Scheier-P; Mark-TD
Source: Journal-of-Chemical-Physics. vol.111,
no.8; 22 Aug. 1999; p.3548-58
Publication Year: 1999
5
Title: Low energy dissociative electron
attachment to ozone
Author: Senn-G; Skalny-JD;
Stamatovic-A; Mason-NJ; Scheier-P; Mark-TD
Source: Physical-Review-Letters. vol.82,
no.25; 21 June 1999; p.5028-31
Publication Year: 1999
6
Title: Electron impact ionization of neutral
and ionized fullerenes: ionization cross-sections and kinetic energy release
Author: Matt-S; Scheier-P; Stamatovic-A; Deutsch-H; Becker-K; Mark-TD
Source:
Philosophical-Transactions-of-the-Royal-Society-London,-Series-A-(Mathematical,-Physical-and-Engineering-Sciences).
vol.357, no.1755; 15 May 1999; p.1201-27
Publication Year: 1999
7
Title: Dissociative electron attachment to
CF/sub 2/Cl/sub 2/
Author: Denifl-G; Muigg-D; Walker-I; Cicman-P; Matejcik-S; Skalny-JD; Stamatovic-A; Mark-TD
Source: Czechoslovak-Journal-of-Physics.
vol.49, no.3; March 1999; p.383-92
Publication Year: 1999
8
Title: Experimental and theoretical determination
of electron ionization cross sections for atoms, molecules and molecular ions
relevant to fusion edge plasmas
Author: Matt-S;
Muigg-D; Denifl-G; Sonderegger-M; Fiegele-T; David-R; Grill-V; Scheier-P;
Mark-TD; Deutsch-H; Becker-K; Stamatovic-A
Source: Czechoslovak-Journal-of-Physics.
vol.48, suppl., pt.S2; 1998; p.333-8
Publication Year: 1998
9
Title: High-resolution electron ionization
study of CO, (CO)/sub 2/ and (CO)/sub 3/: appearance energies and bond
dissociation energies
Author: Muigg-D; Denifl-G; Stamatovic-A; Echt-O;
Mark-TD
Source: Chemical-Physics. vol.239, no.1-3; 15
Dec. 1998; p.409-16
Publication Year: 1998
10
Title: Dissociative electron attachment to
CO/sub 2/
Author: Cicman-P;
Senn-G; Denifl-G; Muigg-D; Skalny-JD; Lukac-P; Stamatovic-A;
Mark-TD
Source: Czechoslovak-Journal-of-Physics.
vol.48, no.10; Oct. 1998; p.1135-45
Publication Year: 1998
11
Title: Dissociative electron attachment to CO
and NO: the O/sup -/ production threshold revisited
Author: Denifl-G; Muigg-D; Stamatovic-A; Mark-TD
Source: Chemical-Physics-Letters. vol.288,
no.1; 15 May 1998; p.105-10
Publication Year: 1998
12
Title: Formation of NO/sup -/ following
electron attachment to NO clusters
Author: Yannan-Chu;
Senn-G; Matejcik-S; Scheier-P; Stampfli-P; Stamatovic-A; Illenberger-E;
Mark-TD
Source: Chemical-Physics-Letters. vol.289,
no.5-6; 19 June 1998; p.521-6
Publication Year: 1998
13
Title: Dissociative electron attachment to NO
molecules and NO clusters
Author: Yannan-Chu;
Senn-G; Scheier-P; Stamatovic-A; Mark-TD; Bruning-F; Matejcik-S; Illenberger-E
Source:
Physical-Review-A-(Atomic,-Molecular,-and-Optical-Physics). vol.57, no.2; Feb.
1998; p.R697-700
Publication Year: 1998
14
Title: Dissociative electron attachment cross
section to CHCl/sub 3/, using a high resolution
crossed beams technique
Author: Matejeik-S;
Senn-G; Scheier-P; Kiendler-A; Stamatovic-A;
Mark-TD
Source: Journal-of-Chemical-Physics. vol.107,
no.21; 1 Dec. 1997; p.8955-62
Publication Year: 1997
15
Title: Electron attachment to oxygen and
oxygen/ozone clusters studied in a high-resolution crossed beams experiment
Author: Matejcik-S;
Kiendler-A; Stampfli-P; Skalny-JD;
Stamatovic-A; Maerk-TD
Source: Zeitschrift-fur-Physik-D-(Atoms,-Molecules-and-Clusters). vol.40, no.1-4;
May 1997; p.70-4
Publication Year: 1997
16
Title: Electron impact ionization and
dissociation of neutral and charged fullerenes
Author: Matt-S; Echt-O; Rauth-T; Duenser-B; Lezius-M; Stamatovic-A; Scheier-P; Maerk-TD
Source: Zeitschrift-fur-Physik-D-(Atoms,-Molecules-and-Clusters). vol.40, no.1-4;
May 1997; p.389-94
Publication Year: 1997
17
Title: Electron attachment to molecules and
clusters of atmospheric relevance: oxygen and ozone
Author: Matejcik-S;
Kiendler-A; Cicman-P; Skalny-J; Stampfli-P; Illenberger-E;
Chu-Y; Stamatovic-A; Mark-TD
Source:
Plasma-Sources,-Science-and-Technology. vol.6, no.2; May 1997; p.140-6
Publication Year: 1997
18
Title: Electron attachment to XCN (X=Br, Cl).
Competition between X/sup -/ and CN/sup $/formation
Author: Bruning-F; Hahndorf-I;
Stamatovic-A; Illenberger-E
Source: Journal-of-Physical-Chemistry.
vol.100, no.51; 19 Dec. 1996; p.19740-6
Publication Year: 1996
19
Title: Dissociative electron attachment to
CF/sub 2/Cl/sub 2/ using a high-resolution crossed-beams technique
Author: Kiendler-A;
Matejcik-S; Skalny-JD; Stamatovic-A; Mark-TD
Source:
Journal-of-Physics-B-(Atomic,-Molecular-and-Optical-Physics). vol.29, no.24; 28
Dec. 1996; p.6217-25
Publication Year: 1996
20
Title: Low-energy electron attachment to
mixed ozone/oxygen clusters
Author: Matejcik-S;
Cicman-P; Kiendler-A; Skalny-JD; Illenberger-E; Stamatovic-A; Mark-TD
Source: Chemical-Physics-Letters. vol.261,
no.4-5; 25 Oct. 1996; p.437-42
Publication Year: 1996
21
TITLE (ENGLISH): Electron attachment to
oxygen, ozone and other compounds of atmospheric relevance as studied with
ultra-high energy resolution
AUTHOR(S): Maerk,-T.D.;
Matejcik,-S.; Kiendler,-A.;
Cicman,-P.; Senn,-G.; Skalny,-J.;
Stampfli,-P.; Illenberger,-E.; Chu,-Y.; Stamatovic,-A. (Institut fuer Ionenphysisk, Leopold Franzens Universitaet, Technikerstr. 25, A-60210 Innsbruck (Austria)
SOURCE (BIBLIOGRAPHIC CITATION): Open Society
Fund, Bratislava (Slovakia) Plasma and Ecology. Basic Problems Bratislava
(Slovakia) Open Society Fund Aug 1996 208 p. p. 21-24 In the frame of ESCAMPIG
XIII
REPORT/PATENT NUMBERS: INIS-SK--99-037
(INISSK99037)
PUBLICATION YEAR: 1996
22
TITLE (ENGLISH): Dissociative electron
attachment to CF sub 2 Cl sub 2 using a high-resolution crossed-beams
technique.
AUTHOR(S): Kiendler,-A.;
Matejcik,-S.; Skalny,-J.D.;
Stamatovic,-A.; Maerk,-T.D.
(Innsbruck Univ. (Austria). Inst. fuer Ionenphysik)
SOURCE (BIBLIOGRAPHIC CITATION):
Journal-of-Physics.-B,-Atomic,-Molecular-and-Optical-Physics. (2 Dec 1996). v.
29(24). p. 6217-6225.
PUBLICATION YEAR: 1996
23
TITLE (ENGLISH): Measured and calculated
cross sections for the electron-impact ionization of C sub 6 sub 0.
AUTHOR(S): Matt,-S.; Duenser,-B.;
Lezius,-M.; Stamatovic,-A.;
Scheier,-P.; Maerk,-T.D. (Universitaet
Innsbruck (Austria)) (and others)
SOURCE (BIBLIOGRAPHIC CITATION):
Bulletin-of-the-American-Physical-Society. (May 1996). v. 41(3). p. 1059b.
REPORT/PATENT NUMBERS: CONF-9605105--
(CONF9605105)
PUBLICATION YEAR: 1996
24
TITLE (ENGLISH): Vibrationally Resolved
Electron Attachment to Oxygen Clusters.
AUTHOR(S): Matejcik,-S.;
Kiendler,-A.; Stampfli,-P.; Stamatovic,-A.;
Maerk,-T.D. (Intitut fuer Ionenphysik, Leopold Franzens Universitaet, Technikerstrasse 25, A-6020 Innsbruck (Austria))
SOURCE (BIBLIOGRAPHIC CITATION):
Physical-Review-Letters. (Oct 1996). v. 77(18). p. 3771-3774.
PUBLICATION YEAR: 1996
Name: Aleksandar Stamatovic
Title: Professor
Academic degrees:
Ph.D.in Physics 1969, M.Sc.in Physics 1966,
B.Sc. Physical
Chemistry 1963
Born: 26.12.1940.
Birth place: Sabac, Yugoslavia
Parents' names:
Sotir, Nadezda
Marital status:
divorced,
Citizenship:
Yugoslav
Addresses:
Official:
Faculty of Physics,
University of
Beograd,
Yu 11001 Beograd, P.O.Box 368, Yugoslavia
Private:
Prvomajska 114a, Yu - 11080 Zemun, Yugoslavia.
Educational
background:
Elementary school
in Sabac (1947-1951).
High school in
Beograd (1951-1959).
University study in
Physical Chemistry at the University of
Beograd, Faculty of
Natural Sciences (1959-1963). Award for
best marks during
studies.
Postgraduate study
also at University of Beograd, Faculty of
Natural Sciences, Department
of Atomic and Molecular Physics in the field of electron-atom and
electron-molecule collision processes in the group of Prof. Milan Kurepa. Master of Science thesis on design and application
of monopole mass spectrometer finished in 1966 at the University of Beograd.
During 1967 and 1968 coworker in the group of Prof. George Schulz, Department
of Applied Science, Yale University, New Haven, CT, USA, where the experimental
part of the Ph.D. thesis has been done. Ph.D. degree 1969 at University of Beograd,
thesis on low energy monochromatic electron beam interaction with molecules.
Professional
activities:
Starting from
October 1963 assistent in the Institute of Physics
Beograd, in the group of Prof. Milan Kurepa, working
in the field of electron atom and electron molecule interactions.
During 1967 and
1968 postgraduate, and during 1969 and 1970 postdoctoral coworker in the group
of Prof. George Schulz, Department of Applied Science, Yale University, New
Haven, CT USA.
Since 1972 teaching
position at the University of Beograd, and starting from April 1974 permanent
teaching position at the University of Kragujevac, Yugoslavia.
During 1974 and
1975 coworker in the group of Prof. Ingolf Hertel, Department of Physics,
University of Kaiserslautern, FR Germany, working in the field of electron
scattering on laser excited Na atoms.
After the untimely
death of Prof. George Schulz in 1975, invited as a guest senior scientist to
maintain the research in the laboratory of late Prof. Schulz, at Department of
Applied Science, at Yale, during 1976 and 1977.
In 1981 Humboldt stipendiat at the Free University Berlin, Department of
Molecular Physics, working in the field of laser preparation of excited atoms
for scattering experiments with electrons, ions and molecules.
Since January 1981 colaborating, part time, with group of Prof. Tilman M„rk, Leopold Franzens University
in Innsbruck, Austria, in the field of electron and photon interaction with van
der Waals clusters.
Starting from
October 1983 permanent teaching position at the University of Beograd, and full
university professorship since June 1986.
Guest full
professor at Institute for Ionphysics, Leopold Franzens University in Innsbruck,Austria,
since academic year 1987/1988.
Teaching
activities:
Since 1972 involved
in university level teaching activities, in Serbo-Croat, German and English, at
the University of Kragujevac, University of Beograd, Leopold Franzens University in Innsbruck and Free University
Berlin, in the following subjects:
General Physics,
Electronics, Gaseous Electronics, Programming Science, Microelectronics,
Applications of microprocessors and microcomputers in scientific
instrumentation, Physics and Chemistry of the Atmosphere, Meteorological
instrumentation, Meteorological communication and data reduction.
Besides teaching
courses at different universities, actively involved in individual scientific
education of students in experimental physics, leading to all academic degrees,
at the universities mentioned above.
Present position:
Full professor at
the Faculty of Physics,
University of
Beograd, Yugoslavia.
Publications:
Over 200
publications, more than one third (over 70) in the well
known international journals.
Video, photography, computers, hiking, skiing, motor boating
Tekstovi u vezi predavanih
predmeta
·
Primena računara u fizičkoj hemiji
·
Instrumentalna elektronika
Studijska grupa fizika
Smer A, B, C, D
Katedra za METROLOGIJU I PRIMENJENU FIZIKU
semestar peti, nedeljni fond časova 4+2+3
ispit: pismeni i usmeni
Uvodne napomene, definicije i klasifikacija sistema.
Nezavisni izvori napona i struje. Pasivni elementi elektronskih
kola.
Omov zakon, Kirhovlljeva pravila, Teveninova teorema o ekvivalentnom
izvoru.
Razdelnik napona. Razdelnik napona za naizmeničnu struju.
RC i RL filtri.
Diode, njihove karakteistike i primena u elektronskim kolima.
Bipolarni tranzistor. Najjednostavniji model tranzistora.
Primena tranzistora kao prekidača.
Emiterski pratioc napona, karakteristike i primena.
Tranzistorski izvor struje, karakteristike i načini njihovog
poboljšanja.
Tranzistorski pojačavač sa zajedničkim emiterom,
karakteristike i primena.
Obrtač faze sa jediničnim pojačanjem i kontinualni
pomerač faze.
Model Ebers-Mola i njegova primena na osnovna kola sa tranzistorima.
Detaljno razmatranje emiterskog pratioca napona i
pojačivača sa zajedničkim emiterom. Odredjivanje tačke
mirovanja.
Strujna ogledala. Izlazni pojačavači, puš-pul veza.
Darlington spoj i super beta tranzistori. Butsrejping sheme.
Diferencijalni pojačavač. Milerov efekat.
Primena proučenih kola u realnim shemama.
Uvod u digitalnu elektroniku. Brojni sistemi.Bulova algebra.
Osnovna logička kola. Sinteza kombinacionih
logičkih kola.
Minimizacija - Karnoove mape.
Kompleksna kombinaciona kola u upotrebi i sheme sa njima.
Dekoderi, ROM, PAL i PLA i njihove primene.
Osnovna sekvencijalna kola.
Brojači i registri. Monostabilna kola.
Kompleksna sekvencijalna kola u upotrebi i sheme sa njima.
Tranzistori sa efektom polja, tipovi i karakteristike.
Osnovna analogna digitalna kola sa FET-ovima.
Povratna sprega i opreacioni pojačavači.
Frekventne karakteristike i stabilnost.
Linearna kola sa operacionim pojačavačima.
Nelinearna kola sa operacionim pojačavačima.
Osnovni pojmovi i specifičnosti industrijske elektronike.
Aktivni filtri. Oscilatori.
Fazno osetljivi detektori i njihova primena.
Osnovni pojmovi i blok shema telekomunikacija.
D/A i A/D konvertori.
Uvod u mikroračunarske sisteme.
Inteligentna instrumentacija.
Literatura:
1. Beleške sa predavanja prof. A. Stamatovića
2. V. Bočvarski i A. Stamatović: Digitalna elektronika,
PMF, Kragujevac 1994.
3. P. Horowitz &
W. Hill: The Art of Electronics, Cambridge University Press, 1989.
Studijska grupa PRIMENJENA FIZIKA I INFORMATIKA
Katedra za
METROLOGIJU I PRIMENJENU FIZIKU
semestar peti, nedeljni fond časova 2+2
ispit: pismeni i usmeni
Uvodne napomene, definicije i klasifikacija sistema.
Funkcije prenosa sistema. Mehanički sistemi.
Elektromehanički sistemi.
Hidraulični sistemi. Pneumatski sistemi.
Stanja sistema. Stabilnost sistema.
Karakterizacija sistema.
Frekventna metoda analize i sinteze sistema.
Sistemi sa više ulaza i izlaza.
Digitalni sistemi automatskog upravljanja.
Komponente digitalnih sistema.
Struktura digitalnih sistema. Funkcija disretnog prenosa.
Stawa digitalnih sistema. Stabilnost digitalnih sistema.
Sinteza digitalnih sistema.
Analiza konkretnih, često korišćenih sistema.
Literatura:
1. Beleške sa predavanja prof. A. Stamatovića
2. Prof. dr Milić R. Stojić: Kontinualni sistemi
automatskog upravljanja, Naučna knjiga, Beograd, 1988.
3. Prof. dr Milić R. Stojić: Digitalni sistemi upravljanja,
Nauka, Beograd, 1990.
Katedra za opštu meteorologiju
semestar peti, nedeljni fond časova 3+3
ispit: usmeni
Merenja temperature , termometri sa tečnošću.
Deformacioni termometri, termografi, električni termometri.
Radijacioni termometri, akustički termometri.
Merenje vlažnosti vazduha.
Psihrometarska metoda merenja vlažnosti.
Merenje padavina i isparavanja.
Merenje zračenja, spektri zračenja Sunca i
Zemlje.
Merenje kratkotalasnog i dugotalasnog zračenja.
Merenje vazdušnog pritska.
Greške i korekcije pri merenju vazdušnog pritiska.
Merenje prizemnog vetra.
Merenje vertikalnog profila vetra.
Merenje atmosferskog elektriciteta.
Osmatranje oblaka i odredjivanje vidljivosti.
Merenje vertikalnih gradijenata meteoroloških elemenata.
Merenje strukture meteoroloških elemenata.
Automatske meteorološke stanice.
Radiosondiranje atmosfere.
Meteorološki radari, princip rada.
Vrste meteoroloških radara i njihova primena u meteorologiji.
Meteorološki sateliti.
Meteorološka merenja za potrebe ekologije.
Primene lasera u meteorološkim merenjima.
Literatura:
1. Beleške sa predavanja prof. A. Stamatovića
2. D.H.
Lenschow, Ed.: Probing the Atmospheric Boundary Layer, AMS, Boston, 1986.
3. D.D
Houghton, Ed.: Handbook of Applied Meteorology, John Wiley & Sons, 1985.
Katedra za opštu meteorologiju
semestar peti, nedeljni fond časova 2+5
ispit: pismeni i usmeni
Uvod.
Korist od meteoroloških informacija.
Svetska meteorološka organizacija (SMO).
Svetsko meteorološko bdenje.
Globalni sistem osmatranja.
Globalni sistem telekomunikacija.
Globalni sistem za obradu podataka.
Evropski centar za srednjeročnu prognozu vremena.
Tehnički aspekti osmatranja i prikupljanja podataka.
Tehnički aspekti telekomnikacionog sistema.
Meteorološli kodovi.
Tehnički aspekti sistema za obradu podataka.
Osobine meteoroloških podataka.
Logička kontrola podataka.
Kritička kontrola podataka.
Meteorološki informacioni sistem (MIS).
Literatura:
1. Beleške sa predavanja prof. A. Stamatovića
2. Beleške sa predavanja prof. Z. Janjića
3. D.D Houghton,
Ed.: Handbook of Applied Meteorology, John Wiley & Sons, 1985.
TTTTT RRRR III
DDDD EEEEE SSS EEEEE TTTTT A K K
T R R I D D E S S
E T A A K K T R R I D D E S S
E T A A K K T R R I D D EEE S EEE T AAAAA KK
T R R I D D E S E T A A K K
T R R I D D E S S E T A A K K
T R R I D D E S S E T A A K K
T R R III DDDD EEEEE SSS EEEEE T A A
K K
SSS TTTTT RRRR A
N N A
S S T R R A A
N N A A
S S T R R A A
NN N A A
S T R R AAAAA N N N AAAAA
S T R R A A N NN A A
S S T R R A A
N N A A
S S T R R A A
N N A A
SSS T R R A A N N
A A
FFFFF OOO RRRR
TTTTT RRRR A N N A
F O O R R T R R
A A N N A A
F O O R R T R R A A NN N A A
FFF O O R R T R R AAAAA N N N AAAAA
F O O R R T R R A A N NN A A
F O O R R T R R A A N N A A
F O O R R T R R A A N N A A
F OOO R R T R R A A N N A A
priredio:
A. Stamatović
PMF - BEOGRAD
1993. & 2000.
Uvod
Kratak priručnik za FORTRAN 77 je namenjen pre svega
studentima za
brzo savladjivanje osnovne sintakse ovog još uvek dosta u
nauci
korišćenog programskog jezika. Pri pisanju, usvojeno
je bezbroj
puta dokazano pravilo da jedan primer vredi znatno više od
brda
reči objašnjenja, zbog čega se, pored navedenih
primera, student
upućuje na zbirku primera izvornih programa i ispitnih
zadataka -
programa. Priručnik je napisan u konciznom stilu, sa
`eljom da
korisnici brzo nadju ono što tra`e u čemu im poma`u iscrpan
sadr`aj i indeks pojmova. Kao uzor korišćen je "D`epni
vodič -
FORTRAN 77" Clive Page-a, čija je struktura materijala
usvojena, a
i većina navedenih primera su slični ili isti. Ljubiteljima
perfekcije i potpunosti nije se moglo izići u susret,
jer su ova
dva stava u jasnoj suprotnosti sa prethodno iznetim. Ovaj
svestno
učinjen nedostatak se mo`e lako otkloniti
korišćenjem navedene literature.
Znakovi i linije
Skup znakova
Skup znakova koje podr`ava FORTRAN čine 26 slova latinice
(A-Z) i
sledećih trinaest znakova:
+
-
*
/
(prazno mesto - blank)
=
(
)
.
,
:
'
$
Prazno mesto - blank u FORTRAN-u nema značaja sem u okviru
slovne
konstante, te prema tome GO TO i GOTO imaju isto
značenje.
Posebno treba napomenuti da FORTRAN ne prepoznaje navodnice
", te
se umesto njih koristi apostrof '.
Kao i u svim drugim programskim jezicima nula 0 i slovo O
se
nesmeju mešati.
Takodje treba napomenuti da znak jednakosti nema
matematičko
značenje jednakosti, već označava pridavanje
vrednosti izraza sa
desne strane znaka jednakosti promenljivoj ili konstanti
naznačenoj na levoj strani znaka jednakosti.
Izgled linije
Kompajler FORTRAN-a koristi prva 72 znaka na liniji. Znakovi
od 73
nadalje se ignorišu i mogu se koristiti za posebna obele`avanja.
Slovna mesta 1-5 se koriste za oznaku - labelu, koja nemora
da ima
pet cifara i cifre nemoraju da počnu na prvom slovnom
mestu, mada
je tako preglednije.
Početna i linije nastavka iskaza
Početna linija
Početna linija mora imati blank - prazno mesto na slovnom
mestu
broj šest, mesta 1-5 sadr`e oznaku - labelu, ili su prazna.
To
znači da na slovnom mestu jedan nesme da bude C ili *.
Linija produ`enja - nastavka iskaza
šesto slovno mesto slu`i za obele`avanje produ`etka linije.
Naime,
ako prvih 72 znaka nisu bili dovoljni za `eljeni iskaz, linija
se
mo`e produ`iti na taj način da sledeća linija ima
na slovnom mestu
šest neki znak, najčešće * ili $. Ovaj postupak
se mo`e ponavljati
potreban broj puta.
Linije komentara
Svaka linija koja počinje sa C ili * na prvom slovnom
mestu
predstavlja komentar, koji mo`e da sadr`i i znake koje ne
podr`ava
FORTRAN. Linija komentara mo`e biti locirana bilo gde u okviru
programa, tj. ispred naredbe END. komentar mo`e da se umetne
čak i
izmedju početne linije i linije nastavka.
Imena i oznake
Simbolička imena
FORTRAN koristi simbolička imena koja su data pojedinačnim
vrednostima konstanti i promenljivih, kao i skupna imena za
indeksno promenljive,
funkcije, potprograme, zajedničke (common)
blokove i programske jedinice. Simboličko ime se sastoji
od šest
znakova od kojih prvi mora biti slovo. Neki kompajleri podr`avaju
i du`a imena. Prvo slovo odredjuje i tip podataka. Slova I
do N
odredjuju tzv. celobrojni - INTEGER tip podataka. Ostala slova
odredjuju realni - REAL tip podataka. Ova podela se mo`e izmeniti
iskazom IMPLICIT ili specificiranjem tipa podataka.
Lokalna i opšta imena
Imena programskih jedinica, ulaznih tačaka (entry points)
i
zajedničkih blokova (common blocks) su opšta (globalna).
Isto ime
se nesme da koristi za dva ili više globalnih pojmova u okviru
jednog programa. Globalno ime nesme da bude isto bilo kom
lokalnom
imenu u okviru iste programske jedinice.
Imena konstanti, variabli, indeksnih promenljivih i iskaznih
funkcija su lokalne za programsku jedinicu, te se ista imena
mogu
koristiti u drugoj programskoj jedinici.
Takodje su imena kontrolnih promenljivih u DO petljama lokalnog
karaktera i mogu se koristiti više puta u okviru iste programske
jedinice.
Ključne reči
Ključna reč je niz karaktera koji čini bitan
stalni deo FORTRAN
iskaza. Mnoge ključne reči imaju oblik
važećih simboličkih imena
(DATA,CLOSE,IF,ERR itd.), te u principu mogu da se koriste
dvojako, mada se to ne preporučuje, iako FORTRAN nema
rezervisanih
reči. Ovde treba napomenuti da PC DOS ima rezervisanih
reči i ako
se napiše program sa imenom npr. IF.FOR, startovanje novostvorene
izvršne datoteke IF.EXE neće biti moguće sa DOS
komandne linije
čak iako se IF.EXE nalazi u nekom drugom subdirektorijumu
a ne u
DOS subdirektorijumu.
Oznake - labele
Kolone 1-5 na FORTRAN liniji su rezervisane za oznake - labele.
Prazna mesta i vodeće nule se ignorušu, a labela nemora
da bude
podešena ni prema levoj ni prema desnoj ivici. Svaki FORMAT
iskaz
mora da ima labelu. Bilo koji drugi iskaz mo`e da ima labelu
ali
se pozivi mogu vršiti samo na labele izvršnih iskaza.
Vrste podataka
FORTRAN ima 6 tipova podataka: integer, real, double precision,
complex, logical i character.
Integer, real, double precision i complex su poznati pod nazivom
aritmetički tip podataka. Konverzija medju njima se vrši
automatski u aritmetičkim iskazima, DATA i PARAMETER
iskazima, ali
se NE VR[I pri pozivu potprograma i ulazno-izlaznim iskazima.
Prostor u memoriji
Double precision i complex tipovi podataka uzimaju duplo više
memorijskog prostora.
Aritmetički i slovni tipovi nemogu da dele isti deo memorijskog
prostora upotrebom COMMON ili EQUIVALENCE iskaza.
Celobrojni
Celobrojna konstanta se sastoji od niza decimalnih cifara
kojima
prethodi znak plus ili minus. Vodeće nule se
ignorišu, a nisu
dozvoljeni zarezi, tačke ili eksponenti. Ispravni primeri
su:
001 -546 +100 4500
Celobrojni podaci se mogu egzaktno pretvoriti u mašinski kod.
Realni
Realni podaci se čuvaju u mašini u obliku broja sa pomičnim
zarezom.Premda se nula i mali realni podaci mogu
tačno predstaviti
u mašinskom kodu, opšte je pravilo da se veliki realni brojevi
nemogu tačno predstaviti u računaru, te stoga
treba izbegavati
testove na tačnu jednakost koji uključuju realne
podatke.
Realne konstante moraju imati decimalnu tačku ili decimalnu
tačku
i eksponent. Eksponent se sastoji od E i integer konstante
koja
predstavlja ekponent za osnovu deset. Zarezi nisu dozvoljeni
a
znaci su opcioni ispred eksponenta i dela ispred eksponenta.
Realne konstante se mogu predstaviti sa neograničeno
mnogo
decimalnih mesta, ona koja prelaze kapacitet mašine se ignorišu.
Primeri ispravnih realnih konstanti su:
-7. 3.14 5E3 6.67E-13
Dvostruka tačnost
Konstante dvostruke tačnosti su predstavljene eksponentom
kome
prethodi slovo D, čak iako je eksponent nula. Nije dovoljno
da se
konstanta napiše sa dvostruko više cifara. Ispravni primeri
su:
-1D0 3.14159265358989D0 +5D3 6.67D-13
Kompleksni
Kompleksni tip promenljive se sastoji iz para realnih ili
integer
brojeva, napisanih u zagradi i rastavljenih zarezom, a koji
predstavljaju realni i imaginarni deo kompleksnog broja.Primeri:
(2,25) (3.14,-2E3) (-.321,7654)
Logički
Postoje samo dve logičke konstante: .true. i .false.
Slovni
CHARACTER tip podataka se koristi za rad sa tekstom. Svaka
slovna
variabla mo`e da sadr`i čitav niz slova, ali njena du`ina
mora da
bude deklarisana u IMPLICIT ili CHARACTER iskazima. Slovna
variabla se sastoji od niza slova napisanih izmedju apostrofa:
'greska' '(4x,3f10.5)' 'vas broj je'
Polja, indeksi i podnizovi
Uredjen skup podataka istog tipa (i iste du`ine za slovne
promenljive) naziva se polje podataka ili polje indeksno
promenljivih, ponekiput i matrica podataka. Ovakva polja mogu
imati
do sedam dimenzija (sedam indeksa). Pojedinačni element
polja je
okarakterisan imenom polja i skupom indeksa rastavljenih zarezom
i
napisanih u zagradi. Granice indeksa moraju sa budu deklarisane
u
iskazu za tip podataka, COMMON ili DIMENSION iskazu.
Indeksi
Indeksi moraju da budu celobrojne vrednosti u datim granicama.
Mogu da budu i celobrojni izrazi bilo kakve kompleksnosti,
mogu da
uključuju dalje pozive na polja i pozive na funkcije,
pod uslovom
da nemaju uticaja na druge indekse istog polja. Primeri:
MAT(0,-10) SUPER(i,j,k,l,m,n) D(K(N(INDEX)))
Slovni podnizovi
Slovni podniz
predstavlja skup uzastopnih slova u okviru slovne
promenljive ili polja slovnih promenljivih. Poziv na podniz
se
sastoji od imena promenljive ili polja promenljivih i dva
celobrojne vrednosti, razdvojene s dve tačke i napisane
u zagradi.
Celobrojne vrednosti ukazuju na polo`aj prvog i poslednjeg
slova u
nizu. Bilo koji od ova dva pokazivača mo`e da se izostavi,
u tom
slučaju vrednost za prvi je 1, a za drugi N, gde je N
broj
poslednjeg slova u originalnoj slovnoj promenljivoj. Primer:
CHARACTER*8 LANDS(100)
LANDS(55)='SCOTLAND'
Onda je poziv na LANDS(55)(2:4) jednak 'COT'.
Izrazi
Aritmetički izrazi
Aritmetički izrazi se koriste da bi se navele
numeričke operacije
koje računar treba da izvrši. Oni se sastoje od jednog
ili više
članova sastavljena od aritmetičkih tipova podataka
(integer, real,
dvostruka tačnost ili kompleksni). Aritmetički izrazi
mogu da
sadr`e podizraze u zagradama i pozive funkcija. Rezultat
numeričkih operacija u okviru aritmetičkog izraza
je numerička
vrednost izra`ena jednim od aritmetičkih tipova podataka.
Najjednostavniji aritmetički izraz je konstanta, varijabla,
element polja ili poziv funkcije.
Aritmetički izraz mo`e imati jednu od sledećih formi:
član
+ član
- član
exp op član
gde je op jedan
od sledećih aritmetičkih operatora:
+ sabiranje
- oduzimanje ili negacija
* mno`enje
/ delenje
** stepenovanje.
članovi mogu biti konstanta bez znaka, imenovana konstanta,
promenljiva, element polja, poziv na funkciju ili ceo aritmetički
izraz u zagradi.Redosled izračunavanja operacija u izrazu
je
sledeći:
1. izraz u zagradi
2. poziv na funkciju
3. stepenovanje
4. mno`enje ili delenje
. sabiranje ili oduzimanje.
U okviru svake od ovih grupa izračunavanje teče
sa leve na desnu
stranu, izuzev za stepenovanja, koja se izvode sa desne
na levu
stranu. Prema tome, A/B/C je isto
što i (A/B)/C, dok je A**B**C
isto što i A**(B**C). Sve kombinacije četiri aritmetička
tipa
podataka su dozvoljene osim kompleksni brojevi sa dvostrukom
preciznošću.
Ako operator ima dva operanda istog tipa, rezultat je takodje
tog
tipa. Ako operandi nisu istog tipa, dolazi do implicitne
konverzije u smeru:
celobrojni, realni, kompleksni brojevi ili double precision.
Jedini izuzetak od ovog pravila je da vrednost stepenovana
na
celobrojni eksponent ne trpi konverziju. Ako je eksponent
negativan, vrednost se računa kao recipročna vrednost
dobijena sa
pozitivnim eksponentom:
2.0**(-3) => 1/(2.0**3) => 1/8.0 => 0.125.
U ostalim slučajevima vrednost stepenovanja se
računa preko
logaritama.
Delenje celobrojnih uvek rezultuje u odbacivanju necelobrojnog
dela. Zbog toga ne treba izostavljati decimalnu
tačku. Primeri:
-8/3 => -2
2**(-3) => 1/(2**3) => 1/8 => 0
Zagrade menjaju redosled operacija i treba ih koristiti radi
veće
jasnoće.
Izrazi sa celobrojnim konstantama
Ovi izrazi mogu da se koriste za deklarisanje granica polja,
ili
du`ine slovnih promenljivih, ili da se postave vrednosti
imenovanih konstanti u okviru PARAMETER iskaza. Izrazi sa
celobrojnim konstantama se sastoje samo od stvarnih i imenovanih
celobrojnih konstanti, operatora i zagrada. Poziv na funkcije
nije
dozvoljen.
Slovni izrazi
Postoji samo jedan slovni operator, koji se označava
sa //, a
predstavlja spajanje dva niza. Slovni izraz, cexp, ima oblik:
cterm
ili cexp//cterm
gde je cterm slovna konstanta, promenljiva, element polja,
podniz
ili poziv na funkciju, ili kompletan slovni izraz u zagradama.
Npr.:
MAILST(1:30) =
FSTNAM(:1)//' '//SURNAM
Slovni izraz koji sadr`i concatenation sa izrazom promenljive
du`ine ne sme se koristiti u slovnom izrazu izuzev u iskazu
pridru`ivanja vrednosti.(slovni izraz promenljive du`ine se
specificira kao *(*).
Izraz za slovnu konstantu u okviru PARAMETER iskaza mo`e da
koristi samo od imenovanih i aktuelnih konstanti kao i operatora
//.Poziv na funkciju i podnizove nije dozvoljen.
Izrazi odnosa
Izrazi odnosa imaju za vrednost logičku promenljivu.
Oni mogu da
imaju jedan od dva oblika:
exp relop exp
ili cexp
relop exp
gde je exp bilo koji aritmetički izraz, cexp je bilo koji slovni
izraz, a relop
je jedan od sledećih šest operatora:
.LT. manje od
.LE. manje ili jednako
.EQ. jednako
.GT. veće od
.GE. veće ili jednako
.NE. nejednako
Aritmetički izrazi mogu biti različitog tipa podataka,
jer se vrši
konverzija kada je potrebno (medjutim COMPLEX se nemo`e porediti
sa DOUBLE PRECISION). COMPLEX tip mo`e jedino da koristi operatore
.EQ. and .NE. ali se ne preporučuje, jer se vrednosti,
izra`ene u
pomičnom zarezu, u opštem slučaju ne čuvaju
u računaru u egzaktnom
obliku.
Kada se dva slovna izraza uporedjuju oni mogu imati
različite
du`ine; ako je tako, kraći se nastavi blankovima. Izrazi
se
uporedjuju svaki karakter posebno dok se ne naidje na razliku
ili
na kraj.
Logički izrazi
Ovi izrazi se sastoje od logičkih članova i operatora
i daju kao
rezultat TRUE ili FALSE. Oni mogu biti korišćeni u logičkim
IF ili
blok IF ili pridru`enim logičkoj promenljivoj ili elementu
polja.
Oblik logičkog izraza, lexp, mo`e biti:
lterm
.NOT.lterm
lexp lop lterm
gde je lop jedan od logičkih operatora:
.AND.
.OR.
.EQV. ili
.NEQV.
Redosled
izvršavanja logičkih izraza koji sadr`e odnosne podizraze
je sledeći:
1.
aritmetički izrazi
2. odnosni izrazi
3. operator .NOT.
4. operator .AND.
5. operator .OR.
6. operatori .EQV. i .NEQV.
Treba primetiti da se operatori .EQV. koji izra`ava
logičku
ekvivalentnost i .NEQV. neekvivalentnost (koji se ponekad
zove
ekskluzivno OR) ne mogu da budu korišćeni u istom podizrazu.
Zagrade se mogu uvek koristiti da pojasne redosled
izračunavanja
slo`enih izraza.
Struktura programa
Programske jedinice
Izvršni program mora da sadr`i tzv. glavnu programsku jedinicu.
Pored toga mo`e da sadr`i proizvoljan broj potprogramskih
jedinica
bilo kog od tri postojeća tipa: potprogram, funkciju
ili blok
podataka. Fortranski program mo`e da koristi spoljne funkcije
i
potprograme koji su napisani u drugim programskim jezicima.
Vrste iskaza
INTEGER, REAL, DOUBLE
PRECISION, COMPLEX, LOGICAL i CHARACTER
su iskazi tipa podataka.
IMPLICIT, PARAMETER, DIMENSION, COMMON, EQUIVALENCE,
EXTERNAL, INTRINSIC, SAVE i svi iskazi tipa podataka se zajedno
nazivaju iskazi specifikacije.
PROGRAM, SUBROUTINE, FUNCTION, BLOCK DATA, ENTRY, DATA, FORMAT,
iskazna funkcija i svi iskazi specifikacije se zajedno nazivaju
neizvršnim iskazima.
Iskazi pridru`ivanja
(uključujući i ASSIGN),
svi oblici IF i GO TO
iskaza, kao
i ELSE, ELSE IF, END IF, DO, CONTINUE, CALL, RETURN,
READ, WRITE, PRINT,
OPEN, CLOSE, INQUIRE, REWIND, BACKSPACE, END
FILE, STOP, PAUSE
i END su izvršni iskazi.
Redosled iskaza
Iskazi u svakom
programu moraju da slede pravila o redosledu:
PROGRAM, SUBROUTINE,
FUNCTION or BLOCK DATA
IMPLICIT
PARAMETER
Drugi iskazi specifikacije FORMAT
Iskazne funkcije i
Izvršni iskazi ENTRY DATA END
To znači da IMPLICIT iskazi moraju da budu pre ostalih
iskaza
specifikacija izuzev PARAMETER, koji mo`e da bude bilo gde
u
okviru iskaza specifikacija.
Linije komentara mogu biti bilo gde, ali pre END iskaza, koji
mora
da bude na kraju.
redosled izvršavanja
Izvršavanje programa počinje sa prvim izvršnim iskazom
glavne
programske jedinice i nastavlja se sekvencijalno, ali podlo`no
efektima kontrolnih
iskaza GO TO, IF, CALL itd.
Izvršavanje se
završava sa
END iskazom, ili STOP iskazom. Medjutim, pojedine
greške mogu izazvati prerani prekid programa.
Glavni program (MAIN PROGRAM)
Mo`e ali nemora da počne sa iskazom PROGRAM i mo`e da
sadr`i sve
ostale iskaze
osim SUBROUTINE, FUNCTION, BLOCK DATA, ENTRY ili
RETURN. Iskaz SAVE se ignoriše ukoliko se nadje u glavnom
programu.
Oblik iskaza
PROGRAM je:
PROGRAM ime
Ovaj iskaz je opcioni jer se ime ne koristi dalje u programu,
ali
mo`e biti korisno pri dokumentaciji i za saopštavanje
grešaka.
BLOCK DATA jedinica
se koristi da inicijalizuje sadr`aje imenovanih COMMON blokova.
Block data mora početi na jedan od ova dva
načina:
BLOCK DATA ili
BLOCK DATA ime
Ime je bitno samo ako ima više od jednog bloka. Ime mo`e da
se
koristi u EXTERNAL iskazu u drugoj programskoj jedinici (kao
što
je glavni program) da bi se osiguralo uključivanje block
data u
kompletan program. U većini sistema na ovaj
način se imenovani
blokovi mogu automatski koristiti iz pre-kompiliranih biblioteka
potprograma.
Block data mo`e da sadr`i samo IMPLICIT, PARAMETER, DIMENSION,
COMMON, EQUIVALENCE,
SAVE, DATA, END i iskaze tipa podataka kao
i
komentare.
Isti COMMON mo`e se naći samo u jednom od više block
data
jedinica.
Funkcijski potprogram
Počinje sa FUNCTION iskazom i mo`e da sadr`i sve iskaze
osim
PROGRAM, SUBROUTINE i BLOCK DATA i ima oblik:
FUNCTION ime(d,d...d) ili
tip FUNCTION ime(d,d...d)
gde je tip jedan od INTEGER, REAL, DOUBLE PRECISION, COMPLEX,
LOGICAL, CHARACTER
ili CHARACTER*len; d je fiktivni argument koji
mo`e biti
promenljiva, polje, funkcija
ili potprogram. Broj
fiktivnih argumenata mo`e biti nula, ali zagrade moraju ostati
da
bi se se uočila razlika izmedju poziva na funkciju i
promenljive:
X = RANDOM( )
Forma specifikacije du`ine *len je ista kao i za CHARACTER
tip
iskaz izuzev što se nemogu koristiti imenovane konstante.
CHARACTER*(*)FUNCTION DATUM(DAN)
U okviru podprograma ime funkcije se ponaša kao
obična
promenljiva, kojoj mora biti pridru`ena vrednost pre RETURN
ili
END iskaza koji kontrolu predaju programskoj jedinici koja
je
zvala potprogram. Tip podataka funkcije (kao i du`ina slovnog
tipa promenljive) mogu biti implicitno odredjeni imenom ili
specificirani u FUNCTION iskazu ili potonjim iskazima tipa
promenljive.
Alternativna imena i ulazne tačke mogu da se specificiraju
ENTRY
iskazom (ali alternativni RETURN iskazi nisu dozvoljeni).
Funkcija mo`e da se koristi u bilo kojoj programskoj jedinici
pomoću poziva na funkciju koji mo`e da bude deo nekog
izraza, ali
funkcija nesme da poziva samu sebe direktno ili indirektno. Tip
podataka imenovane funkcije (i du`ina za slovne funkcije)
moraju
se specificirati korišćenjem imena funkcije u iskazu
tipa podataka
u svakoj programskoj jedinici u kojoj se funkcija poziva ukoliko
implicitan tip ne odgovara stvarnom tipu.
Premda se informacija mo`e preneti u ili iz FUNCTION potprograma
preko argumenata, COMMON blokova ili kroz spoljne datoteke,
ima
nekih ograničenja u korišćenju funkcija sa "bočnim
efektima" koji
čine boljim korišćenje SUBROUTINE potprograma za
te slučajeve.
Funkcija koji vrši ulazno/izlazne radnje nesme biti u izlaznoj
listi WRITE ili PRINT iskaza.
Funkcija koja pridru`uje vrednost sopstvenom argumentu ili
članovima COMMON bloka, nesme se pozivati u izrazu koji
uključuje
bilo koji drugi član koji je promenjen izvodjenjem funkcije.
FUNCTION se mo`e koristiti slobodno u svim
slučajevima ako joj se
vrednostt svih argumenata odr`ava i nema efekta na COMMON
blokove
i spoljne datoteke.
Pozivanje na funkcije
Poziv na funkciju mo`e da se da se vrši u bilo kom izrazu
odgovarajućeg tipa u obliku
fime(a,a...,a)
gde je fime ime spoljne, unutarnje ili iskazne funkcije, a
svako a
je stvarni argument.
Potprogram SUBROUTINE
Počinje sa
SUBROUTINE sime(d,d,...,d) ili
SUBROUTINE sime
gde je sime simbolično ime a svako d je fiktivni argument
koji mo`e
da bude: zvezdica (čime se označava alternativna
povratna tačka),
ili ime fiktivne promenljive, polja, potprograma ili funkcionog
potprograma. Potprogram SUBROUTINE mo`e da sadr`i bilo koji
iskaz
osim PROGRAM, FUNCTION, and
BLOCK DATA.
SUBROUTINE mo`e da se zove iz bilo koje druge programske jedinice
osim iz sebe same, direktno ili indirektno.
Informacije se mogu preneti u ili iz potprograma preko argumenata,
COMMON blokova i spoljnih datoteka.
Kontrola se vraća programskoj jedinici koja je zvala
potprogram po
izvršenju END ili
bilo kog RETURN iskaza.
Alternativna imena potprograma i ulazne tačke mogu se
specificirati pomoću
ENTRY iskaza.
CALL iskaz
ima oblik:
CALL sime(a,a,...,a) ili
CALL sime
i slu`i za izvršavanje procedura specificiranih potprogramom
imena
sime sa stvarnim argumentima a.
Argumenti potprograma
Svrha potprogramskog ili poziva funkcije je da pridru`i stvarne
argumente fiktivnim argumentima potprograma i da prenese kontrolu
potprogramu. Stvarni argumenti moraju da se sla`u sa fiktivnim
u
redosledu, broju, tipu podataka (sem u slučaju imena
potprograma i
alternativnih specifikatora povratka). Slede detaljna pravila:
Ako je fiktivni argumenat promenljiva onda stvarni argumentt
mo`e da bude: promenljiva, element polja, podniz, ili izraz.
u
slučaju slovnih promenljivih, du`ina mora tačno
da odgovara,
medjutim svaki fiktivni argument du`ine *(*) uzima du`inu
stvarnog argumenta. Tekuća vrednost du`ine mo`e da se
nadje
unutarnjom funkcijom LEN.
Ako je stvarni argument izraz koji se sastoji od više
promenljivih, onda potprogram ne sme da dodeljuje nove vrednosti
odgovarajućoj fiktivnoj promenljivoj, naime, izraz se
izračunava
samo jednom. Npr. ako sadr`i indeksne reference, promene u
toku
potprograma ne menjaju element polja kojim se dobija vrednost
izračunata potprogramom.
Ako je fiktivni argument polje onda stvarni argument mo`e
da
bude: polje, element polja, ili podniz elementa polja. Fiktivni
argumenti mogu imati različite granice dimenzija od stvarnih
argumenata ali ne smeju prelaziti alocirane granice. Ako je
stvarni argument element polja ili podniz elementa polja onda
je
njime specificirana osnovna adresa (tj. prvi element) fiktivnog
polja. Treba primetiti da donje granice stvarnih i fiktivnih
argumenata moraju da odgovaraju.
U slučaju slovnog tipa stvarno polje se tretira kao
kontinualni niz karaktera, ignorišući granice elemenata
polja,
tako da fiktivni argument polja nesme da bude veći po
du`ini od
stvarnog polja argumenata. Fiktivni argument polja sa
specificiranom du`inom *(*) uzima du`inu stvarnog argumenta
za
svaki element polja.
Ako je fiktivni argument ime funkcije onda stvarni argument
mora da bude ime spoljne, unutarnje ili fiktivne funkcije.
Ako je fiktivni argument ime potprograma, onda stvarni
argument mora da bude ime stvarnog ili fiktivnog potprograma.
Ako je fiktivni argument zvezdica (što je dozvoljeno samo
u
iskazu SUBROUTINE ili u ENTRY iskazu potprograma) onda stvarni
argument mora biti labela izvršnog iskaza kojoj prethodi zvezdica.
Ovo specificira alternativnu tačku povratka.
Ako poziv potprograma uzrokuje da dva ili više fiktivnih
argumenata treba da budu pridru`eni jednom stvarnom argumentu,
onda se ne sme dodeliti vrednost fiktivnom argumentu.
Slično
pravilo va`i za članove COMMON blokova koji postaju pridru`eni
fiktivnim argumentima.
Npr. ako je potprogram specificiran:
SUBROUTINE SUB(X,Y,Z)
COMMON C
a pozivna jedinica sadrži sledeće iskaze:
COMMON S
CALL SUB(R,R,S)
Onda su X i Y asocirani sa R, a Z i C pridru`eno S tako da
u
okviru potprograma nemogu biti pripisane vrednosti nijednom
argumentu X,Y,Z i
C.
Ime potprograma ili funkcije mo`e da se prenosi kroz bilo
koji broj poziva potprograma; fiktivno ime mora da se deklariše
u
EXTERNAL iskazu u svakoj programskoj jedinici koja prenosi
ime na
drugi potprogram čak kada je funkcija unutarnja.
Alternativni return specifikatori u potprogramima nemogu da
budu preneti na drugi nivo potprograma.
RETURN iskazi
vraćaju kontrolu programskim jedinicama koje su zvale
funkcijski
ili obični potprogram i imaju oblik:
RETURN
Alternativni oblik koji se mo`e da koristi samo za SUBROUTINE
je:
RETURN e
gde je e celobrojni izraz koji specificira broj alternativne
povratne tačke u listi argumenata. Ako SUBROUTINE (ili
ENTRY)
iskaz sadr`i N fiktivnih argumenata specificiranih zvezdicom,
i
vrednost e je u opsegu 1 do N, onda se kontrola
vraća e-toj labeli
u listi argumenata CALL iskaza. Ako e nije u tom opsegu normalni
povratak se dešava. Npr.:
CALL SUBX(Y,Z,*170,*180,*190)
izvršavanje
RETURN M
gde M ima vrednost 2, uzrokuje povraćaj kontrole ne na
iskaz
neposredno posle CALL već na labelu 180.
Premda alternativni povratci nisu u skladu sa principima
strukturnog programiranja, oni mogu biti korisni pri traganju
za
greškama u potprogramima.
ENTRY iskazi
specificiraju alternativnu ulaznu tačku za potprogram:
ENTRY eime(d,d,...d)
gde je eime je ime ulazne tačke, a svako d je fiktivni
argument.
Ako nema argumenata zagrade mogu da budu izostavljene.
ENTRY iskaz mo`e da se koristi bilo gde u programskoj jedinici
osim u IF bloku
ili DO petlji.
Ako se ENTRY koristi u SUBROUTINE onda eime je dodatno ime
potprograma, koje mo`e da se koristi u CALL iskazima u drugim
programskim jedinicama. Fiktivni argumenti moraju da slede
pravila
za SUBROUTINE iskaz.
Ako se ENTRY koristi u FUNCTION potprogramu, onda je eime
dodatno
ime funkcije koje se mo`e koristiti u pozivima funkcije. Fiktivni
argumenti moraju tada da slede pravila za FUNCTION iskaz.
Ako je FUNCTION ime slovnog tipa, sva ostala eimena moraju
biti
slovnog tipa i iste du`ine. Ako je
samo jedan du`ine *(*) onda svi
moraju imati du`inu *(*).
Lista argumenata za svaki ENTRY iskaz mo`e da bude
različita ali
pri svakom ulazu fiktivni argumenti drugih ulaza ne sme se
koristiti ni na koji način osim ako nisu fiktivni argumenti
aktuelnog ENTRY.
Korišćenje alternativnih ENTRY tačaka nije u skladu
sa principima
modularnog programiranja, ali mo`e da bude pogodno u nekim
slučajevima.
Funkcije u iskazu
Odnos koji dovoljno jednostavan da se mo`e formulisati u jednom
iskazu nazivaju se iskazne funkcije ili funkcije u iskazu
i mogu
se koristiti samo u okvirima jedne programske jedinice. Funkcija
i
argumenti mogu da se pojave u iskazima tipa promenljive. Opšti
oblik:
fime(d,d,...,d) = izraz
gde je fime simboličko ime funkcije a svako d je fiktivni
argument, odnosno njegovo ime, a izraz je onaj koji definiše
funkciju. U ovom izrazu nemo`e se naći iskazna funkcija
koja je
definisana u iskazima koji slede, kao ni slovni podaci promenljive
du`ine, ili bilo kakvi podnizovi. Imena fiktivnih argumenata
su
lokalna za iskaznu funkciju i mogu se koristiti nezavisno
u
ostatku programa.
Primer:
LOGICAL DIGIT
CHARACTER CHAR
DIGIT(CHAR) = CHAR.GE.'0'.AND.CHAR.LE.'9'
VABS(X,Y,Z) = SQRT(X**2+Y**2+Z**2)
Unutarnje funkcije
Specifično ime funkcije je potrebno samo ako ga treba
predati kao
stvarni argument potprograma, u svim drugim
slučajevima se mo`e
zanemariti. Treba primetiti da sledeće in line funkcije
(videti
tabelu 2) nemogu da budu predate kao stvarni argumenti; specifična
imena svih ostalih funkcija koje se koriste na ovaj
način moraju
da budu deklarisane u INTRINSIC iskazu.
Tabela 2 navodi unutarnje funkcije standardnog FORTRAN-a.
Treba
primetiti da standard ne zabranjuje ostvarivanje dodatnih
funkcija.
Uglovi se mere u radijanima za sve trigonometrijske funkcije.
Ilegalno je koristiti argumente koji bi dali
matematički
nedefinisan rezultat, ili rezultat koji je van opsega brojanja.
Ako se ime unutarnje funkcije pojavi u EXTERNAL iskazu, ili
kao
ime polja, ili ime fiktivnog argumenta, onda gubi svojstvo
unutarnje funkcije u toj programskoj jedinici.
Iskazi za specificiranje
IMPLICIT iskaz
Tip podataka se mo`e postaviti eksplicitno iskazom tipa ili
FUNCTION iskazom, inače je tip odredjen prvim slovom imena i
to
slova I do N su integer, a ostali su real tip. IMPLICIT iskaz
mo`e da se koristi da se ovo implicitno pravilo promeni za
sva
simbolična imena u programskoj jedinici. INTRINSIC iskaz
ne utiče
na tip unutrašnjih funkcija. Primer opšteg oblika:
IMPLICIT tip(c,c,...c), tip(c,c,...c)...
Više IMPLICIT iskaza mo`e biti u jednoj programskoj jedinici,
ali
se značenje jednog slova ne sme menjati više puta. Primer:
IMPLICIT CHARACTER*80(C),
COMPLEX(Q,X-Z)
PARAMETER iskaz
Ovaj iskaz
se koristi da da simbolično ime konstanti, koje kasnije
mo`e da se koristi
u programu umesto konstante. Opšti oblik iskaza je:
PARAMETER (cn = ce, cn
= ce, cn = ce)
gde je cn
simbolično ime, ce su izrazi
za definisanje konstanti i
mo`e da sadr`i stvarne ranije definisane konstante, zagrade
i
operatore (ali ** mo`e se koristiti samo celobrojne brojeve),
medjutim, pozivi na funkcije nisu dozvoljeni.
Ako ime slovne konstante ima du`inu specificiranu sa *(*),
onda
stvarna du`ina je ona koja je pridodata PARAMETER iskazom.
Npr.:
PARAMETER(LOGN=8,NPTS=2**LOGN)
DIMENSION INDEX(LOGN),X(NPTS),Y(NPTS,LOGN)
CHARACTER*(*)TITLE
PARAMETER(TITLE='TABLE
OF RESULTS')
PARAMETER(PI=3.14159,
HPI=PI/2, FMAX=NPTS/(2*PI))
Deklarisanje polja
Ime polja mo`e da se nadje u više specifikacija, ali dimenzije
smeju da budu specificirane samo jednom, što se mo`e
učiniti bilo
kojim iskazom tipa ili COMMON, ili DIMENSION iskazom.
Polja mogu imati 1 do 7 dimenzija od kojih svaka mo`e da ima
definisane gornju i donju granicu. Ako nije specificirana
donja
granica za nju se podrazumeva vrednost 1.
Oblik deklaracije polja je
a(d)
gde je a simboličko ime polje a d je lista granica dimenzija
odvojenih zarezima od kojih svaka ima oblik:
lb:ub ili ub
gde obe granice mogu biti iskazane u obliku izraza sa konstantama,
npr.:
PARAMETER (NPTS=1024)
REAL X(NPTS),Y(-5:5,0:NPTS-1),Z(2,2,2,2,2,2)
LOGICAL
LEAPYR(80:89)
Ako je polje fiktivni argument u potprogramu (tako da je stvarna
dimenzija odredjena
u drugoj programskoj jedinici), postoje dve
opcije: mo`e biti podesivo polje ili polje pretpostavljene
veličine.
Podesivo polje ima granice dimenzija specificirane izrazima
celobrojnih promenljivih koje se predaju potprogramu preko
liste
argumenata ili COMMON bloka. Ovi izrazi nemogu da sadr`e reference
na polja odnosno njihove elementa kao ni pozive funkcija.
Stvarne
granice fiktivnih argumenata se izračunavaju samo pri
svakom ulazu
u potprogram, ali se ne menjaju pri izvršavanju. Npr.:
SUBROUTINE SMOOTH(RAW,NPTS,M,RESULT,FILTER)
COMMON /SHAPE/LX,LY
REAL RAW(NPTS),RESULT(NPTS/M),FILTER(0:LX,0:LY)
Polje predpostavljene veličine ima gornju granicu
svoje poslednje
dimenzije specificiranu zvezdicom što predstavlja nedefinisanu
veličinu. Pošto stvarna veličina nije poznata u
okviru
potprograma, polja se u ovom slučaju nesmeju koristiti
bez indeksa
u izvršnim iskazima, kao što su READ i WRITE. Primeri:
FUNCTION EXPAND(TABLE,BIGGER)
COMPLEX TABLE(*),
BIGGER(10,-1:*)
Primedba: Mnogi FORTRAN sistemi uključuju opciju provere
granica
polja, koja je korisna pri razvoju programa, ali koja nemo`e
biti
primenjena na polja pretpostavljene veličine, tako da
je bolje
koristiti podesivo polje kadgod je informacija o
veličini dostupna.
Iskaz o tipu
Ovi iskazi se koriste da promene ili potvrde tip podataka
pridru`en odredjenim simboličkim imenima. Pored toga mo`e se
koristiti za specificiranje dimenzija polja.
CHARACTER iskaz specificira pored toga du`inu svakog slovnog
podatka:
CHARACTER*len,v*len,v*len,...,v*len
gde je v ime polja, konstante, promenljive ili funkcije, a
svako
*len je opciona specifikacija du`ine, koja se sastoji od zvezdice
praćene bilo integerom ili integer izrazom u zagradama.
Zarez pre
prvog v je takodje opcion. Podrazumevana
du`ina cele liste mo`e
da se da posle CHARACTER ključne reči.
Ako du`ina nije data podrazumeva se jedan.
U slučaju fiktivnih argumenata za potprogram (ili ime
funkcije)
du`ina mo`e biti specificirana kao *(*), što predstavlja podesivu
du`inu. Stvarna du`ina je ona koja je deklarisana u programu
koji
poziva potprogram, koja se prenosi automatski.
Oblik drugih iskaza tipa je:
tip v,v,...,v
gde je tip jedan od INTEGER, REAL, DOUBLE PRECISION, COMPLEX OR
LOGICAL.
Svako v je deklarator polja ili ime konstante, promenljive,
polja ili funkcije.
Primeri:
DOUBLE PRECISION
X,FUNC,Z(100)
CHARACTER*30NAME,ADDRES(5)*20,ZIP*5,ACCNT(500)
Ime unutarnje funkcije (intrinsic) ne treba da se nadje u
iskazu tipa.
DIMENSION iskaz
Se koristi da da specificira du`inu polja, tip podataka je
odredjen imenom ukoliko se ne nalazi u iskazu tipa. Oblik
je:
DIMENSION a(d), a(d),...,a(d)
gde je svako a(d) deklarator polja.
COMMON iskazi
se koriste za deklarisanje komon blokova (common blocks) koji
predstavljaju oblasti memorijskog prostora koji je dostupan
dvema
ili više programskih jedinica. Imenovani komon blokovi moraju
da imaju istu
du`inu (mereno u memorijskim jedinicama) u svakoj programskoj
jedinici: oni su
korisni za razmenu podataka izmedju programskih jedinica umesto
ili pored potprogramskih argumenata.
Blank (ili neimenovani) komon blokovi mogu da imaju
različite
du`ine u različitim programskim jedinicama: namenjeni
su
zajedničkom korišćenju memorije za
različite svrhe u svakoj od
različitih programskih jedinica, odnosno za privremeni
radni
prostor.
Opšti oblik iskaza je:
COMMON /cbn/vlist,/cbn/vlist,...,/cbn/vlist
gde su cbn simbolička imena, koja se izostavljaju za
blank komon
blokove, a svaka vlist je lista promenljivih , polja, i
deklaratori polja odvojeni zarezima, koje mogu biti izostavljene
ispred kose crte. Ako je blank komon prvi na listi prvi par
kosih
crta mo`e da bude izostavljen. Npr.:
COMMON
WORK(1000), SPACE(2000),/IMAGE/CORNER(2,4)
Komon blok koji sadr`i bilo koji podatak slovnog tipa mora
da
sadr`i samo karaktere tog tipa.
Imena komon blokova su globalna ali sadr`aji vlista imaju
lokalna
imena, koja mogu biti različita u svakoj programskoj
jedinici. Ona
su pridru`ena samo po polo`aju u memorisanoj sekvenci. Informacija
mo`e da se prenese iz jedne programske jedinice u drugu samo
preko
podataka istog tipa.
Ako se isti programski blok istog imena pojavljuje više puta
u
programskoj jedinici, odgovarajuće liste su spojene zajedno
redosledom pojavljivanja.
Imenovani komon blokovi se inicijalizuju DATA iskazima u BLOCK
DATA programskim jedinicama.
Blank komon blokovi nemogu da se inicijalizuju DATA iskazima.
Sadr`aj blank komona ili bilo kog komon bloka koji se pojavljuje
u
glavnom programu nikad nemo`e biti nedefinisan.
Sadr`aji ostalih blokova, koji se koriste u potprogramima
se
nemogu sačuvati pri izlazku iz potprograma ukoliko blok
nije
prisutan u programskoj jedinici koja je potprogram zvala,
ili ako
nije imenovan u SAVE iskazu.
EQUIVALENCE iskaz
se koristi da prisili dve ili više promenljivih ili polja
da dele
isti memorijski prostor. Za njih se onda ka`e da su asocirane.
Ova
asocijacija mo`e da bude korisna za štednju memorije ili mo`e
da
bude povoljno da se imena varijabli pridru`e elementima polja.
Opšti oblik iskaza je:
EQUIVALENCE (vlist),(vlist),...,(vlist)
gde su vlist liste dva ili više članova odvojenih zarezima,
koji
mogu biti promenljive, polja, elementi polja, ili podnizovi.
Fiktivni argumenti potprograma (i promenljive koje su takodje
funkcije imena) nesmeju se pojavljivati u listi.
Slovni članovi mogu biti asocirani samo slovnom tipu.
Pojavljivanje jednog elementa polja u listi mo`e dovesti ostale
elemente polja u asocijaciju takodje.
FORTRAN IV je dozvoljavao da se multi dimenziona polja koriste
sa
manje indeksa no što je odredjeno njihovom
dimenzionalnošću. To
nije dozvoljeno u FORTRAN 77, ali moguće da se koristi
bezindeksno ime polja u listi da predstavlja prvi elemenat
polja.
Dva različita elementa polja nesmeju biti asocirana,
direktno ili
indirektno, istoj memorijskoj lokaciji. Slično va`i i
za
podnizove.
Ako je jedan član komon bloka prikazan u EQUIVALENCE
iskazu, svi
asocirani članovi su preneti u common blok.
Ilegalno je asocirati članove različitih common
blokova direktno
ili indirektno.
Premda se common blok nesme pročiriti nani`e, mo`e se
proširiti
naviše (ali imenovani common blokovi moraju da imaju istu
du`inu u
svim programskim jedinicama). Npr.:
REAL X(100,6),Y(1024),ROWSIX(100)
EQUIVALENCE (YLAST,Y(1024)),(ROWSIX,X(1,6))
EXTERNAL iskaz
slu`i da deklariše simboličko ime za spoljnu proceduru
tako da se
mo`e koristiti kao argument u potprogramu. Mo`e se takodje
koristiti za povezivanje BLOCK DATA programske jedinice za
pozivajuću programsku jedinicu. Uobičajeni oblik
iskaza je:
EXTERNAL ime,ime,...,ime
gde je svako ime spoljna funkcija, potprogram, blok podataka
jedinica ili fiktivna funkcija ili potprogram. Treba napomenuti
da
INTRINSIC iskaz ima isto značenje za funkcije ostvarene
FORTRAN
sistemom.
Iskazna funkcija se nesme pojaviti u EXTERNAL iskazu, ako
se
unutarnja funkcija ipak pojavi, onda to ime ne poziva
više
unutarnju funkciju u toj programskoj jedinici.
INTRINSIC iskaz
slu`i za deklarisanje simboličkog imena kao unutarnje
funkcije
tako da mo`e da bude korišćeno kao stvarni argument u
pozivu
potprograma. Opšti oblik je:
INTRINSIC fime,fime,...,fime
gde su sva fime imena unutarnjih funkcija.
Treba primetiti da imena nekih unutarnjih funkcija, koje su
in-line
funkcije nemogu da se prenesu kao stvarni argument.
Slede nekoliko primera primena INTRINSIC i EXTERNAL iskaza:
INTRINSIC SINH, COSH
EXTERNAL MYFUNC
CALL GRAPH(SINH)
CALL GRAPH(MYFUNC)
END
SUBROUTINE GRAPH(FUNC)
EXTERNAL FUNC
CALL PLOT(FUNC,0.0,3.14)
END
SAVE iskaz
se koristi da promenljive i polja (uključujući i
imenovane komon
blokove, ukoliko se blok ne nalazi u pozivajućoj jedinici
ili više
u strukturi, u svakom slučaju komon blokovi mogu biti
sačuvani samo
u celosti) u potprogramu ostanu definisani i kada se kontrola
vrati pozivajućoj programskoj jedinici. Oblici
iskaza su:
SAVE\ ili
SAVE s,s,...,s
gde je svako
s ime promenljive, polja ili ime
komon bloka izmedju
kosih crta,
npr.:
SAVE
X,Y,Z,/MYCOM/
ako se SAVE koristi bez argumenata onda se čuvaju svi
odgovarajući
oblici iz datog potprograma.
Treba primetiti da ako je komon blok definisan u SAVE iskazu
u
bilo kom potprogramu, onda mora biti deklarisan u SAVE u svakoj
programskoj jedinici gde se pojavljuje.
DATA iskaz
se koristi da se definišu početne vrednosti za promenljive
i
polja:
DATA nlist/clist/,nlist/clist/...,nlist/clist/
gde su nlist liste promenljivih, polja, elemenata polja,podnizova
ili implied DO liste, a sve clist predstavljaju liste konstanti.
Zarezi izmedju / i clist su opcioni.
Imena fiktivnih argumenata, funkcija i sadr`aji blank commona
nemogu biti korišćeni u DATA iskazima.
Sadr`aji imenovanih komon blokova mogu se inicijalizovati
samo
DATA iskazima u okviru BLOCK DATA programske jedinice.
Sadr`aj u clist mogu činiti stvarne ili imenovane konstate;
ukoliko nekoliko sukcesivnih konstanti imaju iste vrednosti,onda
se to mo`e izraziti sa r*c, gde je r faktor ponavljanja, a
r i c
mogu biti stvarne ili imenovane konstante. Ukupan broj konstanti
u
clist mora odgovarati broju podrazumevanom u nlist. Ime polja bez
indeksa stoji za svaki elemenat polja. Ako su dve veličine
asocirane EQUIVALENCE iskazom, samo jedna od njih se mo`e
inicijalizovati DATA iskazom.
Implied DO liste oblika:
(alist,iv=e1,e2,e3) ili
(alist,iv=e1,e2)
gde je alist lista elemenata polja uključenih u implied
DO, iv je
celobrojna promenljiva implied DO, a e1, e2, i e3 su izrazi
celobrojne konstante koje mogu sadr`ati implied DO promenljive
iz
spoljnih implied DO petlji. \1Pravila su slična onima
iz DO iskaza
izuzev da su samo celobrojni i pozitivni podaci dozvoljeni.
Pravila za pretvaranje tipa podataka su ista kao za odgovarajuće
iskaze pridru`ivanja.
Primeri:
PARAMETER (NX=64, NY=80, NTOTAL=NX*NY)
REAL ALLSET(NS,NY),
SPARSE(NX,NY)
DATA ALLSET/NTOTAL*0.0/
DATA ((SPARSE(J,I),I=3,7,2),J=1,5)/0.0,14*2.5/
CHARACTER*8 A,B,C
DATA
A,B,C/'PADDED','TRUNCATED','EXACTFIT'/
Iskazi za pridavanje
vrednosti
promenljivoj ili
elementu polja pojavljuju se u sledeća četiri
oblika:
pridavanje aritmetičke
vrednosti ima oblik:
v=e
gde je v promenljiva ili element polja aritmetičkog tipa,
a e je aritmetički izraz.
pridavanje logičke vrednosti ima oblik:
v=e
gde je v logička promenljiva ili elemenat polja, a e
je logički izraz.
Treba primetiti da logički izraz mo`e da sadr`i relacione
izraze
uključujući aritmetičke i slovne izraze. Primer:
LOGICAL LIMITS(10)
LIMITS(K)=R(K).GE.RMIN.AND.R(K).LE.RMAX
pridavanje slovne vrednosti
ima oblik:
v=e
gde je v slovna promenljiva, element polja ili podniz, a e
je slovni izraz.
Nijedan od slovnih znaka definisanih u v ne sme biti pozvan
u e.
Ako je du`ina v veća od e, dodaju se prazna mesta sdesna,
ako je v
kraće od e suvišni znaci se ignorišu. Ako je v podniz,
nijedan
drugi znak niza nije promenjen pridavanjem vrednosti podnizu.
ASSIGN iskaz
se koristi da prida vrednost celobrojne promenljive labeli
iskaza.
Opšti oblik
je:
ASSIGN s TO v
gde je s labela
izvršnog ili FORMAT iskaza u istoj programskoj
jedinici, a v je celobrojna promenljiva.
Promenljiva v se potom mo`e koristiti u istoj programskoj
jedinici
u pridru`enom GO TO iskazu ili kao format identifikator u READ,
WRITE or PRINT iskazu. Dok se promenljiva ne pridru`i nekoj
celobrojnoj vrednosti,
nesme se koristiti u aritmetičkim izrazima
ili na bili koji drugi način.
Premda je pridru`eno GO TO zastareo iskaz, ASSIGN pru`a mogućnost
jednostavnog izbora formata u vreme izvodjenja programa. Primer:
101
FORMAT(10G15.7)
ASSIGN 101 TO MYFORM
WRITE(LP,MYFORM) ARRAY
Iskazi za kontrolu
Prenos kontrole medju programskim jedinicama vrši se ne samo
kontrolnim iskazima, već i END i ERR in I/O iskazima,
ili
alternativnim povratcima iz CALL iskaza.
Ilegalno je prenositi kontrolu u DO petlje ili IF blokove.
Prenos
iz ovih struktura van njih je dozvoljen.
Bezuslovni GO TO iskaz
ima oblik:
GO TO s
gde je s labela
izvršnog iskaza u istoj programskoj jedinici.
Izračunati GO TO iskaz
prenosi kontrolu
jednom od nekoliko iskaza već prema vrednosti
celobrojnog izraza i ima oblik:
GO TO (s,s,...,s),e
gde su
svi s labele izvršnih iskaza u istoj programskoj jedinici,
a e je celobrojni izraz, zarez ispred e je opcioni. Ista labela
se
mo`e pojaviti više puta u listi. Ako ima ukupno N labela u
listi i
e ima vrednost u opsegu 1 do N, onda se kontrola prenosi na
labelu
koja ima vrednost e.
Ako e ima vrednostt manju od 1 i veću od N kontrola se
prenosi na
sledeći iskaz u programu, tj. GO TO nema efekta. Primer:
GOTO(100,200,300,100)MOD(KOUNT,5) + 1
Pridani,pripisani GO TO iskaz
Mada zastareo, zadr`an je radi kompatibilnosti sa FORTRAN
IV. On
prenosi kontrolu na iskaz koji ima labelu koja je pripisana
celobrojnoj promenljvoj u ASSIGN iskazu. Primeri:
GO TO v ili
GO TO v(slist)
gde je v celobrojna promenljiva trenutno pripisana vrednosti
labele izvršnog iskaza u istoj programskoj jedinici. Lista
labela
slist je opciona, ali ako je prisutna kontrola mora biti predata
jednoj od labela u toj listi.
Blok IF iskaz
omogućuje uslovno izvršavanje čitavih blokova iskaza
i ima oblik:
IF (lizr1) THEN
block1
ELSE IF(lizr2) THEN
block2
ELSE
else block
END IF
Gde su
lizr logički izrazi, a svaki blok sadr`i proizvoljan
broj
izvršnih iskaza
izuzev END.
Svaki blok
iskaza posle IF ili ELSE IF se izvršava ako su
odgovarajući logički izrazi true, a else-blok se
izvršava onda ako
su svi
IF i ELSE IF pre njega false.
ELSE IF iskaz kao i odgovarajući blok mogu se izostaviti
ili
ponoviti proizvoljan broj puta.
ELSE iskaz kao i odgovarajući blok se takodje mogu izostaviti.
END IF iskaz mora da bude prisutan za svaki IF - THEN iskaz.
Skokovi nisu
dozvoljeni u bilo koji blok, ali skokovi
iz blokova
su dozvoljeni
uključujući i početni IF - THEN iskaz.
Bilo koji blok mo`e da sadr`i DO petlje ili druge IF blokove
pod
uslovom da su korektno ugnjezdeni, tj. da je svaka od ovih
formi
kompletno sadr`ana u jednom bloku.
Logički IF iskaz
omogućava uslovno izvršavanje jednog iskaza i ima oblik:
IF(lizr)st
gde je lizr logički izraz, a st je bilo koji izvršni
iskaz izuzev
DO, IF - THEN, ELSE
IF, ELSE, END IF, END ili drugi
logički IF.
Iskaz st
se izvršava samo ako lizr ima
vrednost true. Primer:
IF(X.GT.0.5) CALL
MODIFY(X)
Aritmetički IF iskaz
je zastarela forma zadrana radi kompatibilnosti sa FORTRAN
IV, i
ima oblik:
IF(e)s1,s2,s3
gde je e celobrojni, realni ili izraz dvostruke preciznosti,
a
svako s je labela izvršnog iskaza.
Kontrola se prenosi na prvu labelu za negativne vrednosti
izraza,
za nulu na drugu, a za pozitivne na treću.
DO iskaz
se koristi da definiše DO petlju, koja mo`e da sadr`i bilo
koji
broj izvršnih iskaza izuzev END i izvršava se ponovo sa regularnom
sekvencom vrednosti promenljive koja se zove DO promenljiva.
Npr.:
DO s,v = e1,e2,e3 ili
DO s,v = e1,e2
gde je s labela izvršnog iskaza, v je promenljiva celobrojnog,
realnog ili tipa dvostruke tačnosti, a svako e je izraz
odgovarajućeg tipa. Zarez posle labele je opcija ali
se
preporučuje. Primer:
DO
55,N=-100,MAX(LIMIT,100),ISTEP(K)
DO petlja se sastoji iz svih izvršnih
iskaza posle DO sve do
linije labele
s, tj. uključujući
i nju. Iskaz na ovoj liniji ne
sme da bude: bezuslovni ili pridru`eni GOTO,
aritmetički ili blok
IF, ELSE, ELSE IF,
RETURN, STOP, END, ili drugi
DO iskaz. Medjutim,
mo`e da bude logički IF iskaz.
DO petlja mo`e da sadr`i CALL iskaze, pozive na funkcije i
potpune
IF-END IF blokove kao i
druge kompletne DO petlje.
CONTINUE je fiktivni iskaz specijalno za kraj DO petlje, te se
njegova upotreba
jako preporučuje.
DO promenljiva, v, dobija pridru`enu vrednost, u sukcesivnim
prolazima kroz petlju, od e1 do e2 sa korakom e3, ako korak
nije
naveden podrazumeva se da je jedinica.
DO promenljiva mo`e da se poziva u petlji, ali joj se nesme
pridru`ivati nova vrednost.
Izrazi e1, e2, e3 specificiraju broj iteracija. Svaki izraz
se
pretvara u tip podataka koji odgovara v i onda se odbroj odredjuje
prema:
MAX(INT((e2 - e1 + e3)/e3),0
Vrednost e3 nesme biti 0 ali sme biti negativna čime
se dobija
opadajuća sekvenca vrednosti v.
Izrazi e1, e2 i e3 se izračunavaju samo jednom kada se
DO iskaz
izvršava, a ne ponovo pri iteracijama, tako da promene u njihovim
vrednostima nemaju efekat na odbroj petlje.
Kada se petlja završi regularno promenljiva v ima vrednost
za
jedan prolaz veću od odbroja.
Premda su sada realni i dvostruka tačnost dozvoljeni
treba biti
oprezan pri radu sa njima jer se pri zaokrugljivanju prema
ranije
datom izrazu mogu desiti znatna odstupanja. Pri radu sa
celobrojnim nema tih problema.
CONTINUE iskaz
smišljen je kao očit kraj DO petlje, ali se mo`e da koristi
bilo
gde u programu gde je dozvoljen izvršni iskaz. Sam iskaz ne
uzrokuje bilo kakvu radnju ili efekat.
STOP iskaz
završava izvodjenje programa i vraća kontrolu operacionom
sistemu:
STOP ili
STOP m
gde je m niz do pet decimalnih brojeva ili slovna konstanta.
Ova
vrednost je dostupna korisniku (ali postoje razlike medju
sistemima u načinu kako se to izvodi, npr.:
STOP 'ERROR ATT LINE
19 OF ROUTINE MADFULL'.
PAUSE iskaz
je sličan STOP iskazu, ali on samo privremeno
suspenduje program.
Izvršavanje programa
se nastavlja kada se odgovarajuća komanda,
koja je potpuno sistemski zavisna, da operacionom sistemu.
Zbog
ove nestandardnosti PAUSE ne treba koristiti u prenosivom
software-u, premda je korisna u interaktivnim sistemima. Oblik
je:
PAUSE ili
PAUSE m
gde m ima isto značenje kao u STOP iskazu.
END iskaz
Ovaj iskaz se mora i jedino mo`e pojaviti na kraju svake
programske jedinice.
END je izvršni iskaz i mo`e da ima labelu. U glavnom programu
ima
ulogu STOP, a u funkciji ili podprogramu efekat RETURN iskaza.
Ulazno izlazni iskazi
Postoje tri grupe ulazno/izlaznih iskaza:
READ, WRITE i PRINT iskazi izvode stvarni prenos podataka.
BACKSPACE, ENDFILE
i REWIND iskazi izvode pomoćne operacije.
Obe ove grupe koriste
koriste celobrojne brojeve za označavanje
spoljnih datoteka
i uredjaja, dok operacioni sistem obično koristi
imena za iste.
Treća grupa, OPEN, CLOSE i INQUIRE su namenjeni za
odredjivanje odnosa brojeva logičkih jedinica i imena
datoteka pri
izvršavanju programa.
Svi u/i iskazi su globalnog tipa: posle OPEN iskaza za neku
datoteku u/i operacije sa njom mogu da se vrše u bilo kojoj
programskoj jedinici.
Pre-povezane datoteke
u FORTRAN-u olakšavaju u/i bez upotrebe OPEN iskaza.
Standardne u/i datoteke se koriste sa zvezdicom ili PRINT
iskazom.
Npr. sledeća dva iskaza imaju isti efekat:
PRINT 11,A,B,C
WRITE(*,11)A,B,C
Stvarno odredište
ovih datoteka je zavisno od konkretnog
sistema,
mo`e biti štampač ili konzola i sl. Za ulaz se koristi
slični
oblik:
READ(*,5)X,Y,Z ili
READ 5,X,Y,Z
Ključne reči
Kontrolni parametri svih u/i iskaza se specificiraju
pomoću
'ključna reč=vrednost' formata radije nego preko
liste poziciono
zavisnih parametara. Sa ključnim rečima parametri
se mogu
pojavljivati u bilo kom redosledu. Radi kompatibilnosti
sa
FORTRAN IV, a i radi jednostavnosti, UNIT= i FMT=
ključne reči
mogu se izostaviti ako su prvi i drugi respektivno. Npr.:
WRITE(LPT,44)P,Q,R je identično
WRITE(UNIT=LPT,FMT=44)P,Q,R
Primedba: kada
je slovni izraz dozvoljen kao u nekoliko slučajeva
OPEN, CLOSE i INQUIRE, svi blankovi na kraju slovnog niza
se
ignorišu.
UNIT identifikator
mora biti prisutan u svakom u/i iskazu (osim za jednu formu
INQUIRE). Obično se pojavljuje u obliku UNIT=u ali mo`e
biti samo
u ako je prvo u listi. u ima tri moguća oblika:
mo`e biti celobrojni izraz sa nenegativnom vrednošću
za
označavanje broja logičke jedinice;
zvezdica i ovde označava pre-povezane u/i datoteke;
slovni znak se koristi samo u READ i WRITE iskazima za interni
prenos datoteka:
u je tada slovna promenljiva, polje ili element polja, ili
podstring koji koji sam čini
internu datoteku.
ERR, END i IOSTAT iskazi
Svi u/i iskazi mogu da sadr`e:
ERR=s
gde je s labela izvršnog iskaza u istoj programskoj jedinici.
Kontrola se prenosi ovom iskazu u slučaju greške pri
u/i operaciji.
Alternativni ili dodatni način detektovanja grešaka je:
IOSTAT=iv
gde je iv celobrojna promenljiva ili element polja. Po izvršenju
u/i iskaza vrednost iv se stavlja na nulu ako nema
grešaka ili na
pozitivan broj koji označava tip greške ukoliko se ista
dogodila.
Nomenklatura grešaka je zavisna od sistema.
Po izvršenju READ iskaza, iv dobija negativnu vrednost ako
se
došlo do end-of-file (EOF).
END=ključna reč mo`e da se koristi samo u READ iskazima
primenjenim na sekvencijalne ili interne datoteke:
END=s
gde s predstavlja
labelu izvršnog iskaza kome se predaje kontrola
ukoliko se dodje
do EOF.
Ukoliko END ili
ERR situacije nastanu u toku izvršavanja READ
iskaza, poneki ili svi podaci u u/i listi mogu da budu nedefinisani.
Vrste ulaza/izlaza
FORTRAN 77 koristi šest tipova u/i, ali sa nekoliko izuzetaka,
nije dozvoljeno da se mešaju različiti tipovi kod istih
datoteka.
Sekvencijalni formatirani u/i
se koristi za prenos podataka ka i iz slovnih fajli i uredjaja
kao
što su tastature, monitori i printeri. Specifikator formata
različit od zvezdice mora
da se koristi. OPEN iskaz se mo`e da koristi;
uobičajene predeterminisane vrednosti
su obično odgovarajuće. Svaka READ ili WRITE operacija
mo`e da odgovara
jednom ili više zapisa kao što je navedeno u formatu. U opštem
slučaju jedan zapis
odgovara jednom redu teksta.
Na`alost, pravila za kontrolu zapisa na printeru FORTRAN IV
su
zadr`ana, tako da prvo slovo odnosno znak na svakoj liniji
slu`i
za kontrolu pomaka reda i mor biti jedan od
sledećih:
blank izlaz na sledećoj liniji
0 preskače jednu liniju
1 izlaz na prvom redu sledeće strane
+ izlaz na istoj liniji kao i pre.
Korišćenje '+' je prilično zavisno od mašine, te
tra`i oprez.
Sekvencijalni neformatirani u/i
Neformatirani WRITE se koristi za izlaz u binarnu fajlu, koja
se
mo`e da čita samo neformatirinim READ. Odsustvo formata
čini
prenos efikasnijim. Ako se koristi OPEN onda se mora specificirati
FORM='UNFORMATTED'. READ i WRITE iskazi nesmeju da koriste
format
specifikatore, a svaki prenos odgovara tačno jednom zapisu,
koji
mo`e biti bilo koje du`ine. Greška je pokušati da se čita
više
vrednosti no što je u zapisu.
Sekvencijalni listom odredjeni u/i
listom odredjeni, ili slobodan format, je koristan za vreme
testiranja, tj dok se nezna stvarni format izlaznih podataka,
specificira se zvezdicom:
WRITE(6,*)'VOLTAGE =',VMAX
PRINT *,X,Y,Z
READ(*,*)A,B,C
format koji je rezultat ovakvog u/i zavisi od
svakog podatka i
njegovog brojnog
opsega. U opštem slučaju brojevi sa pomičnim
zarezom se koriste
sa onoliko cifara koliko tačnost
mašine
omogućava, a
eksponencijalni oblik se koristi ako je potrebno.
Izlazni format je obično kompatibilan sa ulazom, jedino
se kod
slovnih promenljivih ne kopiraju apostrofi koji su pri ulazu
neophodni.
Svaki podatak mora da bude razdvojen od ostalih jednim ili
više
praznih mesta, zarezom sa ili bez ramaka, ili novom linijom
sa ili
bez razmaka. Ako se kosa crta pojavi kao rastavnica, onda
se
završava sa učitavanjem i ostatak ulazne liste ostaje
nedefinisan.
Ponavljanje iste vrednosti konstante se mo`e specificirati
kao
N*vrednost, gde je N broj ponavljanja, npr:
3*-273.12,5*.T,2*'YES'
Vrednosti izra`ene u pomičnom zarezu, nemoraju da sadr`e
zarez ili
eksponent. Kompleksne vrednosti moraju da sadr`e dva broja
u
zagradama. Logičke vrednosti se sastoje iz jednog od
dva slova T
ili F kojima prethodi tačka. Slovne promenljive se moraju
navesti
u apostrofima.
Ova vrsta transfera se nemo`e koristiti za interne ili fajle
direktnog pristupa.
Neformatirani u/i sa direktnim pristupom
Datoteke direktnog pristupa se često nazivaju datoteke
sa
random (nasumce) pristupom. Sastoje se od zapisa koji mogu
biti
pisani i čitani bilo kojim redom. Du`ina zapisa je odredjena
pri
stvaranju datoteke. Zapisi su numerisani pozitivni celim brojevima
koji počinju sa jedan.
Datoteka direktnog pristupa zahteva OPEN sa specifikacijom
ACCESS='DIRECT', a odgovarajuća du`ina zapisa mora da
bude data u
RECL=iznos. Za formatirane datoteke du`ina je u slovnim
jedinicama, dok za neformatirane du`ina zavisi od mašine.
Svaki
READ i WRITE moraju da koriste REC=iznos da bi se specificirao
broj zapisa. Ako je izlazni zapis kraći od ove
du`ine, ostatak
zapisa ostaje nedefinisan. END=labela se nemo`e koristiti
sa
datotekama direktnog pristupa.
Primeri:
OPEN(UNIT=1,FILE='DATA',ACCESS='DIRECT',RECL=40)
WRITE(1,REC=5000)ARRAY
READ(1,REC=LOCN,ERR=900)A,B,C
Formatirani u/i sa direktnim pristupom
Pravila su slična prethodnim, ali OPEN iskaz mora da
specificira
ACCESS='DIRECT' i FORM='FORMATTED'.Specifikator formata (različit
od *) je potreban kod svakog
READ ili WRITE. Prenos
podataka
počinje sa zapisom specificiranim sa REC=broj i nastavlja
se
sekvencijalno ako format specificira korišćenje više
od jednog
zapisa. Formatirane datoteke direktnog pristupa se
obično ne mogu
printati ili njima prići na bilo koji drugi
način.
Neformatirani oblik je verovatno efikasniji u većini
slučajeva.
u/i sa interne datoteke
Ova vrsta READ ili WRITE iskaza je različita od svih
ostalih u
tome što se prenos podataka vrši od slovne promenljive ili
polja
slovnih promenljivih, koja čini internu datoteku. Ovo
je korisno
kod pretvaranja iz slovnih u neslovne podatke, kao i za čitanje
u
seriji različitih formata zapisa kopiranog iz spoljne
datoteke.
Svi prenosi su formatirani:slobodan format nije dozvoljen.
Na ovaj
način se zamenjuju nestandardni iskazi DECODE i ENCODE.
Unutarnja
datoteka se nemo`e koristiti sa drugim u/i iskazima osim READ
i
WRITE. Datoteka je eksplicitno premotana pre svakog pristupa.
Ako je interna datoteka slovna promenljiva, element polja
ili
podniz onda predstavlja jedan zapis. Ako je slovno polje,
onda
svaki element slovnog polja predstavlja jedan zapis. Format
mora
biti odgovarajući. Ako je izlazni zapis kraći od
slovnog podatka,
ostali deo se puni blankovima. Treba primetiti da interna
datoteka
nije otvorena sa OPEN tako da se blankovi tretiraju kao
BLANK='ZERO'. Ulazni format treba da počne sa BN da bi
se ovo
sprečilo.
OPEN iskaz
se koristi da pove`e logičku jedinicu sa datotekom i
da se
specifiraju njene karakteristike. Mo`e se otvoriti postojeća
fajla, stvoriti nova ili promeniti karakteristike
postojeće veze.
Ako je neka druga datoteka već povezana sa
logičkom jedinicom, ona
se zatvara pre no što se nova otvori.Greška je, medjutim,
pokušaj
da se otvori ista datoteka na dve različite jedinice.
OPEN se mo`e
koristiti na bilo kom tipu datoteka, ali je obavezan za korišćenje
sa fajlama direktnog pristupa. Iskaz OPEN ima oblik:
OPEN(olist)
gde je olist
lista podataka odvojena zarezom od sledeće liste:
UNIT=u
koja specificira
broj jedinice i obavezna je.
STATUS=cizraz
gde je cizraz
'OLD' za postojeću fajlu,
'NEW' za otvaranje nove
fajle, 'SCRATCH' za privremeni radni prostor, ili 'UNKNOWN'
koji
se podrazumeva, tj. koji je predeterminisan ako drugačije
nije
navedeno.
FILE=cexp
gde je cexp slovni izraz koji daje ime datoteke; nesme se
koristiti za 'SCRATCH'.
ACCESS=cexp
gde cexp ima oblik 'SEQUENTIAL'(podrazumeva se) ili 'DIRECT'.
FORM=cexp
gde cexp ima oblik 'FORMATTED (podrazumeva se za SEQUENTIAL)
ili
'UNFORMATTED'(podrazumeva se za DIRECT).
RECL=iexp
gde je iexp je celobrojni izraz koji specificira du`inu zapisa;
mora da se da za fajle direktnog pristupa. Jedinice su slovnog
oblika za formatirane datoteke.
BLANK=cexp
gde je cexp slovni izraz koji specificira način obrade
praznih
mesta, mo`e biti 'NULL' koji ih ignorira, ili 'ZERO'.
IOSTAT=iv
daje kod statusa.
ERR=s
odredjuje izlazak u slučaju greške.
Primeri:
OPEN(UNIT=3,FILE='PRINTOUT',STATUS='NEW')
OPEN(UNIT=N 5,FILE=DEV//MYDATA,STATUS='OLD',ERR=99)
OPEN(UNIT=1,FILE=FNAME,FORM='UNFORMATTED',IOSTAT=KODE)
CLOSE iskaz
Sve datoteke i jedinice se automatski zatvaraju kada prestane
izvršavanje programa, tako da je CLOSE potreban samo za ponovno
pripisivanje jedinica ili datoteka. Opšti oblik je:
CLOSE(clist)
gde je clist
sastavljeno od:
UNIT=u
koji specificira jedinicu i mora da bude prisutan.
STATUS=cexp
gde je cexp slovni izraz koji ima vrednost 'KEEP'(koja se
podrazumeva za imenovane fajle) čime se fajla zadr`ava
posle zatvaranja,
ili 'DELETE' čime se briše.
IOSTAT=iv
što vraća statusni kod.
ERR=s
koji specificira izlazak u slučaju greške.
Primer:
CLOSE(UNIT=15,STATUS='DELETE',ERR=999)
INQUIRE iskaz
omogućava da se programom definišu tekuće karakteristike
bilo koje
logičke jedinice ili imenovane datoteke. Postoje dve
različite
vrste INQUIRE iskaza:
INQUIRE jedinice:
INQUIRE(UNIT=u,ilist)
INQUIRE fajle:
INQUIRE(FILE=cexp,ilist)
gde ilist sadr`i bilo koju od sledećih stavki, razdvojene
zarezima.
Sve one (osim ERR=) pridru`uju vrednost promenljivoj ili elementu
polja
koristeću normalna pravila za iskaze pridru`ivanja.
ERR=s specificira izlaznu labelu pri grešci
NUMBER=iv daje broj logičke jedinice
RECL=iv daje du`inu zapisa za DIRECT, inače je nedefinisao.
IOSTAT=iv daje statusni kod
NEXTREC=iv daje broj sledećeg zapisa kod SEQUENTIAL
fajli,
inače nedefinisano
EXIST=lv daje .TRUE.ili.FALSE.
OPENED=lv daje .TRUE.ili.FALSE.
NAMED=lv daje .TRUE.ili.FALSE.
NAME=cv daje ime fajle ako ima (inače nedefinisano)
ACCESS=cv daje 'SEQUENTIAL' ili 'DIRECT' ili nedefinisano
FORM=cv daje 'FORMATTED' or 'UNFORMATTED' ili je nedefinisan
BLANK=cv daje 'NULL' ili 'BLANK' ili je nedef.
SEQUENTIAL=cv daje 'YES' ili 'NO' ili nedefinisano
DIRECT=cv daje 'YES' ili 'NO' ili nedefinisano
FORMATTED=cv daje 'YES' ili 'NO' ili nedefinisano
UNFORMATTED=cv daje 'YES' ili 'NO' ili nedefinisano
gde su:
iv - celobrojna promenljiva ili element polja
cv - slovna promenljiva ili element polja
lv - logička promenljiva ili element polja
Primeri:
CHARACTER FNAME*10,DS*3
INQUIRE(UNIT=13,NAME=FNAME,DIRECT=DS)
READ, WRITE i PRINT iskazi
READ iskaz prenosi podatke sa interne ili eksterne datoteke
listi promenljivih ili
elementima polja.
WRITE iskaz izračunava listu izraza i prenosi vrednosti
internoj ili eksternoj datoteci.
PRINT iskaz je poseban slučaj WRITE iskaza koji prenosi
formatirane ili listom
odredjene podatke u standardne pre-povezane izlazne datoteke.
Ovi iskazi imaju sledeće opšte oblike:
READ(UNIT=u,FMT=fmt,REC=iexp,ERR=s,END=s,IOSTAT=iv)rlist
WRITE(UNIT=u,FMT=fmt,REC=iexp,ERR=s,END=s,IOSTAT=iv)wlist
READ fmt,rlist
WRITE fmt,wlist
Dva poslednja oblika koriste standardne pre-povezane jedinice.
Specifikator jedinice mora biti prisutan, ostali su opcioni.
Ključne reči UNIT= i FMT= mogu da se izostave ako
se jedinica i
format specificiraju na prvom i drugom mestu.
Specifikator formata mora biti prisutan za sve osim neformatiranog
transfera
podataka. Za listom upravljani prenos je zvezdica. Za druge
slučajeve mo`e biti
labela FORMAT iskaza, celobrojna promenljiva kojoj je vrednost
dodeljena ASSIGN
iskazom, ili slovni izraz ili polje koje sadr`i kompletan
format uključujući i spoljne zagrade.
Specifikator broja zapisa, iexp, je celobrojni izraz sa pozitivnom
vrednošću i mora biti
naveden kada se koriste fajle direktnog pristupa.
Lista podataka READ iskaza, rlist, mo`e biti prazna (u tom
slučaju se preskače jedan zapis) ili mo`e da sadr`i: promenljive, elemente
polja, polja, podnizovi, implied DO list.
Lista podataka WRITE ili PRINT iskaza, wlist, mo`e biti prazna
(u kom slučaju se
dobija prazan izlazni zapis) ili mo`e da sadr`i bilo koju
stavku dozvoljenu u rlist kao
i izraze. Izraz mo`e da ima bilo koju formu, ali nesme da
sadr`i bilo koju referencu na
funkcije koje uključuju dalje u/i operacije. Treba primetiti
da je konstanta dozvoljen
oblik izraza. Polje bez indeksa u listi podataka stoji za
sve elemente koji se
transmituju u sekvenci. Podesivo polje je dozvoljeno, ali
nije dozvoljeno polje
pretpostavljene veličine.
Implied DO lista ima oblik:
(dlist,v=e1,e2) ili
(dlist,v=e1,e2,e3)
gde v,e1,e2,e3 imaju isto značenje kao u DO iskazu.
dlist mo`e sadr`ati bilo koju stavku koja je dozvoljena u
rlist
ili wlist,
uključujući dalje
implied DO liste. Npr.:
WRITE(*,*)'TABLE',(X,SIN(X),X=0.0,1.525,0.05)
READ
55,((ARRAY(I,J),I=1,J),J=JMIN,JMAX)
Primedba: redundandne
zagrade nisu dozvoljene zbog moguće zabune
oko implied DO liste.
REWIND iskaz
se koristi da se sekvencijalna datoteka postavi na
početak, tj prvi zapis.
Nema nikakvog efekta ako je fajla već premotana. Neke
jedinice se nemogu
premotati (npr. linijski štampač).
Primeri:
REWIND u ili
REWIND(UNIT=u,ERR=s,IOSTAT=iv)
specifikator jedinice je obavezan, ostali su opcioni:
REWIND(UNIT=3,ERR=120
BACKSPACE iskaz
se mo`e koristiti kod sekvencijalnih datoteka za pomeranje
unazad
za jedan zapis. Nesme se koristiti na zapise dobijene listom
upravljanim izlaznim
iskazima. Oblici ovog iskaza su slični REWIND:
BACKSPACE u ili
BACKSPACE(UNIT=u,ERR=s,IOSTAT=iv)
ENDFILE iskaz
se koristi da zapiše specijalni end-of-file zapis u sekvencijalnu datoteku. Ovo
mo`e imati
značaja kod uredjaja kao što
je jedinica magnetne trake, ali nije
u
opštem slučaju
zahtevano zato što se uslovi end-of-file dešavaju uvek kada
READ
iskaz dodje
na kraj sekvencijalne
fajle. Oblici ovog iskaza su
slični REWIND: ,
ENDFILE u ili
ENDFILE(UNIT=u,ERR=s,IOSTAT=iv)
Specifikacija FORMAT
je potrebna pri formatiranim READ, WRITE i PRINT iskazima
da bi se
kontrolisalo prevodjenje izmedju internih i eksternih formi
pretstavljanja podataka.
Format se mo`e specificirati FORMAT iskazom ili slovnim poljem
ili izrazom.
FORMAT iskaz ima oblik:
FORMAT flist
gde se flist sastoji od para zagrada u kojim se nalazi lista
edit descriptora
razdvojenih zarezima. Svaki FORMAT iskaz mora da ima labelu.
Na FORMAT
se poziva u u/i iskazima bilo direktno navodjenjem labele
ili preko celobrojne
promenljive kojoj je pripisana vrednost labele ASSIGN iskazom.
Premda FORMAT
iskaz mo`e biti postavljen bilo gde u okviru programske jedinice
u kojoj se koristi,
lakše je postići korektan format ako se nalazi dovoljno
blizu relevantnom u/i iskazu.
FORMAT iskaz mo`e da se koristi za više u/i iskaza. Ukoliko
ne sadr`i apostrofe ili
Holerith edit descriptore mo`e da se koristi i u ulazu i u
izlazu, npr.:
READ(5,91)FINAME
91 FORMAT(A/(10G12.3))
WRITE(6,91)'SPECTRUM',(S(I),I=1,NPTS)
Alternativno, kompletna specifikacija formata,
uključujući i spoljne zagrade, mo`e se
specificirati pomoću slovnog polja ili izraza. Primedba:
vodeća prazna mesta i slova na
kraju se ignorišu. Ovo omogućuje da se konstruiše ili
izmeni specifikacija formata u
toku izvodjenja programa. Korišćenje slovne konstante
je povoljno za jednostavne
formate, npr.:
READ(1,'(10F5.2)',END=90)ARRAY
Specifikacija formata slovnim stavkama mo`e da sadr`i prazna
mesta pre leve
početne zagrade, a bilo koji karakter posle krajnje desne
zagrade se ignoriše. Ako
se ne radi o elementu slovnog polja već o slovnom polju,
specifikacija se mo`e
protezati na više elemenata polja.
Edit descriptori koji se nalaze u flist mogu imati bilo koju
od sledećih formi:
ed neponavljajući edit descriptor
red ponavljajući edit descriptor
n red n je brojač ponavljanja (celobrojni)
(flist)
kompletna specifikacija
u zagradama
n(flist)
isto to sa
brojačem ponavljanja
Zarezi koji razdvajaju
stavke mogu biti izostavljeni na bilo kojoj
strani kose
crte ili tačke zareza, ili izmedju D,E,F,ili
G deskriptora i P deskriptora
neposredno pre njih.
Prazan format, ili onaj koji sadr`i samo
neponavljajuće edit deskriptore mo`e da se
koristi samo sa u/i iskazima koji imaju prazne u/i liste.
Npr. da se preskoči jedan
zapis na jedinici 3:
READ(3,'()')
Ponavljajući edit deskriptori
svaki od njih odgovara jednoj stavki u u/i listi (osim za
kompleksne koji zahtevaju
dva realna deskriptora za prenos).
Iw Iw.m celobrojni podaci
Fw.d decimalni bez eksponenta r d k
Ew.d }Ew.dEe decimalni sa eksponentom e u o
Gw.d }Gw.dEe sa ili bez eksponenta a p m
Dw.d (stari exp.oblik) l l p
Lw logički tip podataka
Aw A slovni tip podataka
gde su d,e,m, i w celobrojne konstante bez znaka, d je broj
cifara posle decimalne tačke,
e je broj cifara u eksponentu, m je minimalni broj cifara
uključujući ispis vodećih nula, w je ukupna širina polja
Novi oblik Iw.m dozvoljava kontrolu vodećih nula, npr.:
WRITE(*,'(i4.4,i4.0)')12,0
daje na izlazu '0012bbbb' gde b predstavlja blank. na
sličan način novi oblici E i
G dozvoljavaju kontrolu širine eksponenta. Ako ulazno polje
sadr`i decimalnu
tačku D,E,F i G imaju isti efekat. Pri izlazu F deskriptor nikad ne koristi eksponent, koji
E i D uvek koriste. G deskriptor
koristi oblik F ukoliko broj nije
suviše mali ili suviše veliki kada prelazi na E oblik.
Širina koja se podrazumeva za A deskriptor je dužina odgovarajuće
slovne stavke u u/i listi.Ako se koristi oblik Aw i w ne odgovara
du`ini niza,
višak karaktera sa desne strane se ignoriše, ili se ubacuju
blankovi sa leve strane.
Neponavljajući edit deskriptori
Ovi deskriptori ne odgovaraju stavkama u/i liste, a oblici
su im:
'string' apostrof, ispisuje slovni niz
nHstring čini isto (zastarela forma)
Tn tabulator do kolone n
TRn tabulator n kolona udesno
TLn tabulator n kolona ulevo
nX preskoči
n kolona (isto kao TRn)
SP znak sledećim pozitivnim brojevima
SS potisni znak pozitivnim
brojevima
S sistemski re`im za '+' znak
BN ignorisanje blanka na ulazu
BZ nule umesto blanka na ulazu
kP skaliranje u/i faktorom k / počinje nov zapis
: zaustavlja skanovanje formata ako je u/i lista završena
gde je k mala konstanta, a n je pozitivna celobrojna konstanta.
Tabulator deskriptori su pogodni za pravljenje tabela, npr.:
123 FORMAT(T2,'DATE',T22,'LONGITUDE',T42,'LATITUDE')
Oni se mogu koristiti i za premeštanje stavki na drugo mesto
ili
za prenos iste stavke više puta. Npr.:
READ(2,'(A10,T1,F10.0)')NAME,NUMBER
na izlazu preskočene kolone se pune blankovima ako ranije
nisu ispunjene, a
ostale su nepromenjene.
SS,SP, i S deskriptori nemaju efekta na ulaz; na izlazu efekat
je aktuelan za ostatak u/i.
Početni uslovi, kao i oni posle S su zavisni od
mašine.
BZ i BN deskriptori kontrolišu tretiranje blankova ulaznih
polja. Naime, kada se čitaju
brojevi, naročito celobrojni, sa terminala ili
sličnih uredjaja, korišćenje BN otklanja
potrebu za da se desno poravnaju brojevi u ulaznom polju.
BN se podrazumeva za sve
files otvorene sa OPEN, ali prepovezane fajle i interne fajle
tra`e eksplicitno BN na
početku svakog ulaznog formata. Primeri (u kojima b znači
blank):
CHARACTER*6 TEST
TEST='12bb45'
READ(TEST,11)M,N
11 FORMAT(BN,2I3)
što pripisuje
vrednost 12 M i 45 N-u (bez
BN vrednost M bi bila 120).
Faktor za skaliranje kP radi kao i u FORTRAN IV, npr.:
WRITE(*,100)(3.14159,I=1,4)
100 FORMAT(T2,F10.2,E10.2,2P,F10.2,E10.2)
stvaraju zapis sličan ovome:
3.14 0.31E01 314.16 31.4E01
Pri unosu podataka efekat je obrnut. Sa G formatom faktor
skaliranja nema efekta ako
je veličina u opsegu F formata, inače efekat je
isti kao za E format.
Edit deskriptor dve tačke se koristi kada treba isti
format da se koristi za dva ili
više izlaznih iskaza sa listama podataka različite du`ine,
npr.:
WRITE(6,11)X
11 FORMAT('X=',F10.2,:,'Y=',F10.2)
Poruka 'Y=' se u ovom slučaju ne pojavljuje na izlazu
jer je izlazna lista ispra`njena
kada pretra`ivanje formata dodje do dve tačke.
LITERATURA
1. Chirlian, Paul M.:Microsoft FORTRAN
Markt & Technik Verlag, Haar bei Muenchen, 1984.
2. Kocić, Vlajko i Zoran Konstatinović: FORTRAN
77
Univerzitet u Beogradu, Institut za nuklearne nauke "Boris
Kidrič", Vinča, Beograd, 1990.
3. Kuester, James,L., Joe H. Mize:"Optimization
Techniques with
FORTRAN", McGraw-Hill
Book Company, New York, 1973.
4. Mendaš, Istok, Predrag Milutinović, Dragan Ignjatijević:
"100 najkorisnijih FORTRAN-skih potprograma", Grupacija Mikro
knjiga, Dragon - bit in`enjering, Beograd, 1991.
5. Metcalf, Michael:"FORTRAN optimization", Academic Press,
London, 1982.
6. Page, Clive:"Pocket Guide FORTRAN 77", Pitman
Publishing Ltd,
London, 1983.
7. Parezanović, Nedeljko:"Računske mašine i
programiranje,
programski jezik FORTRAN IV", Privredno-finansijski vodič
Beograd, 1983.
8. Ridler, Philip:"Pockett Guide to FORTRAN", Pitman
Publishing
Ltd, London, 1982.
9. Tošić, Dušan:"FORTRAN 77
zbirka rešenih zadataka", Tehnička
knjiga, Beograd, 1991.
10. Wehnes, Harald:"FORTRAN 77 - Strukturierte Programmierung
mit
FORTRAN 77", Carl Hanser Verlag, Muenchen, 1985.
11. @okalj, Milan:"FORTRAN IV", Vjesnik, Zagreb,
1969.
INDEKS
A
ACCESS= 24 ,AND 7 ,argumenti potprograma 10 ,aritmetički izrazi 5 ,
aritmetički IF iskaz 22 ,
ASSIGN iskaz
20 ,
B
BACKSPACE iskaz
30 ,
bezuslovni GO TO iskaz 21 ,
BLANK= 27 ,
blank 1 ,
blok IF iskaz 21 ,
BLOCK DATA programska
jedinica 8 ,
C
CALL iskaz
10 ,
celobrojni 3 ,
CHARACTER iskaz
6 ,
CLOSE iskaz
28 ,
COMMON iskaz
17 ,
COMPLEX iskaz
4 ,
CONTINUE
iskaz 23 ,
D
DATA
iskaz 19 ,
deklarisanje
polja 15 ,
DELETE
28 ,
DIMENSION iskaz
16 ,
DIRECT 26 ,
DO iskaz
22 ,
DOUBLE PRECISION iskaz 4 ,
dvostruka tačnost 4 ,
E
ELSE iskaz
11 ,
ELSE IF iskaz
21 ,
END= 24 ,
END iskaz
23 ,
END IF iskaz
21 ,
ENDFILE iskaz
30 ,
ENTRY iskaz
11 ,
EOF= 24 ,
.EQ. 6 ,
EQUIVALENCE iskaz
17 ,
.EQV. 7 ,
ERR= 24 ,
EXIST=
28 , /
EXTERNAL
iskaz 18 ,
F
FALSE
7 ,
FILE=
27 ,
fiktivni
argument 9 ,
fiktivne
funkcije 9 ,
FMT= 24
,
FORM=
25,
FORMAT
iskaz 30 ,
FORMATTED
28 ,
formatirani
u/i sa direktnim pristupom 26 ,
FUNCTION
8 ,
funkcijski
potprogram 8 ,
funkcije
u iskazu 12 ,
G
.GE. 6
,
glavni program 7 ,
GO TO iskaz
21 ,
.GT. 6 ,
I
IF iskaz
21 ,
imena i oznake 2 ,
IMPLICIT
iskaz 15 ,
indeksi
4 ,
INQUIRE
iskaz 28 ,
INTEGER
iskaz 3 ,
INTRINSIC
iskaz 18 ,
IOSTAT=
28 ,
izgled
linije 1 ,
iskaz
o tipu podataka 16 ,
iskazi
za kontrolu 20 ,
iskazi
za specificiranje 15 ,
izračunati GO TO iskaz 21 ,
izrazi 5 ,
izrazi
odnosa 6 ,
izrazi
sa celobrojnim konstantama 6 ,
izrazi,
slovni 6 ,
K
KEEP 28
,
ključne
reči 24 ,
kompleksni
brojevi 4 ,
konstante
3 ,
L
labele
3 ,
.LE. 6
,
linija
1 , /
linija
komentara 2 ,
linija
nastavka iskaza 2 ,
logički IF iskaz 22 ,
logičke promenljive 4 ,
logički
izrazi 7 ,
LOGICAL
iskaz 4 ,
lokalna
i opšta (globalna) imena 2 ,
.LT. 6 ,
M
MAIN 7,8 ,
N
NAME= 28 ,
NAMED= 28 ,
.NE. 6 ,
neformatirani
u/i sa direktnim pristupom 26 ,
neponavljajući
edit - deskriptori 32 ,
.NEQV.
7 ,
NEW
27 ,
NEXTREC= 29,
NOT 7,
NUMBER= 528 ,
O
OLD 29,
OPEN iskaz
28,
OPENED= 30,
OR 9,
oznake - labele 3 ,
P
PARAMETER iskaz
16,
PAUSE iskaz
25,
početna linija 3
polja, indeksi i podnizovi 6,
ponavljajući edit - deskriptori
33,
potprogram 12,
potprogram SUBROUTINE 12,
pozivanje na funkcije 12,
pre-povezane
datoteke 25,
pridani-pripisani
GO TO iskaz 22,
PRINT iskaz
31,
PROGRAM iskaz
10,
programske jedinice 9,
promenljive 3,
prostor u memoriji 5,
R
READ iskaz
31,
READ, WRITE I PRINT iskazi 25, 31,
realni 4,
REAL iskaz
4,
RECL= 28,
redosled iskaza 10,
redosled izračunavanja
7 ,
RETURN iskaz
13,
REWIND iskaz
32,
S
SAVE iskaz
20,
SCRATCH 27 ,
sekvencijalne datoteke 25 ,
sekvencijalni zapis 26,
sekvencijalni
formatirani u/i 26,
sekvencijalni
listom odredjeni u/i 27,
sekvencijalni
neformatirani u/i 27,
simbolička
imena 3,
slobodan
format 27,
slovni
izraz 8,
slovni
podnizovi 6,
specifikacija FORMAT 32,
STATUS= 29, 30,
STOP iskaz
10, 24,
struktura
programa 9,
SUBROUTINE
potprogram 9 ,
T
TRUE 5,
U
ulazno/izlazni
iskazi 25 ,
u/i sa
interne datoteke 28,
UNFORMATTED 27,29-31
UNIT= 26,
UNKNOWN 29,
unutarnje funkcije 12,15,
unutarnje datoteke 28,
uvod 1,
V
vrste podataka 4,
vrste
iskaza 9,
vrste
u/i 25 ,
W
WRITE
iskaz 31 ,
Z
znakovi
i linije 2 ,
Predmetni tekstovi se nalaze na serveru
lotos.ffh.bg.ac.yu
Predmetni tekstovi se nalaze na serveru
lotos.ffh.bg.ac.yu
Last
Revised: