next up previous
Naprej: Resevanje sistema enacb Gor: Laboratorijske vaje pri predmetu Nazaj: Delo na racunalniku

Fortran

Tu bom prikazal standardne posebnosti v Fortranu, ki jih boste s pridom uporabili pri programiranju. Priporoca se tipkanje programa z malimi crkami, saj je tako kodiran program bolj citljiv.

Ce zelimo interpretirati (parsing) vhodne podatke ki imajo (na)kljucne besede skupaj s stevilcnim parametrom je potrebno najprej prebrati celotno vrstico kot niz znakov in ga nato interpretirati glede na vrsto kljucne besede. Naslednji primer programa prebere standardno vhodno enoto (tipkovnica) in izpise parameter, ce je na zacetku vrstice vtipkana kljucna beseda pipes.

    program stringReadDemo
C   demonstrira uporabo branja iz ene vrstice
C   in primerjanje klju\v{c}ne besede z parametrom
    character*80 line
    read(*,'(A)') line
    if(line(1:5) .eq. 'pipes') then
       read(line(6:80), '(I10)') pipes
       print *, 'Pipes=', pipes
    endif
    stop
    end

Navedeni primer vsebuje formatne stavke vkljucene kar v ukaz read, kar je ugodno, ce imamo male formatne stavke. Podobno bi lahko napisali formatni stavek za ukaz read/write:

   character ime*65
   write(*, '('' Ime vhodne datoteke: '',$)')
   read(*,'(A)') ime

Datoteke delimo na tekstne in binarne datokeke. Direktna datoteka je poseben primer binarne datoteke, ki ima fiksno dolzino zapisa (record). Fortran omogoca branje/pisanje v prostem formatu (*), uporabniskem formatu (format()) in brez formata (samo v binarne datoteke). Neformatirano direktno datoteko z dolzino enega zapisa 58 bytov se odpre z ukazom

    open(1, 'results.bin', status='NEW',
  * access='DIRECT', form='UNFORMATTED',
  * recl=58)

Dolzina enega zapisa RECL se doloca z maksimalno velikostjo zapisa v datoteki. Zapisi imajo lahko razlicne vsebine podatkov, dolzina zapisa pa je fiksna zaradi hitrejsega dolocanja pozicije datotecnega kazalca. Doloci se jo s sestevkom dolzine vseh spremenljivk in upostevanjem, da zavzame realna spremenljivka 4 byte, celostevilcna 2, znakovna pa toliko, kolikor znakov ima rezerviranih.

Za branje in pisanje enote se uporablja standardni read/write stavek brez podatka o formatu.

     write(1, rec=2) cev,x,y,z,Q,v
     read(1, rec=2)  cev,x,y,z,Q,v

Pri vseh branjih in pisanjih se lahko testira napaka ob konverziji ali napaka na vhodno/izhodno enoti s parametrom err. Primer:

    ...
    read(line(6:80), '(I10)', err=102) pipes
    ...
    return
102 stop 'Napaka pri branju parametra pipes!'
    end

Celoten program za izracun mreze bi lahko vseboval sledece zaporedje podprogramov:



Leon Kos
Mon Oct 9 07:22:25 GMT+0100 1995