Ohjelmointi
Ohjelmointi
Tietokoneohjelma koostuu komennoista eli tietokoneelle annettavista käskyistä suorittaa jokin tehtävä tai sarja tehtäviä. Tietokoneohjelmat ovat algoritmeja. Komentona voi olla esimerkiksi suorittaa jokin laskutoimitus, tarkastella tietokoneen tiedostoja tai viestiä käyttäjän kanssa. Tässä kappaleessa tutustumme yksinkertaisten algoritmien, kuten lajittelualgoritmien ja yhtälön numeeriseen ratkaisuun liittyvän algoritmin ohjelmointiin käytännössä. Opimme myös viestimään ohjelman käyttäjän kanssa: tulostamaan tekstiä ja kysymään käyttäjältä tietoja.
™/®Python Software Foundation
Python-ohjelmointikieli
Käytämme ohjelmointikielenä Pythonia. Ohjelmointikielet ovat formaaleja kieliä eli annettavat käskyt tulee formalisoida tietokoneohjelman ymmärtämälle ohjelmointikielelle. Ohjelmoinnissa kirjoitetaan tekstimuotoista lähdekoodia, jonka tietokoneohjelma tulkitsee konekielelle ja suorittaa ohjelmoijan kirjoittaman algoritmin.
Virheilmoitukset ja tiedonhaku
Ohjelmoinnissa tulet ennen pitkään kohtaamaan virheilmoituksia. Virheilmoitukset ilmestyvät ajettaessa virheellistä koodia. Viesti saattaa olla selkeä tai vaikeammin ymmärrettävä, jolloin virheilmoitusta kannattaa hakea verkkoselaimella. Itsenäinen tiedonhaku verkossa, kuten virheilmoitusten selvittäminen tai komentojen etsiminen on osa ohjelmointia. Tietoa löytää parhaiten englanniksi.
Ohjelmien asennus
Voit käyttää tehtävien tekemiseen joko valitsemaasi nettialustaa (esim. Python Online Compiler) tai ladata tarvittavat ohjelmat (Python ja jokin koodieditori) tietokoneellesi.
Selaimessa toimiva pythonalusta: Online Python Compiler
Ohjeet Pythonin ja koodieditori Visual Studio Coden asentamiseen:
(Klikkaa ohjeet auki)
Windows
Visual Studio Code
1. Lataa Visual Studio Code linkistä https://code.visualstudio.com/download
2. Klikkaa latausta ja seuraa ohjeita
Python 3
1. Lataa viimeisin Python 3 -versio linkistä https://www.python.org/downloads/
2. Klikkaa latausta ja valitse "Add Python 3.9 to PATH", jotta voit ajaa Pythonia suoraan komentoriviltä.
3. Valitse "Install Now".
Linux
Visual Studio Code
1. Asenna ohjelma Ubuntussa syöttämällä komentoriville koodi: sudo apt-get install code
2. tai seuraa ohjeita osoitteessa https://code.visualstudio.com/docs/setup/linux.
Python 3
1. Asenna ohjelma Ubuntussa syöttämällä komentoriville koodi: sudo apt-get install python3
macOS
Visual Studio Code
1. Lataa ohjelma osoitteesta https://code.visualstudio.com/download
2. Kun tiedosto on latautunut, tuplaklikkaa zip-tiedostoa
3. Siirrä Visual Studio Code-sovellus zip-tiedostosta tietokoneesi Applications-kansioon.
Python 3
1. Lataa ohjelma osoitteesta https://www.python.org/downloads/mac-osx/
2. Valitse kohdasta Stable Releases viimeisin Python 3 versio.
3. Klikkaa latausta ja valitse "Add Python 3.9 to PATH", jotta voit ajaa Pythonia suoraan komentoriviltä.
4. Valitse "Install Now".
Python-laajennus Studio Visual Codeen. Windows, Linux ja macOS
1. Avaa Studio Visual Code
2. Klikkaaa kohtaa Extensions ja lataa Microsoftin Python-laajennus.
Aloitetaan ohjelmointi tutustumalla komentoon print. Komento print tulostaa sille annetun merkkijonon:
Tulostus:
Tärkeää: Komennot on kirjoitettava lähdekoodiin tarkasti. Esimerkiksi hipsujen unohtaminen merkkijonon ympäriltä
antaa virheilmoituksen
Laskutoimitukset
Pythonin yleisimmät laskuoperaattorit
Voimme tulostaa näkyville myös laskutoimitusten tuloksia komennolla print.
Esimerkiksi koodi
Tulostaa 125
Huomaa, että hipsuja käytetään vain silloin kun halutaan tulostaa niiden sisällä oleva merkkijono (lisää tietotyypeistä alla)
Esimerkiksi koodi
Tulostaa 5**3
Muuttujan arvo ja tyyppi
Muuttujiin voidaan tallentaa tietoa ja muuttujalla on aina tietotyyppi. Muuttujaan tallennetaan haluttu arvo yhtäsuuruusmerkillä. Tietotyyppejä ovat esimerkiksi: merkkijono (str), totuusarvo (boolean), kokonaisluku (int), liukuluku (float).
Esimerkki 1
Arvojen tallentaminen muuttujiin merkkijono, totuusarvo, kokonaisluku ja liukuluku:
Muuttujan arvoa voi muuttaa. Esimerkiksi ohjelma
tulostaa
Moikka
Heipppa
Muuttujat kannattaa nimetä jollain niiden arvoa kuvaavalla nimellä, jotta koodista on ymmärrettävissä mikä muuttuja sisältää mitäkin tietoa. Muuttujan nimeämistä rajoittavat säännöt: Muuttujan nimessä ei saa käyttää ääkkösiä eikä välilyöntejä. Nimi ei saa alkaa isolla kirjaimella eikä numerolla. Myöskin tietyt erikoismerkit, kuten huutomerkki on kielletty. Alaviiva on sen sijaan on sallittu ja sillä voi haluttaessa korvata välilyöntiä.
Muuttujan tietotyypin tarkistaminen ja muuttaminen.
Esimerkki 2
Tarkastellaan float-tietotyypin tyyppimuunnoksia. Ohjelma
tulostaa
1.666666
<class ' float ' >
1
1.666666
1.666666
1
Syötteen lukeminen käyttäjältä komennolla input ja tulostuksen muotoilu
Syöte tarkoittaa tietoa jonka ohjelman käyttäjä antaa tietokoneohjelmalle.
Esimerkki 3
Luetaan merkkijono käyttäjältä, tallennetaan se muuttujaan nimi ja tulostetaan tervehdys:
Suoritus
1. Ohjelma kysyy syötettä käyttäjältä
2. Syötetään merkkijono: Tiina Testaaja
3. Ohjelma tulostaa
Saman tietotyypin arvoja voi yhdistellä plus-merkillä (+). Komento input lukee käyttäjän syötteen aina merkkijonona. Muuttujan tyyppi voidaan muuttaa halutuksi kertomalla ohjelmalle haluttu tietotyyppi kuten esimerkissä 2.
Esimerkki 4
Tehdään ohjelma joka lukee käyttäjältä kaksi kokonaislukua ja lukujen summan.
Ratkaisu
Muutetaan käyttäjän syöte kokonaislukumuotoon muuttujiin luku1 ja luku2.
Esimerkkitulostus
Anna ensimmäinen luku: 42
Anna toinen luku: 56
Yhteenlasku: 42 + 56 = 98
Eri tietotyypin arvoja voidaan yhdistää tulosteessa käyttämällä pilkkua. Pilkku lisää valmiiseen tulosteeseen aina välilyönnin. Toinen joustavampi tapa tulostaa eri tyypin arvoja samassa print-komennossa on f-merkkijono, joka muuttaa aaltosuissa olevat arvot merkkijonoiksi (string). Käyttämällä f-merkkijonoa vältytään turhilta välilyönneiltä.
Edellisen esimerkin tilanteessa tulostuskomennolla
Saadaan tulostus ilman turhia välilyöntejä:
Anna ensimmäinen luku: 42
Anna toinen luku: 56
Yhteenlasku: 42+56=98
Merkkijonoja voidaan myös yhdistelyn lisäksi pätkiä pienempiin osiin operaattorin [ ] avulla kirjoittamalla sinne haluttu indeksi tai indeksiväli(t).
Esimerkki 5
Merkkijonon "python" indeksointi:
Koodi
tulostaa
p
th
pyth
Ehtorakenne
Tärkeimmät vertailuoperaattorit
Lauseet: if, elif ja else
Esimerkki 6
Tarkistetaan käyttäjältä onko hän tarpeeksi vanha K16-elokuvanäytökseen, kun ikäjoustoa on 3 vuotta elokuviin aikuisen kanssa saapuvalla.
Ratkaisu
Esimerkkitulostus
Minkä ikäinen olet? 15
Pääset elokuviin aikuisen seurassa.
Ehtoja voi myös yhdistellä käyttämällä loogisia operaattoreita and ja or, jotka ovat yhtäpitäviä loogisten operaattoreiden "∧" ja "∨" kanssa.
Esimerkki 7
Tee ohjelma, joka kysyy käyttäjältä minkä laskutoimituksen tämä haluaa suorittaa vaihtoehdoista: yhteenlasku, vähennyslasku, kertolasku ja jakolasku ja millä kokonaisluvuilla laskutoimitus tehdään. Tämän jälkeen ohjelma tulostaa laskutoimituksen.
Huom. lähdekoodiin voidaan lisätä kommentteja käyttämällä risuaitaa (#). Kommentit eivät näy ohjelman suorituksessa.
Esimerkkitulostus 1
Esimerkkitulostus 2
Esimerkki 8
Jatkojalostetaan esimerkin 4 ohjelmaa. Tehdään ohjelma joka suorittaa laskutoimituksia, kunnes käyttäjä päättää lopettaa ohjelman suorituksen, laskutoimituksia suoritetaan 3 kappaletta tai ohjelma päätyy tilanteeseen, missä jakajana on luku 0. Suorituksen päätteeksi ohjelma tulostaa suoritettujen laskutoimitusten määrän
Esimerkkitulostus 1
Suoritus päättyy kolmen laskutoimituksen jälkeen.
Esimerkkitulostus 2
Suoritus päättyy valintaan e. huomaa, että ohjelma ei kysy laskettavia lukuja enää sen jälkeen, kun suoritus on päätetty lopettaa.
Esimerkki 9
Tee ohjelma joka kysyy käyttäjältä salasanaa kunnes käyttäjä antaa syötteen Python123 tai kunnes käyttäjä on antanut virheellisen salasanan kolme kertaa.
Esimerkkitulostus
Anna salasana: Java321
Väärä salasana !
Anna salasana: C++123
Väärä salasana !
Anna salasana: Python123
Salasana oikein !
Esimerkki 10
Tee ohjelma, joka kysyy käyttäjältä kokonaisluvun ja laskee luvulle kertotaulun luvuilla 1-10. Ohjelma antaa vastaukset yhdellä rivillä.
Esimerkkitulostus
Anna jokin kokonaisluku: 7
Luvun 7 kertotaulu: 7, 14, 21, 28, 35, 42, 49, 56, 63, 70
Harjoituksia
Huom. Tehtävät voi ratkaista oikein useammalla eri tavalla mutta testaa, että ohjelmasi toimii oikein.
1. Tee ohjelma joka kysyy käyttäjältä kokonaisluvut a ja b>0, ja tulostaa jakoyhtälön a:b.
Ohjelman esimerkkitulostus:
Vihje
Tarvitset laskuoperaattoreita: % ja //.
2. Tee ohjelma joka kysyy käyttäjältä positiivisen kokonaisluvun a, ja tutkii onko luku a alkuluku peräkkäisillä jakolaskuilla, joissa lukua a jaetaan luvuilla: 2,3,4...
Ohjelman esimerkkitulostukset:
Anna jokin positiivinen kokonaisluku: 113
Luku 113 on alkuluku
Anna jokin positiivinen kokonaisluku: 115
Luku 115 on alkuluku
Vihje
Liukuluvun muuttaminen kokonaisluvuksi komennolla int(liukulukuarvo) palauttaa vain kokonaisluvut. Esim. int(6.6) palauttaa arvon 6. Saat Pythonilla luvun a neliöjuuren käyttämällä indeksimerkintää a**0.5
3. Tarkastellaan kongruenssia a≡b (mod n). Tee ohjelma, joka kysyy käyttäjältä positiiviset kokonaisluvut a ja n ja tulostaa sata pienintä positiivista kokonaislukua b, jotka toteuttavat yhtälön.
Ohjelman esimerkkitulostus
Vihje
Kappaleesta Kokonaislukujen jaollisuus, jakoyhtälö ja kongruenssi muistetaan, että luvut a ja b ovat kongruentit modulo n, kun niiden jakojäännös on sama jaettaessa luvulla n.
... ohjelma jatkaa tulostusta sadanteen lukuun saakka.
4. Tee ohjelma, joka ratkaisee funktion f nollakohdat 12 desimaalin tarkkuudella Newtonin menetelmällä, kun käyttäjä syöttää sille alkuarvauksen.
Vihje
Liukuluvun a pyöristäminen n desimaalin tarkkuuteen saadaan komennolla round(a, n). Esim. round(5.66666,2) palauttaa arvon 5.67.
Ohjelman esimerkkitulostus
Lyhyt teoriaosuus Newtonin menetelmästä (klikkaa auki)
Newtonin menetelmällä voidaan etsiä likiarvoja derivoituvan funktion nollakohdille. Menetelmä on rekursiivinen. Lähdetään alkuarvauksesta x₀. Alkuarvaus voi perustua esim. funktion kuvaajan silmämääräiseen tarkasteluun funktion nollakohdasta. Jonon seuraavat jäsenet saadaan kaavasta
Jono suppenee yleensä hyvin nopeasti kohti funktion f(x)=0 ratkaisua. Suoritus voidaan lopettaa, kun muuttujan arvo ei enää muutu halutulla tarkkuudella. Esim. jos nollakohta halutaan ratkaista 15 desimaalin tarkkuudella, niin iterointi voidaan lopettaa, kun
15 desimaalin tarkkuudella.
5. Tee ohjelma, joka laskee Eukleideen algoritmilla haluttujen lukujen suurimman yhteisen tekijän.
Ohjelman esimerkkitulostus:
Vihje
Käytä while-silmukkaa.
6. Laadi ohjelma joka haarukoi funktion f(x)=0,5·sin(3x) nollakohdat halutulta väliltä ja palauttaa nollakohdan likiarvon 5 desimaalin tarkkuudella. Ohjelman esimerkkitulostus:
Vihje
Tehtävässä tarvitset sinifunktiota, jonka saat käyttöön lataamalla math-paketin ja viittaamalla sinifunktioon seuraavan esimerkin mukaisesti:
Huom. esimerkkitulostuksessa nollakohdan loput 4 desimaalia ovat nollia, joita ohjelma ei tulosta.
Lyhyt teoriaosuus Bolzanon lauseesta (klikkaa auki)
Bolzanon lause: Jos funktio f on jatkuva koko välillä [a, b], ja sen arvot f(a) ja f(b) ovat erimerkkiset välin päätepisteissä eli f(a)·f(b)<0, niin funktiolla f on ainakin yksi nollakohta välillä ]a,b[.
Bolzanon lauseen nojalla jatkuvan funktion f nollakohta välillä [a, b] voidaan määrittää ns. puolitusmenetelmällä.
Algoritmi
(1) Annetaan alkuarvot a ja b, joilla f(a) ja f(b) ovat erimerkkiset ja a<b.
(2) Olkoon c=(a+b)/2
jos f(a)·f(c)<0, niin annetaan uudeksi arvoksi b=c,
jos f(a)·f(c)>0, niin annetaan uudeksi arvoksi a=c.
(3) Toistetaaan kohtaa (2), kunnes |a-b| on riittävän pieni eli nollakohta on rajattu halutulle tarkkuudelle tai f(c)=0.
7. Ohessa on valtion progressiivinen tuloveroasteikko vuodelle 2021 (Verohallinto).
Tee ohjelma, joka laskee tuloveron käyttäjän syöttämälle ansiotulolle. Ohjelman esimerkkitulostuksia:
Ansiotulot, euroa: 46876.55
Maksettava valtion tulovero: 3878.52 euroa
Ansiotulot, euroa: 15300
Maksettava valtion tulovero: 0 euroa
Vihje
Käytä lauseita if, elif ja else
8. Tee ohjelma joka ratkaisee toisen asteen yhtälön nollakohdat reaalilukujen joukossa.
Ohjelman esimerkkitulostuksia:
Vihje
Miten toisen asteen yhtälön nollakohdat riippuvat diskriminantista?
9. Tee ohjelma joka kysyy käyttäjältä positiivisen kokonaisluvun ja tulostaa sen kertoman. Jos käyttäjä syöttää kokonaisluvun joka on pienempi tai yhtäsuuri kuin nolla, niin ohjelma kysyy lukua uudestaan, kunnes sille syötetään positiivinen kokonaisluku.
Esimerkkitulostus
Vihje
while- ja for-rakenteet
10. Tee ohjelma, joka etsii alkuluvut annetulta väliltä. Ohjelman esimerkkitulostus:
Vihje
For-rakenne