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

Osion perustehtävät