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



Samankaltaiset tiedostot
Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Monipuolinen esimerkki

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

Fortran 90/95. + sopii erityisesti numeriikkaan:

Lyhyt kertaus osoittimista

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

BJ30A1000 Kemiantekniikan tietotekniikka Fortran

Osoitin ja viittaus C++:ssa

ITKP102 Ohjelmointi 1 (6 op)

Strukturoitu ohjelmointi

Kielioppia: toisin kuin Javassa

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

TAMPEREEN TEKNILLINEN YLIOPISTO

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

Tietorakenteet ja algoritmit

TAMPEREEN TEKNILLINEN YLIOPISTO

811120P Diskreetit rakenteet

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

ITKP102 Ohjelmointi 1 (6 op)

Olio-ohjelmointi Javalla

Yhtälön ratkaiseminen

TIE Tietorakenteet ja algoritmit 25

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

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

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Numeerinen integrointi

Numeeriset menetelmät

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Luento 2: Viivan toteutus

815338A Ohjelmointikielten periaatteet

811120P Diskreetit rakenteet

Mathematica Sekalaista asiaa

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

C++11 lambdat: [](){} Matti Rintala

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 2. Luento 8 To Timo Männikkö

Harjoitustyö: virtuaalikone

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

811120P Diskreetit rakenteet

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmien analysointi. ER-kaaviot

815338A Ohjelmointikielten periaatteet

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Aliohjelmat imperatiivisissa ohjelmointikielissä

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

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

Zeon PDF Driver Trial

Tilastotieteessä aikasarja tarkoittaa yleensä sarjaa, jossa peräkkäisten havaintojen aikaväli on aina sama.

Rajapinta (interface)

Aliohjelmat. 1 Kutsusekvenssit. Antti-Juhani Kaijanaho 5. helmikuuta 2007

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Numeriikan kirjastoja

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Jatkeet. TIES341 Funktio ohjelmointi 2 Kevät 2006

Aktivaatiotietue. Yleiskäsite funktio (aliohjelma) -mekanismin tarvitsemille tiedoille. Kehysosoitin (%fp) missä tiedot ovat

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Algoritmit 1. Luento 3 Ti Timo Männikkö

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

ITKP102 Ohjelmointi 1 (6 op)

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Esimerkki: Laskin (alkua) TIEA341 Funktio ohjelmointi 1 Syksy 2005

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Tietotyypit ja operaattorit

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Muotoinosa tulkitaan vasta suoritushtkellä.

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

Ohjelmoinnin peruskurssi Y1

Tietueet. Tietueiden määrittely

Harjoitus 4 -- Ratkaisut

STR - Täyspuristeritilä (A)

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

y x1 σ t 1 = c y x 1 σ t 1 = y x 2 σ t 2 y x 2 x 1 y = σ(t 2 t 1 ) x 2 x 1 y t 2 t 1

Ohjelmoinnin peruskurssien laaja oppimäärä

A TIETORAKENTEET JA ALGORITMIT

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Sisältö. 2. Taulukot. Yleistä. Yleistä

Transkriptio:

Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Aliohjelmaa kutsutaan call-lauseella. subroutine store(x, n) real x(:) integer n integer i do i=1,n write(6,*) i,x(i) return... call store (table,n)

Proseduurin paikalliset muuttujat - vain aliohjelman käytössä; kutsuva ohjelma ja muut aliohjelmat eivät pääse käsiksi - dynaaminen varaus: tila varataan pinosta joka kutsukerralla erikseen (nykyisin oletus useimmissa ympäristöissä); aliohjelmasta poistuttaessa muuttuja tuhoutuu. - staattinen varaus: tila varataan vain kerran kiinteältä muistialueelta; kun aliohjelmaa kutsutaan uudestaan, staattisesti varatulla muuttujalla on yhä vanha arvo. real, save :: x - taulukkoja ja isoja tietorakenteita ei yleensä talleteta pinoon; pinossa vain osoitin tietorakenteeseen - jos usein kutsuttavassa aliohjelmassa suuria dynaamisesti varattavia taulukoita, toiminta hidastuu Globaalit muuttujat - paikallisten muuttujien lisäksi aliohjelma näkee aliohjelmille yhteisiä muuttujia - Pascal, C: globaalit muuttujat määräytyvät ohjelman kirjoitusasun perusteella - Fortran 77: globaalit muuttujat sijoitettava common-alueelle, joka määriteltävä kaikissa sitä käyttävissä aliohjelmissa - Fortran 90: molemmat em. vaihtoehdot

program esimerkki real x, y, z, u x=0.1 y=1.0 u=f(x) write (*, (4F10.4) ) x,y,z,u contains real function f(x) real x, y y=x**2 z=sin(x) f=z * y function program esimerkki Tulostus: 0.1000 1.0000 0.0998 0.0010 Pääohjelman muuttujat x, y, z, u ovat globaaleja. Funktion y on paikallinen, joten sen muuttaminen ei vaikuta kutsuvan ohjelman muuttujaan y. Funktion sisällä ei ole määritelty muuttujaa z, joten se viittaa globaaliin muuttujaan z. Tämä on funktion sivuvaikutus, eikä välttämättä toivottu.

Proseduurien parametrit (argumentit) - Välittävät tietoa aliohjelman ja kutsuvan ohjelman välillä - Arvoparametri: kutsuva ohjelma laskee parametrin arvon, jonka aliohjelma sijoittaa omaan paikalliseen muuttujaan - todellinen parametri voi olla muuttuja, vakio tai lauseke - aliohjelma voi käyttää parametria tavallisen paikallisen muuttuja tavoin - vaikka aliohjelma muuttaisi parametria, muutos ei vaikuta kutsuvan ohjelman muuttujiin - ei voi välittää tietoa aliohjelmasta kutsuvaan ohjelmaan - C:ssä kaikki parametrit arvoparametreja - Viiteparametri: välitetään todellisen parametrin osoite - parametrin muuttaminen muuttaa myös kutsuvan ohjelman muuttujaa vaarallinen! - Fortranissa kaikki parametrit viiteparametreja - Fortran 90: voidaan määritellä, mihin suuntaan parametrilla välitetään tietoa

x=1 call sub(x) write(6,*) x! 2 call sub(1)!?? call sub(x+y)!?? subroutine sub(x) real x x=x+1 subroutine sub (x) real, intent(in) :: x x=x+1! kielletty! Intent-attribuutti: in: aliohjelma ei saa muuttaa parametrin arvoa; todellinen argumentti voi olla muuttuja, vakio tai lauseke. out: todellinen argumentti saa olla vain muuttuja; aliohjelman on annettava sille arvo, mutta muuttujaa ei saa käyttää esim. sijoituslauseen oikealla puolella. inout: ei käyttörajoituksi, mutta todellisen argumentin oltava muuttuja. Intent-attribuutti puuttuu: ei mitään rajoituksia.

Positionaalinen parametri: paikka määrää, mitä muodollista parametria todellinen parametri vastaa. Avainsanaparametri (keyword): järjestys vapaa, parametri tunnistetaan nimen perusteella. subroutine huu(x,y,z) real x, y, z... real a, b, c call huu(a, b, c) call huu(a, z=b, y=1.0) call huu(z=b, x=a, y=c) call huu(x=a, b, c)! kielletty Valinnainen parametri voi puuttua: subroutine haa(x,y,z) real x real, optional :: y,z real zz=42.0.. if (present(z)) zz=z Sopii tilanteeseen, jossa muuttujalla yleensä järkevä oletusarvo. call haa(a) call haa(a,0.1) call haa(a,b,c) call haa(a,z=1.5) call haa(x=a,z=1.5,y=1.0)

Funktiot Funktio palauttaa laskemansa arvon. Funktiolla voi olla myös sivuvaikutuksia; niitä tulisi välttää. Funktiolle on aina määriteltävä tyyppi. real function sinc(x) real, intent(in) :: x if (abs(x) < epsilon) sinc=1.0 else sinc = sin(x)/x if Funktion arvo voi olla mikä tahansa muuttujatyyppi real x(3),y(3) x(:) = (/ 1, 2, 3 /) y=inv(x,3)... function inv(x,n) real, dimension(:), intent(in) :: x real, dimension(size(x)) :: inv integer n inv=x(n:1:-1)

Funktio voi olla rekursiivinen: recursive function fibonacci(n) integer fibonacci, n if (n<=2) fibonacci=1 else fibonacci=fibonacci(n)+fibonacci(n-1) if Melko vähän käyttöä numeerisissa tehtävissä. Sopii esimerkiksi puiden käsittelyyn: program tree integer, parameter :: n=5 integer left(n), right(n), data(n) left(:) = (/ 2, 4, 5, 0, 0 /) right(:) = (/ 3, 0, 0, 0, 0 /) data(:) = (/ 10, 20, 30, 40, 50 /) writetree (1) contains recursive subroutine writetree(n) integer n if (left(n) > 0) writetree(left(n)) write (6,*) data(n) if (right(n) > 0) writetree(right(n)) program

Yksinkertainen lajittelu: real x(n) do i=1,n-1 do j=i+1,n if (x(j) < x(i)) then t=x(i) ; x(i)=x(j) ; x(j)=t if do fo Ajankäyttö verrannollinen n 2. Ei kannata, kun on parempiakin menetelmiä. Quicksort (rekursiivinen) yleensä nopea, mutta huono jo valmiiksi järjestyksessä olevalle aineistolle. Kekolajittelu (heapsort) takaa, että aika korkeintaan nlog n.