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

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

Harjoitustyö: virtuaalikone

Zeon PDF Driver Trial

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Omat operaatiot 1.1

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

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

Ohjelmoinnin perusteet Y Python

IDL - datan sovitus. ATK tähtitieteessä. IDL - esimerkiksi linfit. IDL - esimerkiksi linfit

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

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

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

ATK tähtitieteessä. Osa 5 - IDL datan sovitusta ja muita ominaisuuksia. 25. syyskuuta 2014

Tutoriaaliläsnäoloista

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

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

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Muuttujien roolit Kiintoarvo cin >> r;

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

linux: Ympäristömuuttujat

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

12. Javan toistorakenteet 12.1

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

11. Javan toistorakenteet 11.1

TAMPEREEN TEKNILLINEN YLIOPISTO

ASCII-taidetta. Intro: Python

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

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

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

Ohjelmoinnin peruskurssi Y1

811120P Diskreetit rakenteet

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Ohjelmointiharjoituksia Arduino-ympäristössä

Kielioppia: toisin kuin Javassa

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

Tarkennamme geneeristä painamiskorotusalgoritmia

Sisältö. 22. Taulukot. Yleistä. Yleistä

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

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Ohjelmoinnin peruskurssi Y1

1. Mitä tehdään ensiksi?

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

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

Ehto- ja toistolauseet

Valitse ruudun yläosassa oleva painike Download Scilab.

12. Javan toistorakenteet 12.1

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

Ohjelmoinnin perusteet Y Python

Hellä ensikosketus. Tomi Kiviniemi

Muistutus aikatauluista

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Matlab- ja Maple- ohjelmointi

Python-ohjelmointi Harjoitus 5

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Luento 4. Timo Savola. 21. huhtikuuta 2006

Numeeriset menetelmät

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

14. Hyvä ohjelmointitapa 14.1

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Transkriptio:

IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja, jotka voidaan ajaa IDL-komentoriviltä. Tiedostot suoritetaan rivi kerrallaan, ja syntaksi on käytännössä sama kuin suoraan komentotilassa. Proseduureja on kolmea eri tyyppiä: Pääohjelmat. Aliohjelmat. Funktiot. Proseduurin kutsuminen ja ajaminen riippuu sen tyypistä. Tiedostomuoto on muotoa.pro. Jokainen proseduuri päättyy riviin jossa lukee vain END. IDL - proseduurit IDL - pääohjelmat Hyvä ohjelmien kehitystapa on pitää editoitava ohjelma taustalla esimerkiksi Emacs-ikkunassa, tallennetaan muutokset ja katsotaan komentotilassa ohjelma ajamalla mitä muutokset ovat saaneet aikaan. Proseduuritiedostossa rivejä voi kommentoida pois, tai vastaavasti kommentteja voi lisätä omiksi muistiinpainoiksi lisäämällä rivin alkuun merkin ;. Tällöin ohjelmaa ajaessa tätä riviä ei huomioida. Perusohjeena voidaan sanoa, että jos tarpeesi ovat taskulaskinkäyttöä monimutkaisempia on käytännöllisempää tehdä asiasta proseduuri. Pääohjelma-tyyppinen proseduuri käyttää samaa työtilaa kuin interaktiivinen käyttö. Toisin sanoen, ohjelman suorituksen jälkeen siinä määritellyt muuttujat ja parametrit jäävät aktiiviseksi komentotilaan. Yksinkertaisimmillaan pääohjelma on muotoa: print, Hello world! Ohjelma ajetaan komennolla.run tiedostonimi. Esimerkiksi: IDL>.run yksinkertainen.pro % Compiled module: $MAIN$. Hello world! Jos tiedostonimessä muistetaan käyttää.pro päätettä, voidaan se jättää komentotilassa huomiotta: IDL>.run yksinkertainen % Compiled module: $MAIN$. Hello world!

IDL - pääohjelmat Ohjelman sisällä voidaan viitata muuttujaan eri kohdassa ohjelmaa, ja sen arvoa voidaan muuttaa ohjelman edetessä. Pääohjelmat ovat erittäin käytännöllisiä kun tarvitaan ohjelmia joissa on paljon erilaisia määrittelyitä ja halutaan tallentaa ne myöhempää käyttöä varten. Ohjelmiin voi sisällyttää erilaisia silmukkarakenteita (käydään läpi hieman myöhemmin). Pääohjelmien ongelmien etsiminen on myös helppoa. Jos suoritus pysähtyy virheeseen voi muuttujien arvoja katsoa komentotilassa. Aliohjelmilla on oma muuttuja-alueensa. Eli käytetyt muuttujat eivät siirry automaattisesti komentotilaan. Muuttujat ja niiden arvot voidaan kuitenkin siirtää komentotilaan (tai komentotilasta aliohjelmaan) ohjelman kutsussa määriteltyjen argumenttien avulla, jos näin halutaan. Aliohjelma-proseduuri määritellään sen alussa olevalla rivillä: PRO aliohjelman nimi, arg1, arg2,..., keyword1=keyword1, keyword2=keyword2,... Jossa kerrotaan aliohjelman nimi, ja mahdolliset argumentit sekä avainsanat (keyword). Aliohjelma myös päättyy riviin jossa lukee. Aliohjelman nimen ei tarvitse olla sama kuin tiedostonimen, ja yhdessä tiedostossa voidaan määritellä useita eri aliohjelmia. Tässä esimerkki hyvin yksinkertaisesta aliohjelmasta: pro aliohjelman nimi,x,kappaletta ; määritellään aliohjelmassa x, ; ja käytetään toista argumenttia ; sen luomiseen x = findgen(kappaletta) Aliohjelma käännetään komennolla: IDL>.run aliohjelma.pro Tämä ei kuitenkaan suorita sitä. Suoritus tapahtuu kirjoittamalla aliohjelman nimi ja argumentit pilkulla eroteltuna. Esimerkiksi ylläolevaa ohjelmaa voi kutsua komentotilasta tai toisesta ohjelmasta: IDL> aliohjelman nimi,uusimuuttuja,5 Koska määrittelimme aliohjelman tallentamaan muuttujaan x taulukon, voimme aliohjelman suorituksen jälkeen katsoa sen arvoja: IDL> print,uusimuuttuja 0.00000 1.00000 2.00000 3.00000 4.00000 On syytä muistaa muutama asia aliohjelmista: Jos aliohjelmaa muuttaa, on muistettava kääntää se ennen uudelleen suorittamista. Muutoin muutokset eivät ole voimassa. Mikäli aliohjelma päättyy virheeseen eivät varsinaisen työtilan muuttujien arvot yms. ole käytettävissä. Takaisin perustilaan pääsee antamalla komennon retall. Aliohjelmaan syötettävät argumentit voivat olla muuttujia tai vakioita. Aliohjelmasta ulos saatavat tietojen (output-parametrien) on oltava muuttujia. Suoritettaessa annettavan argumentin nimen ei tarvitse olla sama kuin aliohjelman sisällä oleva nimi. Argumenttien järjestyksellä kutsussa on väliä. Keywordien käyttöä kutsussa etsitään aliohjelmassa käyttämällä keyword set(keyword)-rakennetta. Sen käytöstä lisää manuaalissa.

IDL - funktiot Funktio-rakenteen suurin ero aliohjelmaan on, että funktiot voivat palauttaa vain yhden muuttujan. Funktio määritellään sen alussa olevalla rivillä: FUNCTION funktion nimi, arg1, arg2,..., keyword1=keyword1, keyword2=keyword2,... Palautettava muuttuja määritellään funktion lopussa return-lauseella. Aiempi aliohjelma funktioksi muutettuna: function funktion nimi,kappaletta x = findgen(kappaletta) return,x Funktio käännetään kuten pää- ja aliohjelmat komennolla: IDL>.run funktio.pro Funktiota kutsutaan komennolla: muuttuja=funktion nimi(arg1, arg2,..., keyword1=keyword1,...) IDL - funktiot Esimerkiksi äskeinen yksinkertainen esimerkkiohjelma: IDL>.run funktio.pro IDL> uusimuuttuja=funktion nimi(5) IDL> print,uusimuuttuja 0.00000 1.00000 2.00000 3.00000 4.00000 Aliohjelmien yhteydessä mainitut muistettavat erityishuomioit pätevät myös funktioihin. IDL - komentorakenteet Proseduureissa voidaan käyttää muun muassa seuraavia rakenteita: FOR-silmukat, IF-rakenteet, WHILE-rakenne, STOP-proseduuri. FOR-rakenteella voidaan tehdä silmukoita, joissa haluttuja toimenpiteitä toistetaan. Esimerkiksi jos haluttu toimenpide on yksittäinen komento. tulostaa luvut 0, 1,..., 10. FOR i=0,10 DO print,i tulostaa luvut 0, 2, 4, 6, 8, 10. FOR i=0,10,2 DO print,i Esimerkeistä nähdään rakenteen tärkeät elementit: FOR aloittaa silmukan määrittelyn. Silmukassa aktiivinen muuttuja jonka arvoja muutetaan. Ylläolevissa esimerkeissä muuttuja i. Aktiivisen muuttujan arvoväli. Kaksi ensimmäistä pilkulla erotettua numeroa muuttujan esittelyn (i=) jälkeen. Aktiivisen muuttujan arvon muutos, kolmas pilkulla erotettu numero. Ei pakollinen, vakiolisäys on +1. DO aloittaa itse silmukan.

Jos silmukassa suoritetaan useita komentoja käytetään seuraavaa rakennetta: j=fltarr(10) FOR i=0,9 DO BEGIN j(i)=i*i print,i,j(i) Nyt BEGIN ilmoittaa että seuraa useita lauseita. päättää silmukan. Esimerkissä on myös rakenne, jossa taulukkon arvoja muutetaan silmukassa käytettävän muuttujan avulla. Tämä on hyvin yleistä. On muistettava että IDL:ssä taulukon ensimmäisen alkion indeksi on 0, vastaavasti viimeisen on siis taulukon koko -1. Tässä hieman monimutkaisempi esimerkki, jota voitte kokeilla myös harjoituksissa: ;taulukkomäärittelyt x=fltarr(50,50) & y=x & z=x ;x- ja y-juoksevat numerot FOR i=0,49 DO BEGIN FOR j=0,49 DO BEGIN x(i,j)=float(i) y(i,j)=float(j) ;arvot välillä [-5,5] x=x/5.-5. y=y/5.-5. ;mielivaltainen z-pinta z=sin(2*y)*cos(x) ;piirretään varjostettu pinta shade surf,z END Joka tuottaa seuraavaa: IDL - IF-rakenne IF-rakenteella voidaan suorittaa komento, jos määritelty ehto täyttyy. Esimerkiksi jos haluttu toimenpide on yksittäinen komento. Jos x 2 tulostetaan tämä: IF x NE 2 THEN print, x ei ole 2 Sulkuja voidaan myös käyttää selventämään koodia: IF(x NE 2) THEN print, x ei ole 2 Lisää mahdollisia rakenteita: IF(x EQ 2) THEN print, x=2 IF(x LE 2) THEN print, x<=2 IF(x GT 2 or LT 0) THEN print, x>2 tai x<0 IF(x GT 2 or LT 10) THEN print, 2<x<10 IF(x GT 2 AND x NE 10) THEN print, x>2 ja x!=10

IDL - IF-rakenne Rakenne jos halutaan suorittaa useampia komentoja ehdon täyttyessä on seuraava: IF(x EQ 0) THEN BEGIN print, x=0 y=2. ENDIF Nyt THEN BEGIN ilmoittaa että ehdon täyttyessä seuraa useita lauseita. ENDIF päättää komennot. Voidaan myös lisätä ELSE-rakenne joka suoritetaan jos ehto ei täyty: IF(x EQ 0) THEN BEGIN print, x=0 y=2. ENDIF ELSE BEGIN print, x!=0 y=1. ENDELSE IDL - WHILE-rakenne WHILE DO rakenteella suoritetaan toimintoa kunnes annettu ehto ei ole enää voimassa. Esimerkiksi: IDL> x=0. IDL> WHILE x LT 10. DO x=x+1. IDL> print,x 10.0000 Taas jos halutaan suorittaa useita komentoja kunnes ehto ei ole enää voimassa: x=0. WHILE(x lt 10.) DO BEGIN x=x+1. print,x ENDWHILE IDL - STOP-proseduuri STOP-proseduurilla voidaan pysäyttää ohjelma suoritus halutussa kohdassa ja palata takaisin komentotilaan. Esimerkiksi: stop,x,y Jolloin ohjelma pysähtyy ja printtaa x- ja y-muuttujien arvot. Voidaan käyttää esimerkiksi ohjelmien debuggauksessa, tai jos halutaan lopettaa ohjelman suoritus tietyn ehdon täyttyessä. Vastaavia proseduureja on for, if ja while rakenteiden lopettamiseen, mutta näitä käyttäen ohjelma suoritetaan muuten loppuun. Lisätietoja manuaalista.