Fortran 90/95. + sopii erityisesti numeriikkaan:



Samankaltaiset tiedostot
BJ30A1000 Kemiantekniikan tietotekniikka Fortran

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Tietotyypit ja operaattorit

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Java-kielen perusteet

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python

BL40A0000 Säätötekniikan ja signaalinkäsittelyn

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

ATK tähtitieteessä. Osa 2 - IDL perusominaisuudet. 12. syyskuuta 2014

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Harjoitustyö: virtuaalikone

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

0. Kertausta. Luvut, lukujoukot (tavalliset) Osajoukot: Yhtälöt ja niiden ratkaisu: N, luonnolliset luvut (1,2,3,... ) Z, kokonaisluvut

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Ohjelmoinnin peruskurssi Y1

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Strukturoitu ohjelmointi

ITKP102 Ohjelmointi 1 (6 op)

Tutoriaaliläsnäoloista

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

11. Javan toistorakenteet 11.1

Kielioppia: toisin kuin Javassa

Ehto- ja toistolauseet

Numeeriset menetelmät

Yhtälön ratkaiseminen

MAT Laaja Matematiikka 1U. Hyviä tenttikysymyksiä T3 Matemaattinen induktio

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

12. Javan toistorakenteet 12.1

811120P Diskreetit rakenteet

12. Javan toistorakenteet 12.1

Java-kielen perusteita

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

7. Näytölle tulostaminen 7.1

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

Ohjausrakenteet. Valinta:

Algoritmit 1. Demot Timo Männikkö

811120P Diskreetit rakenteet

plot(f(x), x=-5..5, y= )

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Luento 2: Viivan toteutus

Funktion määrittely (1/2)

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

4.3. Matemaattinen induktio

Java-kielen perusteita

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmoinnin perusteet Y Python

Python-ohjelmointi Harjoitus 2

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Ohjelmoinnin peruskurssi Y1

TIEA341 Funktio-ohjelmointi 1, kevät 2008

815338A Ohjelmointikielten periaatteet

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

etunimi, sukunimi ja opiskelijanumero ja näillä

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

16. Ohjelmoinnin tekniikkaa 16.1

Ohjelmoinnin perusteet Y Python

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

16. Ohjelmoinnin tekniikkaa 16.1

3. Muuttujat ja operaatiot 3.1

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.


Python-ohjelmointi Harjoitus 5

Valitse ruudun yläosassa oleva painike Download Scilab.

Johdatus Ohjelmointiin

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Muuttujien roolit Kiintoarvo cin >> r;

Ohjelmoinnin perusteet Y Python

Kaikkia alla olevia kohtia ei käsitellä luennoilla kokonaan, koska osa on ennestään lukiosta tuttua.

Ohjelmoinnin perusteet Y Python

1. Murtoluvut, murtolausekkeet, murtopotenssit ja itseisarvo

Loppukurssin järjestelyt C:n edistyneet piirteet

5/20: Algoritmirakenteita III

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

PERUSASIOITA ALGEBRASTA

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

13. Loogiset operaatiot 13.1

Ohjelmoinnin peruskurssi Y1

Fysiikan matematiikka P

Transkriptio:

Fortran 90/95 + sopii erityisesti numeriikkaan: + optimoivat kääntäjät tehokas koodi + mukana valmiiksi paljon varusfunktioita + kompleksiluvut + taulukko-operaatiot + operaattorit laajennettavissa myös omille tietotyypeille + standardoitu hyvä siirrettävyys + saatavana hyviä aliohjelmakirjastoja (NaG yms.) + kääntäjät hyväksyvät myös vanhat ohjelmat, joita on liikkeellä paljon - useimmat vanhoista ohjelmista hirveitä sekasotkuja - kivikautisia sudenkuoppia, joita opittava varomaan (aina f77:ään saakka; f90:stä lähtien ongelmat voidaan välttää)

Esimerkki: Lähdekielinen ohjelma tiedostossa addition.f90: program addition real x,y,z write(*,*) anna kaksi lukua read (*,*) x,y z=x+y write(*,*) summa on,z end program addition Käännös ja suoritus (esimerkiksi): >f95 -o add addition.f90 >add anna kaksi lukua 1,3 summa on 4.00000000 >

Esimerkki: Yksinkertainen yhtälön ratkaisija Kirjoitetaan yhtälö muotoon x = f(x). Esimerkiksi x 5 x 1 = 0 x = x 5 1 tai x = (1 + x) 0.2 program solve! etsitaan yhtalon x**5-x-1=0! reaalijuuri real x0, x1 x0 = 0.5! arvataan alkuarvo x1=(1.0+x0)**0.2! iteroidaan, kunnes tulos ei muutu do while (x1.ne.x0) x0 = x1 x1 = (1.0+x0)**0.2 end do write (6, *) x1, x1**5-x1-1 end program solve >f95 -o solve solve.f90 >./solve 1.16730404 5.03132583E-07

Ohjelman ulkoasu Fortran 77:ssa on vain kiinteä sarakesidonnainen kirjoitusasu. F90:stä lähtien käytännössä myös vapaa srakkeista riippumaton muoto. Eri muotoja ei saa käyttää sekaisin. Seuraavassa käsitellään vain vapaata muotoa. Pienillä ja isoilla kirjaimilla ei ole eroa (paitsi mahdollisesti tiedostojen nimissä käyttöjärjestelmästä riippuen). Kannattaa kuitenkin olla johdonmukainen ja kirjoittaa sama nimi aina samalla tavalla. Typografisesti isojen kirjainten runsas käyttö voi tehdä tekstistä vaikeasti luettavaa. Lause päättyy automaattisesti rivin loppuun, joten erityistä erotinta ei tarvita. Jos lause jatkuu useammalle riville, se on erikseen osoitettava. Rivin lopussa oleva &-merkki ilmoittaa, että lause jatkuu seuraavalla rivillä: y = 1.0 + x + 0.5 * x**3 & + 1.0/6 * x**4 Lauseen maksimipituus on 40 riviä. Kommentit: Rivin loppu huutomerkistä (!) eteenpäin on kommentti, jota kääntäjä ei käsittele. Kommentti pättyy rivin loppuun, joten erityistä loppumerkkiä ei tarvita.

Yksinkertaiset muuttujat Perinteisesti yksinkertaisilla muuttujilla on implisiittinen tyyppi: - integer, jos ensimmäinen kirjain I N - real muuten Vaarallista! Väärin kirjoitettu muuttujan nimi tulkitaan vain eri muuttujaksi. x0=1.0 if (xo.gt.o)... Tämä voi johtaa hyvin hankalasti jäljitettäviin virheisiin. Määrittele siis kaikki muuttujat! Estä implisiittisten määrittelyjen käyttö: implicit none Yksinkertaisten muuttujien tyypit ovat: integer real logical (arvo.true. tai.false. ) complex double precision character

Muuttujan määrittelyn täydellinen muoto tyyppi (parametrit), attribuutit :: nimi Parametrit määrittelevät muuttujan esitystavan, attribuutit taulukon koon ja muuta tilanvaraukseen liittyvää tietoa. F90:ssä haluttu esitystarkkuus määriteltävissä laitteistosta riippumattomalla tavalla. Mutta: toteutetaan vain muutaman erilaisen muuttujatyypin avulla, mielivaltaisen suurta tarkkuutta ei ole käytettävissä. Muuttujan esitystarkkuus ilmoitetaan kind-attribuutilla: integer count integer (kind=selected_int_kind(5)) :: count integer (selected_int_kind(5)) :: count Kaksi viimeistä määrittelevät muuttujan, jonka esittämiseen tarvitaan korkeintaan 5 numeroa. integer, parameter :: maxn=1000 real, parameter :: pi=3.141592654 maxn ja pi vakioita, joiden arvoja ohjelma ei saa muuttaa real (kind=selected_real_kind(5)) :: a, b real (kind=selected_real_kind(5,20)) :: c tarkkuus viisi desimaalia; c:n lukualue 10 20 10 20. integer, parameter :: short=selected_int_kind(4), & long=selected_int_kind(7), & longreal=selected_int_kind(10, 100) integer (kind=short) :: i,j integer (kind=long) :: isoluku real (kind=longreal) :: big

Vakiot Kokonaisluvut 123 123_short 1234567_long Reaaliluvut 1.5-1.5 1.5E10 1.5E-10 1.5_longreal 1.5E-10_longreal Sijoitusoperaattori = i=100 x=1.5

Lausekkeet 1.0+2.0*y/z**2-3.5*(y+x) Normaali assosiatiivisuus: - ensin ** (potenssiinkorotus) - sitten * ja / vasemmalta oikealle - lopuksi + ja - vasemmalta oikealle - järjestystä voidaan muuttaa suluilla Ensin lasketaan sijoitusoperaattorin = oikealla puolella oleva lauseke, se muunnetaan vasemmalla olevan muuttujan tyyppiseksi ja talletetaan muuttujaan real x x = 1/2! x=? Kokonaislukujen jakolaskun tulos on kokonaisluku (osamäärän kokonaisosa) x=1.0/2

Varusfunktiot (intrinsic functions) Trigonometriset funktiot (kulmat aina radiaaneina!): sin(x), cos(x), tan(x) asin(x), acos(x), atan(x), atan2(y,x) Hyperboliset funktiot: sinh(x), cosh(x), tanh(x) Eksponentti, logaritmi ym. exp(x), log(x), log10(x), sqrt(x) Minimi ja maksimi; argumenttien määrä mielivaltainen: Itseisarvo min(x, y,...), max(x, y,...) abs(x) Esim. muunnos pallokoordinaatistoon real x,y,z,r,phi,theta real, parameter :: pi=3.141592654 x=-1.0 ; y=3.0; z=2.0 r=sqrt(x**2+y**2+z**2) phi=atan2(y,x)*180.0/pi theta=asin(z/r)*180.0/pi

Vertailuoperaattorit ==.eq. /=.ne. <.lt. <=.le. >.gt. >=.ge. Huom: = on sijoitusoperaattori; vertailu on ==. integer n logical d d = n == 100*(n/100) d = n.eq. 100*(n/100)! tosi, jos n jaollinen 100:lla

Loogiset vakiot.true..false. Loogiset operaattorit.and..or..not. X.and.Y on tosi, jos ja vain jos X==.true. ja Y==.true.. X.or.Y on tosi, jos X==.true. tai Y==.true. tai molemmat ovat tosia..not.x on tosi, jos X==.false.. logical leap, d4, d100, d400 integer y... d4 = y==4*(y/4) d100 = y==100*(y/100) d400 = y==400*(y/400) leap = d4.and.(.not.d100.or. d400)

Peruskontrollirakenteet: Peräkkäisyys Tavallisesti kukin lause kirjoitetaan omalle rivilleen, jolloin ei tarvita mitään erotinta: x=1.0 y=exp(-x**2/2) z=1-y Samalla rivillä voi olla useita lauseita, jotka erotetaan puolipisteellä: x = 1.0 ; y = 2.0 ; z = 0.1

Peruskontrollirakenteet: Valinta Yksi vaihtoehto: if (x > 0.0) y = 1/x if (x > 0.0.and. x < 100.0) y=exp(x) if (x > 0.0) then y=1/x z=log(x) end if Lause(et) suoritetaan vain, jos ehto on voimassa, muulloin ei tehdä mitään Kaksi vaihtoehtoa: if (x > 0.0) then y=1/x else y=0.0 end if Useampia vaihtoehtoja: if (x > 0.0) then y=log(x) else if (x < 0.0) then y=-log(abs(x)) else y=0.0 end if

Peruskontrollirakenteet: Toisto Kiinteä kierrosmäärä: sum=0.0 do i=1,100 sum=sum+i end do Lause sum=sum+i suoritetaan toistomuuttujan i arvoilla 1, 2,... 100. Toistomuuttujan askel voi olla myös jokin muu kokonaisluku: sum=0.0 do i=0,100,2! parillisten lukujen summa sum=sum+i end do Toisto, kunnes lopetusehto toteutuu: x=0.2 sum=0.0 term=1.0 do while (term > 0.0001) sum = sum+term term = term*x end do Missä tahansa toistolauseessa iteraatiokierros voidaan keskeyttää ja aloittaa seuraava kierros lauseella cycle (kuten C:n continue): s=0.0 do i=1,100 read (5, *) x if (x <= 0.0) cycle s=s+log(x) end do

n + 1/2 kierroksen silmukka: Muodollisesti ikuinen silmukka, jonka lopetusehtoa tutkitaan jossakin silmukan sisällä. Silmukasta voidaan poistua lopulisesti exit-lauseella (kuten C:n break): x0 = 0.5 do x1=(1.0+x0)**0.2! lopetetaan, jos tarkkuus saavutettu if (abs(x1-x0) < 0.0001) exit x0 = x1 end do Lopetusehtoja voi olla useita eri paikoissa silmukkaa: x0 = 0.5 n=0 do x1=(1.0+x0)**0.2 if (abs(x1-x0) < 0.0001) exit n=n+1 if (n > 100) exit x0=x1 end do

Syöttö ja tulostus read (laitenumero, formaatti) muuttujaluettelo write (laitenumero, formaatti) muuttujaluettelo open (laitenumero, tiedoston attribuutit) close (laitenumero) Kullakin tiedostolla on yksikäsitteinen laitenumero (LUN, logical unit number). Perinteisesti 5=kortinlukija (nykyisin yleensä pääte), 6=rivikirjoitin (se sama pääte). Formaatti on merkkijono, joka määrittelee, miten tulostus muotoillaan. Vapaan formaatin merkki on *. read(5,*) x,y z=x+y write (6,*) x,y,z