write(*, label) változók listái cimke format formázási kódA format alkalmazását szemlélteti az alábbi kis példa. Tegyük fel, hogy van egy egész változónk, amit 4 karakteres alakban illetve egy valós számunk, amit fixpontos kiírással és 3 tizedesjeggyel kívánunk kinyomtatni.
write(*, 900) i, x 900 format (I4,F8.3)A formázási cimke (900) megválasztása tetszõleges. Az elterjedt gyakorlat az, hogy a formázási cimke számot mindig megasabbnak választják, mint a többi utasításokét. A format utasítás mögötti zárójelben lévõ kódok utalnak a formázás alakjára. Ebben az esetben az I4 jelenti a 4 karakter hosszúságú egész számot, míg az F8.3 jelöli a fixpontos 8 karakter hosszúságú valós számot, melybõl 3 karakter a tizedesjegyeké.
A format utasítás a program bármelyik részében elõfordulhat. Két programozási stílus is van: az egyik a format utasítást azonnal a read/write parancsok mögé írja, a másik a format parancsot egy helyre összegyüjtve, a (szub)program végén jeleníti meg.
A - szöveg D - pontosabb valós szám, exponenciális alak (normált alak) E - valós szám, exponenciálos alak (normált alak) F - valós szám, fixpontos formátum I - egész X - horizontális ugrás (space=szóköz) / - vertikális ugrás (új sor)Az F (és a D és E) kódok általános alakja Fw.d ahol w a szám hosszúságát (karaktereinek számát), d pedig egy egész szám, mely a tizedeshelyek számát adja meg.
Egész számoknál csak a szám hosszúságát kell megadni, tehát a szintakszis Iw. Ehhez hasonló a szöveges formátumnál is megadható a hosszúság (Aw), de ezt ritkán tüntetik fel.
Ha egy szám vagy szöveg nem tölti ki a teljes (elõre megadott) mezõt, akkor üres helyekkel egészíti ki a program. Általában hiányos a szöveget jobbról egészíti ki, de vannak olyan fordítók is, amik máshogy járnak el.
Szóközökre az nX kódot hasznáják. Ez n szóközt jelent. Ha n -et elhagyjuk, akkor azt n=1 -nek értelmezi (azaz egy szóköz).. Vertikális ugrásokra (új sor kezdésre) a / (törtvonal) jelölést alkalmazzuk. Minden ilyen törtvonal egy-egy új sort jelent. Fontos megjegyeznünk, hogy alapértelmezettként minden read vagy write utasítás egy ilyen új sorkezdéssel zárul. (Ebben a Fortran és a C között eltérés van.)
x = 0.025 write(*,100) 'x=', x 100 format (A,F) write(*,110) 'x=', x 110 format (A,F5.3) write(*,120) 'x=', x 120 format (A,E) write(*,130) 'x=', x 130 format (A,E8.1)amit, ha lefutattjuk, akkor a kimenet az alábbi lesz:
x= 0.0250000 x=0.025 x= 0.2500000E-01 x= 0.3E-01Érdemes megnézni, hogy a Fortran hogyan helyezi el az egyes eredményeket, illetve azt, hogy alapértelmezettként 14 karakter széles helyet hagy egy való számnak. A Fortran kerekítési szabályai: 0-4 és közötti számot lefelé, az 5-9 közötti értéket fölfelé kerekíti.
Ebben a példában minden egyes write utasításhoz, különféle formázási utasítást használtunk. Természetesen lehet, egyfajta formátumot több I/O utasításhoz is rendelni. Pont ebben rejlik a format parancs elõnye. Például egy táblázat elemeinek nyomtatásánál a sorokat egyfajta formátumban kivánjuk megjeleníteni, ilyenkor is praktikus a format utasítás.
write (*,'(A, F8.3)') 'A valasz x = ', xami ugyazt jelenti, mint a következõ: :
write (*,990) 'A valasz x = ', x 990 format (A, F8.3)Néha a szöveges formátumot is megadjuk a format utasítással, ekkor ez a megoldás is ugyanazt adja, mint a fenti kettõ:
write (*,999) x 999 format ('A valasz x = ', F8.3)
do 10 i = 1, 5 write(*,1000) (a(i,j), j=1,10) 10 continue 1000 format (I6)Két ciklusunk van, egy explicit, ami a sorokon szalad végig, és egy implicit, mely az oszlopokon (j index).
Gyakran egy format utasítás ismétlõdésekbõl állhat, például:
950 format (2X, I3, 2X, I3, 2X, I3, 2X, I3)De erre is van egy összevont írásmód:
950 format (4(2X, I3))Lehetséges az is, hogy megengedjük az ismétlést, anélkül, hogy feltüntetnénk hányszor is kéne ismételnünk. Tegyük föl, hogy van egy vektorunk, aminek az elsõ 50 elemét kívánjuk kinyomtatni, tizesével megjelenítve. Egy lehetséges megoldás:
write(*,1010) (x(i), i=1,50) 1010 format (10I6)Ez a format parancs 10 szám kinyomtatását jelenti. De mi a write utasítással 50 szám kiírását akarjuk elérni, tehát miután kinyomtatta az elsõ 10 darab számot, "visszaugrik" és kinyomtatja a következõ tizet, majd még ezt háromszor megismétli.
Implicit do ciklusokat alkalmazhatunk sokdimenziós ( 3 fölött) esetekre is, de mi inkább kerüljük a használatát, mivel túlzottan elbonyolítja a programunkat és megnehezíti a megértését. A fent tekintett példa egy egyszerû esete volt ennek, a sokdimenziós problémák sokkal összetettebbek.
Copyright © 1995-7 by Stanford University. All rights reserved.
Fordították: Seres András Tamás és Szalai Szilvia (ELTE-TTK)