Juha Haataja, Jussi Rahola ja Juha Ruokolainen

Koko: px
Aloita esitys sivulta:

Download "Juha Haataja, Jussi Rahola ja Juha Ruokolainen"

Transkriptio

1 For t r an 95/2003 Juha Haataja, Jussi Rahola ja Juha Ruokolainen FORTRAN95_2003.indd :48:23

2

3 Fortran 95/2003 Juha Haataja Jussi Rahola Juha Ruokolainen Tieteen tietotekniikan keskus CSC

4 Tämän teoksen tekijänoikeudet kuuluvat CSC Tieteellinen laskenta Oy:lle. Teoksen tai osia siitä voi kopioida ja tulostaa vapaasti henkilökohtaiseen käyttöön sekä Suomen yliopistojen ja korkeakoulujen kurssikäyttöön edellyttäen, että kopioon tai tulosteeseen liitetään tämä ilmoitus teoksen tekijästä ja tekijänoikeuksista. Teosta ei saa myydä tai sisällyttää osaksi muita teoksia ilman CSC:n lupaa. c Juha Haataja, Jussi Rahola, Juha Ruokolainen ja CSC Tieteellinen laskenta Oy 2007 Neljäs uudistettu painos ISBN (nid.) ISBN (pdf)

5 Fortran 95/ Esipuhe Fortran on tärkein ja käytetyin ohjelmointikieli numeerisessa laskennassa. Fortran 2003 on kielen uusin standardi. Koska uuden standardin kaikkia piirteitä ymmärtäviä kääntäjiä ei vielä ole markkinoilla, keskitymme uuden standardin siihen osajoukkoon, joka sisältyy Fortran 95 -standardiin. Fortran 95 ja sitä edeltänyt Fortran 90 -standardi kuvaavat aikaisempia Fortranin versioita monipuolisemman ohjelmointikielen, joka sisältää modernit ohjaus- ja tietorakenteet. Koska Fortran koki monilta osin perusteellisen muodonmuutoksen, on varsin aiheellista esitellä Fortran 95 kokonaan uutena ohjelmointikielenä. Tässä teoksessa on käsitelty erillisessä luvussa siirtymistä FORTRAN 77:stä uuteen standardiin. kaikkia ominaisuuksia, vaan pääpaino on tärkeimmiksi katsomillamme piirteillä. Vanha Fortran-kielen standardi (FORTRAN 77) muodostaa Fortran 95:n osajoukon, joten kieli on yhteensopiva vanhojenkin koodien kanssa. Lukijalta ei edellytetä Fortran-kielen aiempaa tuntemusta, vaikkakin ohjelmoinnin peruskäsitteet on syytä tuntea. Fortran-kääntäjän käyttöesimerkit on esitetty Unix-ympäristössä, mutta Unixiin liittyvät yksityiskohdat on pyritty minimoimaan. Tämän teoksen ensimmäinen painos ilmestyi vuonna 1996 ja kertoi aiemmasta Fortran 90 -standardista. Tässä kirjassa kerrotaan pääosin Fortran 95 -standardista eli uuden Fortran standardin osajoukosta. Erillisessä luvussa on tiivis kuvaus Fortran 2003:n uusista piirteistä. Lisäksi esittelemme lyhyesti rinnakkaisohjelmointia High Performance Fortran -kielellä (HPF) ja OpenMP:llä. Teoksen syntyyn ovat vaikuttaneet kokemuksemme tieteellisen ja teknisen laskennan asiantuntijatehtävissä. Olemme valinneet käyttämämme näkökulman ja esitystavan tieteen tietotekniikan keskuksen CSC:n asiakasprojekteista kertyneiden kokemusten perusteella. Oma vaikutuksensa teokseen on ollut aiemmin tuottamistamme kursseista ja julkaisuista saadulla palautteella. Suurimman osan tekstistä on kirjoittanut Juha Haataja, joka myös toimitti kirjan painokuntoon. Kiitämme kaikkia kirjan sisältöön vaikuttaneita työtovereitamme. Janne Kontkanen antoi hyviä kommentteja oppikirjan ensimmäisestä raakaversiosta. Yrjö Leino, Esko Järvinen, Jari Järvinen ja Peter Råback oikolukivat teosta, mistä heille kiitokset. Lisäksi Jukka Korpela, Raija Kukkonen ja Markku Lindroos TKK:n atk-keskuksesta antoivat palautetta oppikirjan sisällöstä

6 6 Fortran 95/2003 ja esitystavasta. Erityisesti Jukka Korpelan kommentit ja parannusehdotukset auttoivat selkeyttämään teoksen sisältöä. HPF:ää käsittelevä luku perustuu Jussi Heikosen ja Janne Kontkasen kirjoittamaan artikkeliin. OpenMP:n esittely perustuu Jussi Heikosen kirjoittamaan artikkeliin. Kari Vasko osallistui Fortran 2003:ää esittelevän tekstin aiemman version kirjoittamiseen. Olemme ottaneet myös huomioon CSC:n järjestämiltä Fortran-kursseilta tulleen palautteen. Toista painosta oikolukivat Tiina Kupila-Rantala, Yrjö Leino ja Ville Savolainen. Kolmanteen painokseen lisättiin ja laajennettiin muutamia harjoitustehtäviä, ja samalla eräitä kirjan esimerkkejä muokattiin numeerisesti stabiilimmiksi. Neljännessä painoksessa keskitytään Fortran 95:een ja hahmotellaan uuden Fortran 2003:n sisältöä. Samalla joitakin virheitä on korjattu ja tekstiä stilisoitu. Erityiset kiitoksemme ansaitsee Robert Piché, jonka järjestämä Fortran-kurssi TTKK:ssa tuotti runsaasti palautetta ja korjausehdotuksia. Lisäksi Janne Ignatius, Jussi Rahola ja Satu Tissari antoivat arvokasta palautetta teoksen kolmatta painosta valmisteltaessa. Otamme mielellämme vastaan kaikki tähän kirjaan liittyvät kommentit. Ne voi osoittaa Juha Haatajalle sähköpostiosoitteeseen Toivotamme teoksen lukijoille löytämisen iloa sekä antoisia hetkiä Fortranin parissa. Espoossa Tekijät

7 Sisältö 7 Sisältö Esipuhe 5 1 Teoksen sisältö ja merkinnät Oppikirjan sisällöstä Käytetyt merkinnät ja esimerkkiohjelma Lisätietoja Ohjelmoinnin peruskäsitteet Mihin tarvitaan ohjelmointia Tietokoneet ja ohjelmointi Mitä tarkoitetaan tietokoneella Ohjelmoinnin eri vaiheet Ohjelman kääntäminen ja linkitys Yhteenveto Johdatus ohjelmointiin Fortran 95:llä Fortran-kielen merkitys Fortran 95:n tärkeimmät uudet piirteet Miksi Fortran-kieltä kannattaa käyttää Fortran-ohjelman perusrakenne Tunnusten nimeäminen Vakiot ja peruslaskutoimitukset Muuttujat Muuttujien tyypit Sijoituslauseet Omien funktioiden määrittely ja käyttö Toistorakenteet Taulukot ja rakenteiset tyypit Tulostuksen muotoilu Esimerkki: asuntolainan lyhennykset Ehtolauseet Esimerkki: simulointitehtävä Fortran-kielen moduulit Lisätietoja Yhteenveto Ohjelman perusrakenne Lähdekoodin muoto Fortranin merkkivalikoima Muuttujien ja vakioiden nimet... 46

8 8 Fortran 95/ Ohjelmakoodin lauseiden järjestys INCLUDE-lause ja moduulit Yhteenveto Perustyypit Perustyypit ja vakiot Muuttujien määrittely Nimetyt vakiot ja alkukirjainsääntö Perustyyppien lajimääreet Esimerkki: sarjan summa Yhteenveto Lausekkeet ja sijoituslauseet Aritmeettiset lausekkeet Numeeriset standardifunktiot Merkkijonolausekkeet Merkkitiedon käsittelyfunktioita Merkkitieto ja taulukot Loogiset lausekkeet Esimerkkejä loogisista lausekkeista Merkkijonojen vertailu Esimerkki: merkkijonojen lajittelu Sijoituslauseet ja laskentajärjestys Funktioiden sivuvaikutukset Operaattorien sidontajärjestys Yhteenveto Ohjausrakenteet Mihin tarvitsemme ohjausrakenteita Ehdollinen suoritus: IF-rakenne Tapausten käsittely: SELECT CASE -rakenne Toisto: DO-rakenne Esimerkki: Euklideen algoritmi Poikkeusten käsittely Hyppylause: GOTO-lause Tiedonsiirron erikoistilanteet Yhteenveto Funktiot ja aliohjelmat Tehtävän jakaminen osiin Proseduurit, funktiot ja aliohjelmat Mihin proseduureja käytetään Funktioiden määrittely ja käyttö Funktion otsikkolauseen muodot Funktion sivuvaikutukset Aliohjelmien määrittely ja käyttö Todellisten ja muodollisten argumenttien vastaavuus Tiedon välittäminen proseduureihin Paikallisten muuttujien säilyminen Sisäiset ja ulkoiset proseduurit Rekursio

9 Sisältö Proseduurit argumentteina PURE-määre ELEMENTAL-määre Kutsumuodon määrittely Esimerkki: NAG-aliohjelmakirjaston käyttö Valinnaiset ja avainsana-argumentit Esimerkki: keskiarvon laskeminen Milloin tarvitsemme kutsumuodon määrittelyä Näkyvyysalueet Yhteenveto Moduulit ja operaattorit Modulaarinen ohjelmointi Ohjelmayksikköjen väliset suhteet Esimerkki: vakioiden määrittely Esimerkki: pituusyksikköjen muunnokset Moduulin käyttäminen toisista moduuleista Julkisuus ja yksityisyys USE-lauseen eri käyttötavat Esimerkki: muunnosohjelma Esimerkki: nollakohdan haku Moduulissa määritellyt globaalit muuttujat Esimerkki: normaalijakautuneet satunnaisluvut Geneeriset proseduurit Operaattoreiden määrittely Yhteenveto operaattoreiden määrittelystä Funktioiden ja operaattorien käyttötavat Muita moduulien käyttömahdollisuuksia Yhteenveto Rakenteiset tietotyypit Rakenteisten tyyppien määrittely Esimerkki: vektorilaskentamoduuli NULL-funktio Julkisuus ja yksityisyys Esimerkki: vektorimoduulin jatkokehittely Yhteenveto Taulukot ja osoitinmuuttujat Taulukoiden määrittely ja käyttö Taulukon alkioiden käsittely Taulukkoalustin Taulukon alkioiden järjestys Esimerkki: funktion arvojen talletus taulukkoon Taulukoiden välitys aliohjelmiin Taulukkoarvoiset funktiot Taulukkojen käsittely kokonaisuuksina Taulukkojen käsittely standardifunktioilla FORALL-rakenne Dynaaminen muistinvaraus Esimerkki: Erastotheneen seula Osoitinmuuttujat

10 10 Fortran 95/ Esimerkki: listarakenne Yhteenveto Tiedon syöttö ja tulostus Syöttö ja tulostus Yksinkertaiset syöttö- ja tulostuslauseet Listan ohjaama muotoilu Syöttö- ja tulostuslauseet Muotoilukoodit Muotoilukoodien yhdistäminen ja tulostuslistat Tietueen osan tulostaminen tai lukeminen Tiedostojen käsittely Luku merkkijonoista ja kirjoitus merkkijonoihin NAMELIST-rakenne Virhetilanteiden käsittely Yhteenveto Standardiproseduurit Standardiproseduurien peruskäsitteitä Standardiproseduurien kuvauksia Esimerkki: kellonaika ja päivämäärä Esimerkki: satunnaisluvut ja kellonaika Esimerkki: bittienkäsittelyoperaatiot Esimerkki: data pakkaaminen Standardifunktioiden erityisnimet Lisätietoja Yhteenveto Esimerkkiohjelmia Nelilaskin Datan lajittelu Sokkelon tekeminen Yksiulotteinen soluautomaatti Life-soluautomaatti Binääripuu Sukupuu Optimointitehtävien ratkaiseminen: evoluutiostrategiat Lineaaristen yhtälöryhmien ratkaisu Siirtyminen Fortran 95 -kieleen Miten Fortran 95:een kannattaa siirtyä Fortran 95:n uudet piirteet FORTRAN 77:n huonoja puolia FORTRAN 77 -koodien muuntaminen uuteen muotoon Ohjausrakenteiden käyttö COMMON-alueiden korvaus moduuleilla Fortranin vanhentuvat piirteet Vältettäviä Fortranin piirteitä Fortran Fortran 2003:n tärkeimmät lisäykset ja parannukset Fortran 2003 ja olio-ohjelmointi

11 Sisältö Fortran 2003:n tuki olio-ohjelmoinnille Lisätietoa Rinnakkaislaskenta HPF:llä ja OpenMP:llä Välineitä rinnakkaislaskentaan HPF-ohjelmoinnin perusteet OpenMP: rinnakkaislaskenta yhteisen muistin koneissa Liite 309 A Ohjelmoinnin kultaiset säännöt 310 A.1 Yleisohjeita A.2 Ohjausrakenteet A.3 Määrittele A.4 Strukturoi A.5 Standardoi A.6 Dokumentointi A.7 Luettavuus A.8 Vianetsintä ja koodin testaus A.9 Ohjelmakoodin optimointi A.10 Syöttö ja tulostus A.11 Yhteenveto B Fortran 95:n hyvät, pahat ja rumat piirteet 315 B.1 Hyvät piirteet B.2 Toisinaan hyödylliset piirteet B.3 Mahdollisesti vaaralliset piirteet C Yhteenveto Fortran 95 -kielen lauseista 317 D ASCII-merkistö 324 E Sanasto 325 Kirjallisuutta 329 Hakemisto 331

12 12 Fortran 95/ Teoksen sisältö ja merkinnät Kerromme tässä luvussa oppikirjan tarkoituksesta ja annamme neuvoja lukijalle. Kappaleesta 1.2 löydät kirjassa käytetyt merkintätavat. 1.1 Oppikirjan sisällöstä Tämä oppikirja on tiivis johdatus ohjelmointiin Fortran-kielellä. Teos on tarkoitettu opiskelijoille sekä yliopistojen ja yritysten tutkijoille. Kirjaa voi käyttää oppikirjana Fortran-kursseilla ja itseopiskeluun. Luotamme esimerkin voimaan. Siksi asiat on pyritty havainnollistamaan esimerkeillä. Kunkin luvun loppuun on sijoitettu muutamia tehtäviä tai kysymyksiä luvun aihepiiristä. Teoksessa on tehtäviä erityisesti tieteellisen ja teknisen laskennan alalta. Tämä kirja on tarkoitettu luettavaksi läpi järjestyksessä alusta loppuun. Koska Fortran-kielen monet piirteet liittyvät useampaan kuin yhteen aihepiiriin, käydään oppikirjan alussa nopeasti läpi kielen tärkeimmät piirteet. Toisaalta kukin luku on suunniteltu yhtenäiseksi kokonaisuudeksi, joten teosta voi käyttää myös käsikirjan tapaan. Korostamme ohjelmoinnin käytännön seikkoja, kuten koodin luettavuutta, selkeyttä ja ylläpidettävyyttä. Pyrimme esittämään kokonaisia ohjelmaesimerkkejä pienten ohjelmakoodin katkelmien sijaan. Tämän ansiosta voit helposti kokeilla esimerkkien toimintaa käytännössä. Esimerkkiohjelmat on tarkoitettu luettavaksi yhdessä niihin liittyvän tekstin kanssa. Tästä johtuen esimerkeissä on vähemmän selittäviä kommentteja kuin itsenäisissä ohjelmakoodeissa tulisi olla. Luvussa 15 käydään läpi Fortran-kielen vanhempia piirteitä. Luvussa kerrotaan, miten nämä usein virheitä aiheuttavat kielen piirteetvoi korvata uuden Fortran-standardin paremmilla ominaisuuksilla.

13 1. Teoksen sisältö ja merkinnät Käytetyt merkinnät ja esimerkkiohjelma Fortran-kielen omat tunnukset on tässä teoksessa kirjoitettu isoilla kirjaimilla. Käyttäjän määrittelemien muuttujien ym. symbolien nimet on kirjoitettu pienillä kirjaimilla. Suosittelemme tätä käytäntöä muutoinkin sovellettavaksi, vaikka se ei ole osa Fortranin määritelmää. Seuraavassa on esimerkki Fortran-ohjelmakoodista: PROGRAM testaus REAL :: x INTRINSIC SIN WRITE (*,*) Anna x: READ (*,*) x WRITE (*,*) x =, x, SIN(x) =, SIN(x) END PROGRAM testaus Tämä ohjelma lukee luvun x arvon ja tulostaa sinifunktion arvon SIN(x). Fortran-ohjelmien yksityiskohtiin palataan seuraavissa luvuissa. Tässä teoksessa käytetään kirjasintyyppiä teletype, kun esitetään ohjelmakoodia tai tietokoneen tuottamaa tulostusta. Kuitenkin jos halutaan selvästi erottaa, mikä teksti on kehotetta, mikä käyttäjän syötettä ja mikä tietokoneen tulostusta, on käytetty seuraavanlaisia kirjasintyyppejä: % f90 testaus.f90 %./a.out Anna x: 5 x = SIN(x) = Tässä tietokoneen kehote (prompt, merkki % yllä) ja tulostus on ladottu teletype-kirjasintyypillä, ja käyttäjän antamat komennot ja syötteet on lihavoitu. Tässä esimerkissä käänsimme ohjelmakoodin testaus.f90 komennolla f90 ja ajoimme syntyneen ajokelpoisen ohjelman a.out. Ohjelmalle annettiin syötteenä luku 5. Teoksessa käytetään käännöskomentoa f90, joka useissa järjestelmissä on identtinen komennon f95 kanssa. Fortran-ohjelmien tiedostopääte voi olla esimerkiksi.f90,.f95,.f03 tai.f riippuen kääntäjästä. Sellaiset nimet, joiden paikalle tulee kirjoittaa esimerkiksi tiedoston nimi, on ladottu vinokirjaimilla: f90 tiedosto.f90 Jos jokin määrittelyn osa voidaan jättää pois, käytämme hakasulkumerkintää ([]) seuraavaan tapaan: funktio([argumentti][, argumentti]...) Kolme pistettä (...) tarkoittaa tässä nolla, yksi tai useampi kertaa toistettavaa osaa. Seuraavat ovat esimerkkejä edellisen merkinnän kuvaamista funktiokutsuista: h()

14 14 Fortran 95/2003 h(a) h(a,b) h(a,b,c) Tekstissä esiintyvät lyhenteet ja erisnimet on yleensä kirjoitettu kuten Fortran. Uusien termien esittelyyn ja muutenkin tekstin korostamiseen on käytetty kursiivia. Tämän oppikirjan Fortran 90 -kielisten esimerkkiohjelmien kääntämiseen ja testaamiseen on käytetty NAGWare TM f90 -kääntäjää, joka on aito Fortran 90 -kääntäjä eikä sisällä standardin ulkopuolisia laajennuksia. Ohjelmat on testattu myös Macintoshissa käyttäen Absoftin Fortran 90 -kääntäjää. Fortran 95 -piirteitä sisältävät ohjelmat on testattu Digital Fortran 95 -kääntäjällä. Oppaan neljännessä painoksessa on käytetty kääntäjänä Sun Studio 9 Fortran 95 -kääntäjän versiota 8.0, joka ei tue Fortran 2003:n uusia piirteitä. 1.3 Lisätietoja Tämän teoksen aihepiiristä löydät lisätietoja World Wide Web -järjestelmästä eli www:stä osoitteesta Tarjolla on mm. oppikirjan esimerkkiohjelmien lähdekoodeja, harjoitustehtävien ratkaisuja, mahdollisten painovirheiden korjauksia sekä tietoa CSC:n tarjoamista palveluista. Annamme myös viitteitä muihin Fortrania ja ohjelmointia käsitteleviin www-palveluihin. CSC:n www-kotisivu on osoitteessa Hyödyllisiä Fortran-kielen käsikirjoja ovat teokset Fortran 95/2003 Explained [MRC04], Fortran 95 Language Guide [Geh96] jafortran 95 Handbook [ABM + 97]. Johdatukseksi kieleen sekä oppikirjaksi sopivat teokset Introductionto Programmingwith Fortran [CS06]jaFortran 90 Programming [EPL94]. Teos Programmer s Guide to Fortran 90 [BGA94] onhyvinlaajajamonipuolinen johdatus Fortran-ohjelmointiin. Teos Migrating to Fortran 90 [Ker93] sopii ohjenuoraksi vanhojen Fortran-koodien muuntamiseen uuden standardin mukaisiksi. Fortran 90:een perustuvaa F-kieltä käsitellään teoksessa The F Programming Language [MR96]. Artikkelissa The New Features of Fortran 2003 [Rei] kuvataan tiiviissä muodossa Fortran 2003:n uudet piirteet. Fortran-standardeihin liittyviä dokumentteja löydät www-osoitteesta Tietokoneohjelmissa käytettyjä algoritmeja on esitelty mm. teoksissa Introduction to Algorithms [CLR90] jaalgorithms [Sed84]. CSC on tämän Fortran 95/2003 -oppikirjan lisäksi julkaissut mm. matemaattista mallintamista ja numeerisia menetelmiä käsitteleviä teoksia:

15 1. Teoksen sisältö ja merkinnät 15 Alkuräjähdyksestä kännykkään: näkökulmia laskennalliseen tieteeseen [Haa02] Laskennallinen tuotekehitys: suunnittelun uusi ulottuvuus [HJKR02] Sillanrakennuksesta lääkeainesuunnitteluun: Matemaattinen mallintaminen suomalaisissa yliopistoissa [HJL00] Numeeriset menetelmät käytännössä [HHL + 02] Optimointitehtävien ratkaiseminen [Haa04] Datan käsittely [Kar01].

16 16 Fortran 95/ Ohjelmoinnin peruskäsitteet Kerromme tässä luvussa tietokoneen toiminnasta ja ohjelmointikielten käytöstä tietokoneen ohjaamiseen. 2.1 Mihin tarvitaan ohjelmointia Ohjelmointitaito on eräs tärkeimmistä teknis-tieteellisillä aloilla tarvittavista osaamisen alueista. Ohjelmointi ei tietenkään ole päämäärä sinänsä, vaan väline, jonka avulla voidaan ratkoa käytännössä esiin tulevia tehtäviä. Ohjelmistoja tarvitaan lentokoneiden ja autojen suunnitteluun, prosessien ohjaamiseen, datan keräämiseen instrumenteista ja ihmisen geeniperimän selvittämiseen (katso CSC:n julkaisemia teoksia [Haa02, HJKR02, HJL00]). Jopa matematiikan teoreemojen todistamisessa käytetään apuna tietokoneohjelmia. Autojen, kameroiden ja pyykinpesukoneiden ohjelmistot tekevät näistä laitteista monipuolisempia ja älykkäämpiä vaikkakin parantamisen varaa vielä on! Kaikkea ei kuitenkaan ole valmiiksi ohjelmoitu. Varsinkin eturivin tutkimusja tuotekehitystehtävissä tarvitaan ohjelmointia ja olemassaolevien koodien muokkausta. Kaikkea ei tietenkään tarvitse keksiä uudestaan, sillä on hyvää ohjelmointityyliä käyttää apuna valmiiksi testattuja ja luotettavia ohjelmistoja. Olemassaolevien ohjelmistojen muokkaaminen tehtävän ratkaisemiseksi onkin tyypillistä ohjelmoijan työkenttää. Silloin tällöin kuulee väitteen: Jos osaan oman sovellusalueeni tarpeeksi hyvin, ei minun tarvitse osata ohjelmoida. Kun tehdään jotain uutta ja ennen ratkaisematonta, ohjelmointia tarvitaan kuitenkin monilla aloilla muodossa tai toisessa. Lisäksi erillisen ohjelmoijan palkkaaminen sovellusalueen osaajan lisäksi on melko kallista.

17 2. Ohjelmoinnin peruskäsitteet Tietokoneet ja ohjelmointi Vaikka tietokoneiden perusrakenne ei ole muuttunut paljonkaan viimeisten 40 vuoden aikana, on tietokoneiden käyttöalue laajentunut nopeasti. Tämä voidaan lukea sekä koneiden halpenemisen että ohjelmointikielten kehittymisen ansioksi, sillä ohjelmointia tarvitaan tietokoneiden kaikkien toimintojen ohjaamiseen. Tietokoneen ymmärtämä kieli koostuu joukosta konekäskyjä, joita suorittamalla tietokone saadaan tekemään haluttuja asioita. Tietokoneet pystyvät suorittamaan miljardeja konekäskyjä sekunnissa. Erityyppiset tietokoneet ymmärtävät kukin omaa konekieltään, joten konekielisen ohjelman siirto koneesta toiseen on hankalaa ellei peräti mahdotonta. Lisäksi ohjelmointi konekäskyjen avulla on aikaavievää ja virhealtista puuhaa. Tietokoneen ohjaaminen hoidetaan konekielen sijaan yleensä ohjelmointikielen avulla. Tämä mahdollistaa konekieltä paremman ohjelmistojen siirrettävyyden. Ohjelmointikielen kääntäjä (compiler) hoitaa automaattisesti konekäskyjen tuottamisen ohjelmakoodista. Täten ohjelmointikielen käyttö helpottaa huomattavasti tehtävien ratkaisua tietokoneella. Tämä ei tarkoita tietenkään sitä, etteikö ohjelmoinnissa silti tarvittaisi suurta huolellisuutta ja tarkkuutta: kääntäjä osaa lukea vain tarkasti ohjelmointikielen sääntöjä noudattavaa koodia eikä pysty arvaamaan ohjelmoijan alkuperäistä tarkoitusta, jos sitä ei ole ilmaistu yksikäsitteisesti. Eri ohjelmointikielet on suunniteltu erilaisiin tehtäviin. Ohjelmointikieliä on kehitetty tuhansia, mutta vain muutamat niistä ovat laajassa käytössä. 2.3 Mitä tarkoitetaan tietokoneella Kuvassa 2.1 on esitetty tietokoneen toiminta yksinkertaisena kaaviona. keskusmuisti näppäimistö keskusyksikkö kuvaruutu tiedostot Kuva 2.1: Tietokoneen toiminnan periaate. Tietokoneen keskusyksikkö toimii ohjelmakoodin sisältämien käskyjen mukaisesti. Ohjelma lukee tavallisesti joukon syöttötietoja, jotka vaihtelevat ohjelman ajokerrasta toiseen. Ohjelma lukee syöttötiedot sisään esimerkiksi

18 18 Fortran 95/2003 tiedostoista tai käyttäjän näppäimistöltä. Syöttötietoja voisivat olla esimerkiksi säähavaintopisteistä kerätyt mittausarvot kuten lämpötila, ilmanpaine ja kosteus. Sääennusteen laskemiseen kehitetty ohjelma voisi näiden syöttötietojen perusteella laskea ja tulostaa ennusteen seuraavien 48 tunnin ajaksi. Tietokoneen keskusyksikkö käsittelee keskusmuistissa sijaitsevaa dataa. Esimerkiksi sääennusteen laskennan eri vaiheissa tarvittava data voidaan pitää tietokoneen keskusmuistissa. Keskusyksikkö voi myös kirjoittaa ja lukea tiedostoja, jotka mahdollistavat tiedon säilyttämisen ohjelman suorittamisen loppuessa: kun ohjelman suoritus päättyy, käytetään vapautunut keskusmuisti seuraavien ohjelmien ajamiseen. Tätä ennen tulee laskentatulokset tallettaa tiedostoihin, sillä pysyvien tiedostojen sisältö säilyy ohjelman suorittamisen loputtuakin. Tiedostojen käsittely on yleensä hitaampaa kuin keskusmuistin käyttö. Keskusyksikkö voi tiedostoihin tallettamisen lisäksi tulostaa tietoa käyttäjän laitteen (päätteen, mikron tai työaseman) kuvaruudulle. Tekstimuotoisen tulostuksen lisäksi tietokoneeseen voi olla kytkettynä graafisten kuvaajien piirtämiseen kykeneviä laitteita. 2.4 Ohjelmoinnin eri vaiheet Kun kehität ohjelmistoa annettuun tehtävään, pidä mielessä seuraavat ohjelmoinnin vaiheet: 1. tehtävän tavoitteen määrittely 2. tehtävän analyysi ja ohjelmakoodin suunnittelu 3. ohjelmakoodin kirjoittaminen 4. testaaminen ja virheiden korjaaminen 5. dokumentointi 6. ohjelmiston käyttö ja ylläpitäminen. Tehtävän määrittelyssä selvitetään tarkkaan, mitä ohjelman tulisi tehdä. Määrittely kannattaa tehdä huolellisesti, jottei koodia kirjoitettaessa tai testattaessa tarvitsisi huomata, ettei ohjelmisto ratkaise annettua tehtävää. Ohjelmoinnin tärkein vaihe on tehtävän analyysi ja ohjelmakoodin suunnittelu. Ennen ohjelmakoodin kirjoittamista täytyy selvittää mm. ohjelmassa käytetyt tietorakenteet ja algoritmit. Tähän vaiheeseen kannattaa käyttää runsaasti aikaa pienessäkin tehtävässä. Suunnitteluun käytetty aika saadaan yleensä runsain mitoin takaisin ohjelmakoodin kirjoittamisessa ja testaamisessa. Tehokas ja luotettava ratkaisumenetelmä myös vähentää ohjelman korjailemiseen tarvittavaa aikaa.

19 2. Ohjelmoinnin peruskäsitteet 19 Kirjoita ohjelmakoodi pieninä osasina, joista kukin tekee oman tehtävänsä hyvin. Käytä Fortran 95:n kehittyneitä piirteitä ohjelmakoodin modulaarisuuden lisäämiseksi. Minimoi riippuvuudet ohjelmiston eri osasten välillä ja dokumentoi koodisi huolellisesti. Kun kukin ohjelman osa on saatu koodattua, testaa sitä ensin erikseen. Kiinnitä testaukseen huomiota jo varhaisessa vaiheessa. Käytetyt testiaineistot ja testiohjelmistot on syytä säilyttää ohjelmiston myöhempää testausta varten. Hyvästä testiaineistosta on apua esimerkiksi siirrettäessä ohjelmisto uudelle koneelle tai tehtäessä ohjelmistoon muutoksia myöhemmin. Aloita ohjelmakoodin dokumentointi jo tehtävän määrittelyvaiheessa. Pidä myös huolta ohjelmakoodin luettavuudesta. Käytä sisennystä ja tyhjiä rivejä apuna koodin selkeyttämisessä. Älä kommentoi suoraan ohjelman lauseiden toimintaa, vaan kerro, mitä ohjelmiston eri osissa tapahtuu. Muista ohjelmoinnin kaikissa vaiheissa, että ohjelmiston ylläpitoon voi kulua vuosien aikana paljon enemmän aikaa kuin ohjelmiston kehittämiseen alunperin. Pienilläkin ohjelmakoodin pätkillä on taipumus osoittautua yllättävän pitkäikäisiksi. Ehkäpä vuosien kuluttua työtoverisi tulee kysymään, mitä kehittämäsi ohjelmakoodi oikeastaan tekee. Siis: dokumentoi huolellisesti ja kirjoita selkeää koodia. Vältä kikkailua! 2.5 Ohjelman kääntäminen ja linkitys Tämän kohdan sisältö on oppaan muita osia riippuvaisempi käytettävissä olevasta Fortran-kääntäjästä ja koneen käyttöjärjestelmästä. Tässä esitellyt asiat pätevät kuitenkin useimmissa koneympäristöissä pienin muutoksin. Kuvassa 2.2 on esitetty ajettavan ohjelman tekemiseen tarvittavat vaiheet. Käytännössä Fortran-koodista saa ajokelpoisen ohjelman seuraavasti: 1. kirjoita suunnitelman mukainen ohjelmakoodi yhteen tai useampaan tiedostoon 2. käännä lähdekooditiedostot objektikooditiedostoiksi 3. linkitä objektikooditiedostot ja mahdolliset aliohjelmakirjastot suorituskelpoiseksi ohjelmaksi 4. aja syntynyt ohjelma ja tarkista tulokset. Yksinkertaisissa tapauksissa voi kääntämisen ja linkittämisen (vaiheet 2 ja 3) tehdä samalla komennolla. Selvitä käyttämäsi koneen käyttöoppaasta tai käsikirjasta, miten kääntäminen, linkittäminen ja ohjelman ajaminen käytännössä tapahtuu. Useimmissa Unix-ympäristöissä yhdessä tiedostossa olevan Fortran-ohjelmakoodin kääntäminen ja ajaminen onnistuu seuraavasti: % f90 tiedosto.f90 %./a.out

20 20 Fortran 95/2003 Tässä käännöskomento oli nimeltään f90. Jos käytettävissä on Fortran 95 -kääntäjä, on käännöskomento luultavasti nimeltään f95. Lähdekooditiedoston nimi päättyi merkkeihin.f90, mikä on tyypillinen käytäntö Unixissa. Syntynyt ajokelpoinen ohjelma a.out ajettiin komennolla./a.out. Ohjelman kääntäminen ja linkittäminen ajokelpoiseksi ohjelmaksi voidaan tehdä myös useassa vaiheessa: % f90 -c ali.f90 % f90 -c ohj.f90 % f90 -o ohj ali.o ohj.o -lnag %./ohj Tässä käänsimme (ilman linkitystä) ohjelmakoodin tiedostoissa ali.f90 ja ohj.f90. Syntyneet objektikooditiedostot ali.o ja ohj.o linkitettiin ajokelpoiseksi ohjelmaksi nimeltä ohj. Otimme ohjelmaan lisäksi linkitysvaiheessa mukaan ohjelman käyttämät NAG-aliohjelmakirjaston rutiinit [Haa98]. Käytä ohjelmakoodin kirjoittamiseen sellaista editoria, joka osaa automaattisesti sisentää koodirivit ja mahdollisesti myös tunnistaa Fortran 95 -kielen avainsanat. Emacs on esimerkki tällaisesta editorista. Kukin ohjelmayksikkö (pääohjelma, ulkoinen proseduuri tai moduuli) kannattaa yleensä kirjoittaa omaan tiedostoonsa. Tällöin voit kääntää kunkin ohjelmayksikön erikseen, ja tehdessäsi muutoksia ei aina ole välttämätöntä kääntää koko ohjelmistoa uudestaan. Riittää, että käännät uudestaan muuttuneet ohjelmayksiköt (ja niitä käyttävät ohjelmayksiköt), jonka jälkeen tarvitsee vain linkittää ohjelmisto ajokelpoiseksi. lähdekoodi INCLUDE-tiedostot moduulit Fortran-kääntäjät tuottavat yleensä tarvittaessa käännöslistauksen, jostavoi olla hyötyä jäljitettäessä ohjelmakoodiin pujahtaneita virheitä. Käytä käänkääntäjä tarvittaessa käännöslistaus objektikoodi aliohjelmakirjastot linkittäjä tarvittaessa linkitystaulu ajettava ohjelma Kuva 2.2: Ohjelman kääntämisen ja linkittämisen vaiheet. Moduuleja esitellään luvussa 9 ja INCLUDE-lausetta kappaleessa 4.5.

21 2. Ohjelmoinnin peruskäsitteet 21 nöksessä lisäksi tarkkaa Fortran 95:n mukaista syntaksitarkistusta, sillä kääntäjäkohtaiset kielen laajennukset vähentävät koodin siirrettävyyttä. Syntaksitarkistus kytketään päälle kääntäjän valitsimilla. Fortran-kääntäjät optimoivat ohjelmakoodia pyydettäessä. Tällöin pyritään nopeuttamaan koodin suoritusta. Koodin optimointi kannattaa ottaa käyttöön varsinaisissa tuotantoajoissa. Varmista sitä ennen, ettei optimointi muuta ohjelman toimintaa ja tuota virheellisiä tuloksia. Käännösaikana voi valita, halutaanko ohjelmaan mukaan ajonaikaiset taulukkorajojen tarkistukset. Yleensä näistä on niin paljon hyötyä, että ne on syytä kytkeä päälle ainakin ohjelman kehittelyn aikana. Kun eri ohjelmayksiköt on käännetty objektikooditiedostoiksi, tarvitaan vielä linkitys, jotta koodia voidaan ajaa. Tässä yhteydessä ottaa linkittäjä ohjelmaan mukaan myös mahdollisesti käytettävät aliohjelmakirjastot. Esimerkiksi Fortranin standardifunktiot ja -aliohjelmat linkitetään tarpeen mukaan ohjelmaan. Fortran-kielisiä ohjelmia voi olla mahdollista linkittää muilla ohjelmointikielillä kirjoitettujen ohjelmien yhteyteen. Vastaavasti voi olla mahdollista kutsua Fortranista muilla ohjelmointikielillä kirjoitettuja rutiineita. Käytännön yksityiskohdat vaihtelevat laitteistosta toiseen. Koska ohjelmankehityksessä harvoin saadaan suoraan kirjoitettua virheetöntä koodia, joudutaan ohjelmaa korjailemaan ja tekemään käännös uudestaan. Käytettäessä Fortran 95:n moduuleita ja tyypinmäärittelyitä monet virheet löydetään onneksi jo käännösaikana. Myös linkitysvaiheessa voi ilmetä virheitä esimerkiksi väärin kirjoitetun aliohjelman nimen vuoksi. Tarvittaessa voit pyytää linkittäjää tulostamaan linkitystaulun, josta näkyy ohjelmassa käytettyjen proseduurien nimet. Vaikeimpia jäljitettäviä ovat vasta ohjelman ajon aikana ilmenevät virheet. Ohjelma voi lisäksi käyttäytyä väärin vain joissakin erikoistilanteissa. Tämän vuoksi onkin syytä testata ohjelmakoodia huolellisesti ennen sen ottamista tuotantokäyttöön. Jos ohjelma on iso ja monimutkainen, kannattaa sen eri osia testata erikseen. Käytettävissäsi voi olla myös tutkinta- ja virheenjäljitysohjelmia (debugger), joiden avulla voi etsiä ohjelmakoodiin pujahtaneita virheitä. 2.6 Yhteenveto Ohjelmointia tarvitaan tietokoneen kaikkien toimintojen ohjaamiseen. Tärkein ohjelmoinnin vaihe on tehtävän analyysi ja ohjelmakoodin suunnittelu. Muista myös ohjelmakoodin testaaminen virheiden löytämiseksi.

22 22 Fortran 95/2003 Harjoitustehtäviä 1. Mikä on ohjelmointikielen kääntäjän tehtävä? 2. Kokeile kappaleessa 1.2 (sivu 13) esitetyn ohjelmakoodin kääntämistä ja ajamista käytettävissäsi olevalla laitteistolla. 3. Muuta edellisen tehtävän ohjelmakoodia siten, että se tulostaa luvun x neliöjuuren SQRT(x). Syötä ohjelmalle negatiivinen luku. Mitä tapahtuu?

23 3. Johdatus ohjelmointiin Fortran 95:llä 23 3 Johdatus ohjelmointiin Fortran 95:llä Esittelemme tärkeimmät Fortran 95 -ohjelmointikielen piirteet yksinkertaisten esimerkkien avulla. Alussa kerromme lyhyesti Fortran-kielen merkityksestä ja historiasta. Luku kannattaa silmäillä läpi, vaikka Fortran-kielen vanhemmat versiot olisivat tuttuja. Esiteltävät asiat käydään yksityiskohtaisemmin läpi myöhemmissä luvuissa. 3.1 Fortran-kielen merkitys Fortran on vanhin ja eniten käytetty tieteellisen ja teknisen laskennan ohjelmointikieli. Fortran-kielen kehitys lähti käyntiin IBM:llä vuonna 1954, jolloin esiteltiin suunnitelma ohjelmointikielestä nimeltä FORmula TRANslator eli FORTRAN. Fortranin käytetyimpiä versioita ovat olleet FORTRAN IV, FORTRAN 66 ja FORTRAN 77. Fortran oli myös ensimmäinen ohjelmointikieli, josta luotiin standardi (FORTRAN 66 vuonna 1966). Vuonna 1978 valmistui vielä nykyäänkin käytetty vaikkakin jo vanhahtava FORTRAN 77 -standardi. Fortran 90 -kielen ISO- ja ANSI-standardi hyväksyttiin vuosina 1991 ja 1992 (standardit ISO/IEC1539:1991 ja ANSI X ). Tässä kirjassa pääosin käsiteltävä Fortran-kielen versio, Fortran 95, hyväksyttiin vuonna 1997 kansainväliseksi standardiksi (ISO/IEC1539:1997). Kansainvälinen (ISO) ja amerikkalainen (ANSI) standardi ovat sisällöltään samat. Teoksessa käytetään Fortran-nimestä kirjoitusasua FORTRAN, jos viitataan aiempiin Fortrankielen versioihin. Kirjoitustapa Fortran tarkoittaa yleensä Fortran-kieltä ja erityisesti Fortran 95 -standardin sisältöä. Uusin standardi, Fortran 2003, julkaistiin vuonna 2004 (ISO/IEC :2004(E)). Fortran 90 oli merkittävä edistysaskel Fortran-kielen kehityksessä. Standardi toi Fortranin muiden ohjelmointikielten tasolle. Osaa Fortran 90 -kielen uusista ominaisuuksista ei edes löydy muista ohjelmointikielistä. Fortran 95 oli sen sijaan pienehkö päivitys standardiin; suurimmat lisäykset liittyvät rinnakkaislaskentaan. Uusin standardi eli Fortran 2003 on suuri muutos kieleen sisältäen mm.

24 24 Fortran 95/2003 olio-ohjelmointiin liittyviä ominaisuuksia. Seuraava päivitys standardiin on työnimeltään Fortran 2008, ja tuo tarjolle entisestään uusia piirteitä. Tässä oppaassa keskitytään Fortran 95:n sisältöön. Fortran-ohjelmointikieli on kehitetty tehokkaaseen numeeriseen laskentaan. Koska Fortran 95 sisältää osajoukkonaan FORTRAN 77:n, voit käyttää vanhoja koodeja osana uutta ohjelmistoa. Lisäksi Fortran-kieli soveltuu entistäkin paremmin suuriin ohjelmistoprojekteihin. Koska Fortran-kieli on standardoitu, on ohjelmakoodi helppo siirtää uuteen tietokoneeseen, jos kyseisellä koneella on käytettävissä Fortran-kielen kääntäjä. Koodien siirrettävyyttä voikin pitää yhtenä ohjelmointikielen tärkeimmistä ominaisuuksista. Tämä korostuu entisestään uusien tietokonesukupolvien seuratessa toisiaan kiihtyvällä vauhdilla: vaikka laitteisto vaihtuu, useimmiten uudessa koneessa halutaan ajaa samoja ohjelmistoja kuin aikaisemminkin. Fortran-kieli on koodien siirrettävyyden kannalta parhaimpia ohjelmointikieliä. Standardia noudattavan ohjelmakoodin siirtäminen halutulle koneelle onnistuu usein ilman koodin muuttamista. Koneriippuvia ohjelman osia ovat lähinnä syöttö- ja tulostuslauseet sekä tiedostojen käsittely. 3.2 Fortran 95:n tärkeimmät uudet piirteet Vanhaan Fortran-kieleen tottuneille näkyvin Fortran 95:n muutos on uuden lähdekoodimuodon käyttöönotto. Tämä vapaa lähdekoodin muoto ei enää ole sarakesidonnainen, vaan kielen lauseet voi sijoittaa vapaasti maksimissaan 132 merkin pituisille riveille. Tunnuksien nimissä saa olla 31 merkkiä (entisen kuuden sijasta!), ja alaviiva _ on luvallinen symboli tunnuksissa kirjainten (A... Z) ja numeroiden (0... 9) lisäksi. Ohjelmointia tehostavat monipuolistuneet muuttujien määrittelyt. Nyt voi luoda omia rakenteisia muuttujatyyppejä, joiden avulla monet aiemmin hankalasti ratkaistut ohjelmointitehtävät onnistuvat suoraviivaisesti ja helposti. Lisäksi taulukkomuuttujien tilan voi varata ohjelman ajon aikana dynaamisesti, joten aikaisempienfortran-versioidenvaatimista hankalista työtilavektoreista päästään vihdoin eroon. Uudet ohjausrakenteet sekä esimerkiksi taulukkosyntaksi mahdollistavat luettavamman ja selkeämmän koodin kirjoittamisen. Voit myös käyttää taulukkosyntaksia rinnakkaisuuden esittämiseen ohjelmakoodin tasolla. Moduulirakenteet ja sisäiset aliohjelmat mahdollistavat ohjelmakoodin pilkkomisen erillisiin, riippumattomiin osiin ( modulaarisuus ). Nämä ominaisuuksien avulla tehdään myös proseduurien argumenttilistojen käännösaikaisia tarkistuksia. Nämä piirteet hyödyttävät sekä aloittelevaa ohjelmoijaa että suurten ohjelmistoprojektien parissa työskenteleviä ammattilaisia. Fortran-kieli säilyttää uusien piirteiden lisäksi myös perinteiset vahvuuteensa: esimerkkeinä tehokkuus numeerisessa laskennassa sekä monipuoliset ja tehokkaat syöttö- ja tulostustoiminnot.

25 3. Johdatus ohjelmointiin Fortran 95:llä Miksi Fortran-kieltä kannattaa käyttää Fortran-ohjelmointikielentärkeinetuonkielenyleisestihyväksyttystandardi. Koska lähestulkoon kaikille tietokoneille on saatavissa standardin mukainen Fortran-kääntäjä, on koodien siirtäminen mahdollista melkein mihin tahansa koneympäristöön. Fortran-kielen vahvuuksia on soveltuvuus numeeriseen laskentaan. Kielessä on paljon sellaisia piirteitä, jotka ovat muissa kielissä ylimääräisiä laajennuksia tai hankalasti lisättäviä piirteitä (esimerkkeinä kompleksilukujen aritmetiikka ja taulukkosyntaksi). Fortran-kieltä kehitetään aktiivisesti edelleen. Esimerkiksi rinnakkaislaskentaa varten on kehitetty Fortran 95 -kielen laajennus High Performance Fortran (HPF). Rinnakkaisohjelmointi onnistuu myös OpenMP:n avulla. Rinnakkaislaskentaa käsitellään luvussa 17 (sivu 299). Fortran 95 -standardi on pääosin yhteensopiva aiempiin Fortran-kielen standardeihin nähden. Täten aiemmin kehitetyt Fortran-koodit toimivat myös jatkossa. Pieni osa FORTRAN 77 -kielen piirteistä määriteltiin vanhentuneiksi, mutta useimmat Fortran 95 -kääntäjät sallivat silti näiden piirteiden käytön. Saatavilla on paljon valmiita Fortran-kielisiä ohjelmistoja, joita voi käyttää hyväksi omassa ohjelmointityössä. Usein ohjelmointi onkin olemassaolevan koodin muokkaamista uusia tarpeita vastaavaksi. 3.4 Fortran-ohjelman perusrakenne Ohjelmoimaan oppii vain ohjelmoimalla. Tässä teoksessa esitettyjä esimerkkejä kannattaa kokeilla itse. Pienten muutosten tekeminen esimerkkiohjelmiin on hyvä tapa oppia ymmärtämään Fortranin mahdollisuuksia. Fortran-kieltä voi käyttää taskulaskimen tapaan tekemään yksinkertaisia laskutoimituksia. Seuraavassa on alkeellinen esimerkkiohjelma: PROGRAM laskuesimerkki WRITE (*,*) 7* END PROGRAM laskuesimerkki Tämä ohjelmakoodi koostuu kolmesta rivistä, joista kullakin on yksi Fortranin lause. Lauseessa esiintyvät tunnukset erotetaan toisistaan välilyönneillä. WRITE-lauseen sisentämiseen on käytetty välilyöntejä, jolloin koodi on selkeämpi lukea. PROGRAM-lause antaa ohjelmalle nimen, ja END PROGRAM -lause lopettaa ohjelmayksikön suorituksen. WRITE-lausetta käytetään tulostukseen. Merkintä 7*52 tarkoittaa kertolaskua ja merkki + yhteenlaskua. Lause WRITE (*,*) 7* tulostaa laskutoimituksen tuloksen kuvaruudulle. Kun olemme kirjoittaneet tämän ohjelmakoodin tiedostoon laskut.f90,

26 26 Fortran 95/2003 saamme ohjelman käännettyä ajokelpoiseksi ohjelmaksi Unix-koneissa tyypillisesti komennolla % f90 -o laskut laskut.f90 Tiedoston nimi päättyy merkkeihin.f90, mistä kääntäjä tunnistaa tiedoston Fortran-lähdekooditiedostoksi. Jos käännöksessä ei ollut ongelmia, voimme ajaa syntyneen ohjelman laskut esimerkiksi seuraavasti: %./laskut 365 Ohjelma siis tulosti laskutoimituksen tuloksen. Fortran-ohjelma voi tulostaa myös merkkijonoja: PROGRAM laskuesimerkki_2 WRITE (*,*) 7* =, 7* END PROGRAM laskuesimerkki_2 Tämän ohjelman tulostus näyttää tältä: 7* = 365 Siis lainausmerkeissä (... ) ollut merkkijono tulostettiin sellaisenaan. 3.5 Tunnusten nimeäminen Edellisessä esimerkissä aloitettiin pääohjelma PROGRAM-lauseella. Ohjelmakoodi lopetettiin lauseella END PROGRAM. Jokaisessa ajokelpoisessa ohjelmassa on vain yksi pääohjelma. Ohjelman tunnus oli ensimmäisessä esimerkissä laskuesimerkki. Tunnuksen pituus saa olla korkeintaan 31 merkkiä, ja tunnukseen kelpaavat kirjaimet A... Z, alaviiva _ sekä numerot. Nämä säännöt koskevat käyttäjän määrittelemien tunnusten lisäksi myös Fortranin omia tunnuksia. Tässä oppaassa käytetään itse määritellyissä tunnuksissa pieniä kirjaimia. Fortran-kielen kannalta nimet lasku, Lasku ja LASKU ovat identtisiä, mutta pienet kirjaimet parantavat koodin luettavuutta. Fortran 95 -standardi ei ehdottomasti vaadi, että kääntäjä hyväksyisi pienet kirjaimet, mutta kaikki kääntäjät näyttävät sen tekevän. Tunnusten nimien on syytä olla järkeviä ja helposti ymmärrettäviä. Tunnusten nimeäminen on osa ohjelman dokumentointia! Esimerkiksi jos tunnuksen nimi viittaa eri asiaan kuin mihin tunnusta käytetään, aiheuttaa tämä sekaannuksen vaaran.

27 3. Johdatus ohjelmointiin Fortran 95:llä Vakiot ja peruslaskutoimitukset Edellisessä esimerkissä laskimme lausekkeen 7* arvon. Lausekkeessa esiintyy kolme kokonaislukuvakiota. Myös lausekkeen tulos 365 on kokonaisluku. Kokonaislukuvakiolla voi myös olla etumerkki (+ tai -), esimerkkinä tästä on vakio -5. Kokonaislukujen lisäksi Fortran osaa laskea myös reaaliluvuilla. Seuraavassa tulostetaan reaalilukuvakioita sisältävän laskutoimituksen tulos: WRITE (*,*) 52.0/7.0 Operaatio / tekee jakolaskun. Tämän lauseen tulostus voisi olla Tietokone laskee äärellisellä tarkkuudella. Tässä tapauksessa tuloksen tarkkuus on noin kuusi desimaalia, vaikka ohjelma tulostaa kahdeksan numeroa. Reaalikuluvakiot erotetaan kokonaisluvuista desimaalipisteen avulla. Reaaliluvut voi esittää myös eksponenttiesityksen avulla: WRITE (*,*) 0.52E2/0.7E1 Tämä lauseke tulostaa saman kuin edellä. Merkintä 0.52E2 tarkoittaa arvoa = Merkintä 520E-1 tarkoittaisi myös samaa arvoa: = Fortranin ymmärtämät peruslaskutoimitukset ovat +, -, *, / ja **. Nämä operaatiot vastaavat yhteen-, vähennys-, kerto- ja jakolaskua sekä potenssiin korottamista. Esimerkiksi lausekkeen 2**3 arvo on 2 3 = 8. Laskutoimitusten tulos riippuu argumenttien tyypistä. Lause WRITE (*,*) 52.0/7.0 =, 52.0/7.0,, 52/7 =, 52/7 tulostaa seuraavaa: 52.0/7.0 = , 52/7 = 7 Siis kokonaislukujen jakolaskun 52/7 tulos on myös kokonaisluku, ja murtoosa jätettiin huomiotta. Tarkista siis aina jakolaskun argumenttien tyypit! Jos jakolaskun argumenteista toinen on reaalilukutyyppiä, on tuloskin reaaliluku. Siten lausekkeen 52.0/7 arvoksi saadaan Sulkumerkkejä ( ja ) voi käyttää laskutoimitusten ryhmittelyyn: WRITE (*,*) 52.0/ , (52.0/7.0)+1.0, 52.0/( ) Tämä lause tulostaa seuraavaa: Koska jakolasku suoritetaan ennen yhteenlaskua, ovat edellä kaksi ensimmäistä lauseketta identtiset, joten sulkujen käyttö ei siis ole välttämätöntä. Kolmannessa lausekkeessa ovat sulut välttämättömät, muuten lausekkeen tarkoitus muuttuu. Merkkijonovakiot voi esittää joko yksinkertaisilla lainausmerkeillä (tyyliin

28 28 Fortran 95/2003 merkkijono ) tai kaksinkertaisilla lainausmerkeillä ("merkkijono"). Jos merkkijono sisältää lainausmerkin, täytyy se kahdentaa tai laittaa toisentyyppisten lainausmerkkien sisään: WRITE (*,*) yht äkkiä oli kesä WRITE (*,*) "yht äkkiä oli kesä" 3.7 Muuttujat Edellisissä esimerkeissä käytettiin pelkästään ohjelmakoodiin sijoitettuja vakioita. Jos ohjelman halutaan laskevan jotain muuta, joudutaan tällöin muuttamaan ohjelmakoodia ja kääntämään ohjelma uudestaan. Muun muassa tämän takia ohjelmoinnissa käytetään muuttujia, jotka voivat saada eri arvoja ohjelman ajokerrasta toiseen. Olkoon tehtävänä kirjoittaa seuraavasti toimiva ohjelma: 1. pyydetään syöttämään kaksi lukua 2. luetaan lukuarvot näppäimistöltä 3. tulostetaan syötetyt luvut ja niiden tulo. Tämä voidaan tehdä seuraavalla ohjelmalla: PROGRAM kertolasku! Ohjelma lukee kaksi kokonaislukua sekä! laskee ja tulostaa niiden tulon. INTEGER :: i, j WRITE (*,*) Syötä luku i: READ (*,*) i WRITE (*,*) Syötä luku j: READ (*,*) j WRITE (*,*) Luku i:, i WRITE (*,*) Luku j:, j WRITE (*,*) Tulo i*j:, i*j END PROGRAM kertolasku Huutomerkillä (!) alkavat rivit ovat kommentteja ja ne on tarkoitettu ohjeeksi ohjelman lukijalle ja käyttäjälle. Määrittely parantaa kääntäjän tekemiä virheentarkistuksia. Se on syytä laittaa jokaiseen ohjelmayksikköön otsikkolauseen (PROGRAM tms.) jälkeen. Tämä lause poistaa käytöstä tunnuksen ensimmäiseen kirjaimeen perustuvan tyyppimäärittelyn, josta kerrotaan tarkemmin kappaleessa 5.4 (sivu 55). Ohjelmassa määritellään kokonaislukumuuttujat i ja j rivillä INTEGER :: i, j Ensimmäinen WRITE-lause tulostaa kehotteen syöttää muuttujalle i arvo. Näppäimistöltä lukemiseen käytetään lausetta

29 3. Johdatus ohjelmointiin Fortran 95:llä 29 READ (*,*) i Tällöin muuttuja i saa arvokseen käyttäjän antaman luvun. Sama tehdään muuttujalle j. Lopuksi ohjelma tulostaa muuttujien i ja j arvot ja kertolaskun i*j tuloksen. Muuttujia voi siis käyttää vakioiden tavoin aritmeettisissa lausekkeissa. Ohjelman toiminta voisi olla seuraavaa: Syötä luku i: 11 Syötä luku j: 13 Luku i: 11 Luku j: 13 Tulo i*j: 143 Käyttäjä siis syötti ohjelmalle luvut 11 ja 13, ja ohjelma tulosti arvon = Muuttujien tyypit Edellä määrittelimme kokonaislukutyyppisiä (INTEGER) muuttujia. Kokonaislukujen lisäksi voimme määritellä reaalilukutyypin (REAL) muuttujia: PROGRAM potenssi! Ohjelma laskee ja tulostaa numeerisen lauseekkeen arvon. REAL :: k, x INTEGER :: n WRITE (*,*) Syötä lausekkeen k*x**n luvut k, x ja n: READ (*,*) k, x, n WRITE (*,*) Luku k:, k, Luku x:, x, Luku n:, n WRITE (*,*) Arvo k*x**n:, k*x**n END PROGRAM potenssi Muuttujat k ja x ovat reaalilukuja ja muuttuja n on kokonaisluku. Ohjelma lukee muuttujien arvot, tulostaa ne sekä laskee lausekkeen kx n arvon. Voimme käyttää ohjelmaa seuraavasti: Syötä lausekkeen k*x**n luvut k, x ja n: Luku k: Luku x: Luku n: 3 Arvo k*x**n: Sijoituslauseet Edellisessä ohjelmassa luimme tietoa muuttujiin k, x ja n sekä tulostimme lausekkeen k*x**n arvon. Yleensä tarvitsemme tätä monipuolisempia lausekkeita.

30 30 Fortran 95/2003 Sijoituslauseella voimme antaa muuttujalle arvon. Seuraavassa on pieni esimerkkiohjelma: PROGRAM neliojuuri! Ohjelma laskee neliöjuurilausekkeen arvon. REAL :: x, y INTRINSIC SQRT WRITE (*,*) Syötä luku x: READ (*,*) x y = x**2 + 1 WRITE (*,*) Luku x:, x WRITE (*,*) Arvo x**2 + 1:, y WRITE (*,*) Arvo SQRT(x**2 + 1):, SQRT(y) END PROGRAM neliojuuri Tässä ohjelmassa määrittelimme kaksi reaalilukumuuttujaa rivillä REAL :: x, y Lauseella INTRINSIC SQRT kerrotaan, että ohjelmassa käytetään Fortranin standardifunktiota SQRT, joka laskee luvun neliöjuuren arvon. Muuttujaan x luetaanarvonäppäimistöltä, jatämänjälkeensijoitetaanlausekkeen x**2 + 1 arvo muuttujaan y rivillä y = x**2 + 1 Lopuksi ohjelma tulostaa muuttujan y arvon sekä lausekkeen SQRT(y) arvon. Seuraavassa on esimerkki ohjelman käytöstä: Syötä luku x: Luku x: Arvo x**2 + 1: Arvo SQRT(x**2 + 1): Ohjelma tulostaa reaaliluvut kahdeksan numeron pituisina. Tulostetuissa arvoissa on noin kuusi merkitsevää desimaalinumeroa, koska reaaliluvuilla lasketaan äärellisellä tarkkuudella Omien funktioiden määrittely ja käyttö Edellä käytimme Fortranin standardifunktiota SQRT neliöjuuren laskemiseksi. Myös omien funktioiden määritteleminen on mahdollista. Seuraavassa ohjelmakoodissa määrittelemme funktion f, joka vastaa matemaattista määritelmää f(a) = a 2 + 1: PROGRAM funktio_esimerkki! Ohjelma lukee reaaliluvun x ja tulostaa! funktion f arvon tässä pisteessä.

31 3. Johdatus ohjelmointiin Fortran 95:llä 31 REAL :: x WRITE (*,*) Syötä luku x: READ (*,*) x WRITE (*,*) Luku x:, x WRITE (*,*) Arvo f(x):, f(x) CONTAINS FUNCTION f(a) RESULT(f_arvo) REAL :: a, f_arvo f_arvo = a**2 + 1 END FUNCTION f END PROGRAM funktio_esimerkki Tämä esimerkkiohjelma toimii seuraavasti: Syötä luku x: Luku x: Arvo f(x): Funktion f arvo lasketaan funktiokutsulla f(x). Funktio f on määritelty pääohjelman sisäisenä funktiona CONTAINS-lauseen jälkeen. Funktioista kerromme lisää luvussa 8 sivulta 99 alkaen. Seuraavassa on ote funktion f määrittelystä: FUNCTION f(a) RESULT(f_arvo) REAL :: a, f_arvo Funktion f muodollinen argumentti a on määritelty funktion otsikkorivillä. Muodollinen argumentti saa arvokseen funktiokutsussa f(x) esiintyvän todellisen argumentin x arvon. Funktion f arvo lasketaan muuttujaan f_arvo seuraavasti: f_arvo = a**2 + 1 Sekä muodollinen argumentti a että funktion palauttama arvo f_arvo ovat tässä tapauksessa tyyppiä REAL. Voimme käyttää funktiota f esimerkiksi seuraavasti: y = f(x) y = f(1.0) y = f(1.23e2) Toisaalta funktiokutsut y = f(1) y = f(1,0) johtavat käännösaikaiseen virheeseen: ensimmäisessä kutsussa argumentti on väärää tyyppiä (kokonaisluku) ja toisessa kutsussa on lisäksi väärä määrä argumentteja. Käännösaikaiset argumenttilistojen tarkistukset ovat hyödyllisiä ohjelmankehityksen kaikissa vaiheissa. Jos edellisessä esimerkkikoodissa desimaali-

32 32 Fortran 95/2003 piste olisi muuttunut vahingossa pilkuksi, huomataan virheellinen funktiokutsu f(1,0) jo käännösaikana. Tätä ominaisuutta ei ollut FORTRAN 77:ssä Toistorakenteet Fortranissa hoidetaan lauseiden toistaminen DO-silmukkojen avulla. Laskemme esimerkkinä lausekkeen ( ) x x arvot, kun x on 2 1, 2 2,...,2 10 eli 2, 4,...,1024. Seuraava ohjelmakoodi tulostaa halutut arvot: PROGRAM silmukka REAL :: x INTEGER :: i DO i = 1, 10 x = REAL(2**i) WRITE (*,*) arvot:, x, (1 + 1/x)**x END DO END PROGRAM silmukka Muuttuja x on määritelty REAL-tyyppiseksi, jolloin lausekkeessa 1/x vältetään kokonaislukujenjakolasku. Funktiokutsu REAL(2**i) muuttaa puolestaan kokonaislukulausekkeen 2**i reaalilukutyyppiseksi. DO-silmukka määritellään seuraavasti: DO silmukkamuuttuja = alaraja, yläraja lauseet END DO Silmukkamuuttuja käy järjestyksessä läpi arvot alaraja, alaraja + 1, alaraja + 2,..., yläraja. Tässä täytyy silmukkamuuttujan sekä ala- ja ylärajojen olla kokonaislukutyyppiä. Edellisessä esimerkissä silmukkamuuttuja i käy läpi arvot 1, 2, 3,...,10. Ohjelma tulostaa esimerkiksi seuraavaa (tulostusta muotoillaan paremman näköiseksi jatkossa): arvot: arvot: arvot: arvot: arvot: arvot: arvot: E arvot: E

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

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3 Johdatus f90/95 ohjelmointiin H, R & R luvut 1-3 Fortran-kieli ( 3.1-3) IBM 1954, FORmula TRANslator ISO/ANSI standardit f90, f95, f2003 tieteellinen & teknillinen laskenta rinnakkaislaskenta (HPF, openmp)

Lisätiedot

BJ30A1000 Kemiantekniikan tietotekniikka Fortran

BJ30A1000 Kemiantekniikan tietotekniikka Fortran BJ30A1000 Kemiantekniikan tietotekniikka Fortran Kimmo Klemola 21.04.2008 April 18, 2008 Kimmo Klemola 1 Fortran johdatusta Fortran-ohjelmointiin Materiaalina käytetty mm. CSC:n Fortran 90/95 opasta (Haataja,

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit 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,

Lisätiedot

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit 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,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

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

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

14. Hyvä ohjelmointitapa 14.1

14. Hyvä ohjelmointitapa 14.1 14. Hyvä ohjelmointitapa 14.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen; ohjelmaa voidaan käyttää ja ylläpitää jopa vuosikymmeniä. Jotta koodin muuttaminen on mahdollista, sen

Lisätiedot

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

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. 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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9. Python linkit: Python tutoriaali: http://docs.python.org/2/tutorial/ Numpy&Scipy ohjeet: http://docs.scipy.org/doc/ Matlabin alkeet (Pääasiassa Deni Seitzin tekstiä) Matriisit ovat matlabin perustietotyyppejä.

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.3.2010 1 / 44 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5 Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät tekniset ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 13.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 13.9.2017 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

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

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

Lisätiedot

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä /+^2 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen / +^2 Kopioi molemmat matematiikka-alueet ja liiku alueen sisällä

Lisätiedot

Fortran 90/95. + sopii erityisesti numeriikkaan:

Fortran 90/95. + sopii erityisesti numeriikkaan: Fortran 90/95 + sopii erityisesti numeriikkaan: + optimoivat kääntäjät tehokas koodi + mukana valmiiksi paljon varusfunktioita + kompleksiluvut + taulukko-operaatiot + operaattorit laajennettavissa myös

Lisätiedot

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 26.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 26.9.2018 1 / 21 Oppimistavoitteet: tämän luennon jälkeen Osaat kirjoittaa for-käskyn avulla ohjelman, joka toistaa haluttua

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä, käytä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

13. Hyvä ohjelmointitapa (osa 1) 13.1

13. Hyvä ohjelmointitapa (osa 1) 13.1 13. Hyvä ohjelmointitapa (osa 1) 13.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen tarvitaan ylläpitoa. Jotta koodin muuttaminen on mahdollista, on sen oltava myös muidenkin kuin

Lisätiedot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

11.4. Context-free kielet 1 / 17

11.4. Context-free kielet 1 / 17 11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 12.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 12.9.2018 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 28.1.2009 1 / 28 Esimerkki: murtoluvun sieventäminen Kirjoitetaan ohjelma, joka sieventää käyttäjän antaman murtoluvun.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2011 1 / 34 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 11.9.2019 CS-A1111 Ohjelmoinnin peruskurssi Y1 11.9.2019 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

4. Luokan testaus ja käyttö olion kautta 4.1

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 27.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 1 / 30 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 3.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 3.10.2018 1 / 27 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten ohjelma voidaan jakaa pienempiin osiin käyttämällä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006 Harjoitus 1: Matlab Mat-2.2107 Sovelletun matematiikan tietokonetyöt Syksy 2006 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1 Harjoituksen aiheita Tutustuminen Matlab-ohjelmistoon Laskutoimitusten

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2011 1 / 39 Haluatko antaa palautetta luennoista? Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 2 To 8.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 2 To 8.9.2011 p. 1/33 p. 1/33 Lukujen tallennus Kiintoluvut (integer) tarkka esitys aritmeettiset operaatiot

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot