Ohjelmoinnin peruskurssi Y1

Samankaltaiset tiedostot
Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Tutoriaaliläsnäoloista

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Luvuilla laskeminen. Esim. 1 Laske

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

TIE Johdatus ohjelmointiin

Ohjelmoinnin perusteet Y Python

Java-kielen perusteita

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

T Ohjelmoinnin perusteet Y (Python)

Fortran 90/95. + sopii erityisesti numeriikkaan:

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

T Ohjelmoinnin perusteet Y (Python) Opetusmoniste kevät 2010

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Python-oppimateriaali (CHEM-A2600)

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteet

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Johdatus Ohjelmointiin

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

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

7. Näytölle tulostaminen 7.1

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Matematiikan tukikurssi

Transkriptio:

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 presemo.aalto.fi/opey1luento4 Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute. Tätä kautta on mahdollisuus antaa nimettömänä palautetta luennosta. Myös harjoitustehtävistä voi antaa palautetta palautuksen yhteydessä, mutta tämä palaute ei ole nimetöntä. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 2 / 30

Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten voit muotoilla ohjelman tulostusta (esim. desimaalien määrää tulostettavassa luvussa). Tiedät, miten ohjelma voidaan jakaa pienempiin osiin käyttämällä funktioita. Osaat määritellä funktion. Osaat kutsua funktiota eli kirjoittaa muualle ohjelmaan käskyn, joka saa aikaan funktion suorittamisen. Tiedät, miten funktiolle voi antaa lähtötietoja parametrien avulla. Tiedät, miten funktio voi välittää muulle ohjelmalle tiedon laskemistaan arvoista tms. paluuarvojen avulla. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 3 / 30

Tulostuksen muotoilu Tulostuksen muotoilun avulla voi esim. määrätä desimaaliluvuista tulostettavien desimaalien määrän määrätä, kuinka leveä kenttä tulostettavalle asialle varataan päästä eroon ylimääräisitä välilyönneistä tulostuksessa. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 4 / 30

Miten tulostusta muotoillaan? print-käskyssä kirjoitetaan ensin lainausmerkkien sisälle tulostettava vakioteksti. Tekstin keskelle lisätään aaltosulut ja niiden sisään muotoilumääre sellaiseen paikkaan, johin tulostuksessa halutaan tulevan joku muotoiltava arvo, esimerkiksi muuttujan arvo. Lainausmerkin jälkeen tulostettavat arvot annetaan format-käskyllä. Esimerkki: luku1 = 4.579875 tulo = luku1 * luku1 print("luku on {:7.3f}".format(luku1)) print("{:5.2f} toiseen on {:6.2f}".format(luku1, tulo)) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 5 / 30

Muotoilumääre Muotoilukoodi alkaa kaksoispisteellä. Kaksoispisteen jälkeen voidaan antaa kokonaislukuna tulostukselle varattavan kentän leveys (voidaan myös jättää pois). Tämän jälkeen desimaaliluvuilla voidaan antaa piste ja sen jälkeen käytettävä tarkkuus (desimaalien määrä) kokonaislukuna. Lopuksi tulee määrittelykirjain, joka kertoo, millaista arvoa ollaan tulostamassa: d kokonaisluku f desimaaliluku ilman eksponenttiosaa e desimaaliluku eksponenttiosan kanssa E desimaaliluku eksponenttiosan kanssa g desimaaliluku s merkkijono CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 6 / 30

Esimerkkejä (Jotta esimerkit toimisivat, muuttujille pitää ensin antaa sopivat arvot) Muuttujien arvot tulostetaan kahden desimaalin tarkkuudella: print("{:.2f} toiseen on {:.2f}".format(luku1, tulo)) Tulostettaville arvoille varataan vakiolevyiset kentät, desimaaliluvut tulostetaan kolmen desimaalin tarkkuudella: print("{:3d} {:7.3f} {:9.3f}".format(vuosi, korko, arvo)) Kaksoispiste tulee suoraan merkkijonon jälkeen ja piste suoraan kokonaisluvun jälkeen ilman välilyöntejä välissä: print("opiskelija {:s}: {:d}.".format(nimi, pisteet)) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 7 / 30

Funktiot Todellisessa elämässä tarvitaan ohjelmia, jotka ovat tuhansien tai kymmenien tuhansien rivien mittaisia. Jos koko ohjelma muodostuu tuolloin yhdestä pääohjelmasta, on sen rakenteen ja toiminnan hahmottaminen vaikeaa. Lisäksi ohjelmissa tehdään usein sama asia monta kertaa. Ratkaisu: käytetään funktioita. Funktio on ohjelmakoodin osa, jolle on annettu oma nimi. Funktion nimeä käyttämällä voidaan kutsua funktiota eli pyytää funktiota suoritettavaksi muualta ohjelmasta. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 8 / 30

Funktioiden käytön etuja Ohjelmakoodi selkiytyy. Saman asian tekevä koodi joudutaan kirjoittamaan vain kerran. Ohjelman ylläpito helpottuu. Ohjelman testaus helpottuu. Ohjelman kirjoittaminen ryhmätyönä helpottuu. Ohjelman osia on helpompi käyttää uudelleen toisissa ohjelmissa. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 9 / 30

Esimerkki: kolmioiden tulostus Halutaan kirjoittaa ohjelma, joka tulostaa seuraavan kuvion. * *** ***** * *** ***** * *** ***** Kuvio muodostuu kolmiosta, joka piirretään 3 kertaa. Kirjoitetaan funktio yhden kolmion tulostamiseen. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 10 / 30

Esimerkin koodi def tulosta_kolmio(): print(" * ") print(" *** ") print("*****") def main(): tulosta_kolmio() tulosta_kolmio() tulosta_kolmio() main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 11 / 30

Toinen versio: kutsut toistokäskyn sisällä def tulosta_kolmio(): print(" * ") print(" *** ") print("*****") def main(): KERRAT = 3 for i in range(kerrat): tulosta_kolmio() main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 12 / 30

Parametrit Halutaan kirjoittaa ohjelma, jolle annetaan pituus jalkoina ja tuumina ja joka tulostaa saman pituuden sentteinä. Muunnoksen laskeminen sopii hyvin omaksi funktioksi. Tarvitaan kuitenkin jokin tapa kertoa funktiolle lähtötietoina annetut jalat ja tuumat. Tämä tieto voidaan välittää parametrien avulla. Parametri on funktion otsikossa sulkujen sisällä annettu nimi, jota voi käyttää funktion sisällä kuin mitä tahansa muuttujaa. Kun funktiota kutsutaan, määrätään parametrille tuleva alkuarvo. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 13 / 30

Pituusmuunnos, koodi def muunna_senteiksi(jalat, tuumat): TUUMAKERROIN = 2.54 JALKAKERROIN = 12 * TUUMAKERROIN pituus = JALKAKERROIN * jalat + TUUMAKERROIN * tuumat print("pituus on sentteina {:.1f} cm".format(pituus)) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 14 / 30

Pituusmuunnos, 1. versio pääohjelmasta Lähtötiedot (jalat ja tuumat) on kirjoitettu suoraan pääohjelmaan. def main(): print("paljonko on 5 jalkaa 10 tuumaa?") muunna_senteiksi(5, 10) print("enta 5 jalkaa 2 tuumaa?") muunna_senteiksi(5, 2) main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 15 / 30

Pituusmuunnos, parempi pääohjelma def main(): print("ohjelma muuntaa pituuksia senteiksi.") rivi = input("montako jalkaa?\n") pituuden_jalat = int(rivi) rivi = input("montako tuumaa?\n") pituuden_tuumat = int(rivi) muunna_senteiksi(pituuden_jalat, pituuden_tuumat) main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 16 / 30

Vielä parametreista Parametrit saavat funktion kutsussa annetut alkuarvot samassa järjestyksessä kuin parametrit ovat funktion otsikossa. Funktion kutsussa parametrina arvo voidaan antaa minä tahansa lausekkeena, jonka arvo voidaan laskea, esimerkiksi: suoraan lukuarvo muuttuja monimutkaisempi lauseke Esimerkkejä muunna_senteiksi(8, 2) muunna_senteiksi(pituuden_jalat, pituuden_tuumat) muunna_senteiksi(2 * pituuden_jalat, pituuden_tuumat - 5) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 17 / 30

Välitehtävä 1 Vastaa sivulla presemo.aalto.fi/opey1luento4 Mitä seuraava ohjelma tulostaa? def tulosta_tuplana(luku): tulos = 2 * luku print(tulos) def main(): numero = 3 luku = 5 tulosta_tuplana(numero) main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 18 / 30

Arvon palauttavat funktiot Halutaan tieto funktion laskemasta arvosta muualle ohjelmaan. Esimerkki: kierroksen 1 tehtävässä 3 piti laskea, millä kilometrimäärällä sähköauto tulee halvemmaksi kuin bensiiniauto. Pyydetty kilometrimäärä voidaan laskea jakamalla autojen hintojen ero niiden kilometrikäyttökustannusten erolla. Kirjoitetaan funktio, joka laskee bensiiniauton kulutuksesta (l / 100 km) sen polttoainekustannuksen kilometriä kohti. Jotta funktiossa laskettua arvoa voidaan käyttää muualla ohjelmassa, pitää se saada jotenkin tietoon funktion ulkopuolelle. Funktio voi välittää tiedon laskemastaan arvosta palauttamalla tämän arvon. Arvon voi palauttaa return-käskyllä. Sen suoritus aina päättää funktion suorituksen. Palautetun arvon voi ottaa talteen siellä, missä funktiota kutsuttiin. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 19 / 30

Arvon palauttaminen Arvo palautetaan return-käskyllä: return lauseke Palautettu arvo voidaan ottaa sijoituskäskyllä talteen siellä, missä funktiota kutsuttiin: muuttuja = funktio(parametrit) Palautetun arvon voi myös tulostaa suoraan esimerkiksi print-käskyssä: print("tulos on", funktio(parametrit)) Palautettua arvoa voi myös käyttää hyväksi suoraan toisen lausekkeen arvoa laskettaessa: uusi_tulos = 2 * funktio(parametrit) - 5 CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 20 / 30

Huomaa Arvon palauttaminen ja arvon tulostaminen ovat täysin eri asiat. Arvon tulostaminen tarkoittaa sitä, että ohjelma tulostaa arvon näkyviin esimerkiksi kuvaruudulle. Arvon palauttaminen ei vielä tulosta arvoa minnekään näkyviin. Se vain välittää funktion laskeman arvon käytettäväksi sinne, missä funktiota kutsuttiin. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 21 / 30

Autovertailu, koodi def laske_bensakulut_km(kulutus_sadalla, litrahinta): kilometrihinta = kulutus_sadalla / 100.0 * litrahinta return kilometrihinta def main(): rivi = input("anna sahkoauton hinta (eur).\n") sahkoauto = int(rivi) rivi = input("anna bensiiniauton hinta (eur).\n") bensa_auto = int(rivi) rivi = input("anna bensiiniauton kulutus (l/100 km).\n") kulutus = float(rivi) # jatkuu seuraavalla kalvolla CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 22 / 30

Autovertailu, koodi jatkuu main() hintaero = sahkoauto - bensa_auto bensan_hinta = 1.35 sahkokustannus_km = 0.02 bensakustannus_km = laske_bensakulut_km(kulutus, bensan_hinta) ero_kilometrilla = bensakustannus_km - sahkokustannus_km kilometrit = hintaero / ero_kilometrilla print("sahkoautolla pitaa ajaa yli {:.0f} km.".format(\ kilometrit)) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 23 / 30

Välitehtävä 2 Vastaa sivulla presemo.aalto.fi/opey1luento4 Mitä seuraava ohjelma tulostaa? def muuta_jotain(arvo): luku = 10 tulos = 3 * arvo return tulos def main(): maara = 15 luku = muuta_jotain(maara) print(luku) main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 24 / 30

Sisäkkäiset funktiokutsut Funktion kutsussa funktiolle voi antaa parametrina toisen funktion kutsun. Tällöin sisempi funktio suoritetaan ensin. Sisemmän funktion paluuarvoa käytetään ulomman funktion parametrin arvona. Esimerkki (int ja input ovat Pythonin valmiita funktioita): sahkoauto = int(input("anna sahkoauton hinta (eur).\n")) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 25 / 30

Moduuli math Pythonissa on valmiina suuri joukko funktioita erilaisten toimintojen tekemiseen. Suurin osa näistä funktioista on jaettu moduuleihin. Yksi moduuli sisältää tyypillisesti samaan asiaan liittyviä funktioita ja mahdollisesti myös vakioita. Yksi tärkeä moduuli on math, joka sisältää joukon matemaattisia funktioita sekä vakiot math.pi ja math.e. Jotta moduulin vakioita tai funktioita voisi käyttää, on ohjelmatiedoston alkuun kirjoitettava import math CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 26 / 30

Tärkeitä math-moduulin funktioita ceil(x) pienin kokonaisluku, joka on x. floor(x) suurin kokonaisluku, joka on x. sqrt(x) neliöjuuri exp(x) e potenssiin x. log(x) luonnollinen logaritmi. log10(x) 10-kantainen logaritmi. cos(x) kosini. sin(x) sini. tan(x) tangentti. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 27 / 30

Esimerkki: toisen asteen yhtälön ratkaisu Kirjoitetaan ohjelma, joka ratkaisee toisen asteen yhtälön ax 2 + bx + c = 0 Käytetään ratkaisukaavaa Ohjelma tulostaa vain reaalijuuret. x 1,2 = b ± b 2 4ac 2a Ratkaisujen lukumäärää tutkitaan neliöjuuren alla olevan diskriminantin arvon perusteella. CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 28 / 30

Toisen asteen yhtälö, koodi import math def ratkaise_yhtalo(a, b, c): diskrim = b * b - 4 * a * c if diskrim < 0: print("ei reaalijuuria.") elif diskrim == 0: x = -1.0 * b / (2 * a) print("yhtalon ratkaisu on {:.2f}.".format(x)) else: x1 = (-1.0 * b + math.sqrt(diskrim) ) / (2 * a) x2 = (-1.0 * b - math.sqrt(diskrim) ) / (2 * a) print("ratkaisut ovat {:.2f} ja {:.2f}.".format( x1, x2)) CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 29 / 30

Toisen asteen yhtälö, koodi jatkuu def main(): print("anna 2. asteen yhtalon kertoimet a, b ja c.") eka_kerroin = int(input()) toka_kerroin = int(input()) vakio = int(input()) if eka_kerroin == 0: print("yhtalo ei ole toista astetta.") else: ratkaise_yhtalo(eka_kerroin, toka_kerroin, vakio) main() CS-A1111 Ohjelmoinnin peruskurssi Y1 27.9.2017 30 / 30