SlideShare a Scribd company logo
OHJELMOINTI YLÄKOULUSSA Jatkokurssi 1.11.2016
8. JA 9. LUOKAN OHJELMOINTIA
Seutukunnallinen OPS:
8lk
Oppilas oppii suunnittelemaan ja ohjelmoimaan algoritmin, jolla
voidaan ratkaista jokin ongelma tai tehtävä, joka voi olla esim.
animaatio tai peli.
9lk
Oppilas oppii käyttämään funktioita ja muuttujia ohjelmointitehtävissä.
Oppilas osaa jakaa ongelman osaongelmiin, ratkaista ne
ohjelmoimalla ja yhdistää osat yhdeksi ratkaisuksi.
ALGORITMI
Algoritmi on yksityiskohtainen kuvaus tai ohje siitä, miten tehtävä tai
prosessi suoritetaan; jota seuraamalla voidaan ratkaista tietty
ongelma.
Algoritmin avulla voi ratkaista samankaltaisia tehtäviä esim.
jakolaskualgoritmin avulla voidaan jakaa mikä tahansa luku millä
tahansa luvulla.
Niissä on usein haaratumia sekä toistoja.
SISÄLTÖ
1) Funktio
2) Ehto- ja valintalause
3) Toisto
Funktion määritteleminen
Funktion parametrit muuttujina
Funktion testaaminen
Pinta-alan laskeminen
• Monikulmiot
• Ympyrä ja sektori
Predikaatit, vertailuoperaattorit,
Boolean operaattorit, ehto- ja
valintalause
• Syötteen tarkistaminen
• Taksilaskut
• Pythagoraan käänteinen lause
Toistorakenne rekursion avulla
Toistorakenne Message Loopin
ja Callback -funktioiden avulla
• Laskuautomaatti
• Myyrä – peli
FUNKTION AVULLA
YLEISTETÄÄN SÄÄNTÖJÄ
Tällä jaksolla opimme määrittelemään funktioita. Funktio on tapa
yleistää sääntöjä. Sen sijaan, että kirjoittaisimme
(/ (+ 1 2) 2)
(/ (+ 4 5) 2)
Kirjoitamme em. säännön yleisessä eli abstraktissa muodossa
muuttujien a ja b avulla:
(/ (+ a b) 2)
Lisäksi tarvitsemme rakenteen, jolla saamme nimen säännölle
(keskiarvo) sekä arvot muuttujille a ja b.
(define (keskiarvo a b)
(/ (+ a b) 2))
KOODIAAPINEN MOOC - SYKSY 2015
(keskiarvo 1 2)
(keskiarvo 4 5)
Funktion määrittely Funktion kutsuminen
Kirjoita kerran,
kutsu useasti.
FUNKTION KÄSITE TULEE
MATEMATIIKASTA
KOODIAAPINEN MOOC - SYKSY 2015
MÄÄRITTELYJOUKKO ARVOJOUKKO
3 9
neliö-funktio
-3
Funktio toimii aina samalla tavalla samalle syötteelle.
neliö : Luku -> Luku
𝑓 𝑥 = 𝑥2
FUNKTIO MUUTTAA SYÖTTEET
(ARGUMENTIT) PALUUARVOKSI
7
ARGUMENTIT
100
PALUUARVO
”black”
r
väri
MUUTTUJAT
(PARAMETRIT)
(𝑐𝑖𝑟𝑐𝑙𝑒 𝑟 "solid" 𝑣ä𝑟𝑖)
FUNKTION MÄÄRITTELY
8
(define (ympyrä r väri)
(circle r ”solid” väri))
FUNKTION ESITTELY
(KOMMENTTIRIVILLÄ)
9
; ympyrä : Luku Väri -> Kuva
(define (ympyrä r väri)
(circle r ”solid” väri))
Funktion nimi 1. Parametrin tyyppi 2. Parametrin tyyppi Funktion paluuarvon tyyppi
ESIMERKKI: PINTA-ALA-FUNKTIO
1) Funktion esittely:
;; pinta-ala : Luku Luku -> Luku
2) Funktion määrittely:
(define (pinta-ala a b)
(* a b))
3) Funktion kutsuminen (testaaminen käsin):
> (pinta-ala 400 25)
4) Funktion testaaminen (automaattisesti):
(check-expect (pinta-ala 400 25)
10000)
10
funktiokutsu
odotusarvo
KIRJOITA OMA FUNKTIO
0. tarkoitus: kirjoita lyhyt kuvaus siitä mitä funktiosi tekee
(vaihtoehtoisesti selitä tämä kaverillesi sanallisesti.) Pääasia, että
ymmärrät mitä olet tekemässä.
1. esittely: keksi funktiollesi nimi, listaa tarvittavien muuttujien
tietotyypit ja päätä mitä tietotyyppiä funktiosi palauttaa.
2. määrittely: keksi muuttujille (parametreille) nimet, kirjoita
funktion koodi parametrien avulla.
3. testaus:
 kutsu funktiotasi interaktioikkunasta eri argumenttien arvoilla TAI
 kirjoita testit check-expect:in avulla ja aja koodi
11
kommenttejaajettavaakoodia
HARJOITUKSET: FUNKTIOT
1) Monikulmioiden pinta-alat (neliö, suorakulmio, kolmio)
2) Ympyrän ja sektorin pinta-alat (ympyrä ja sektori, apufunktio)
Huom! Likiarvojen testaaminen check-within – funktiolla, kolmas
parametri on tarkkuus
3) Funktion testaaminen (automaattisesti):
(check-within (ympyrän-pinta-ala 50)
7853.9816
0.001)
funktiokutsu
odotusarvo
tarkkuus
TOTUUSARVOT (TRUE/FALSE)
- tosi
#true, true
#t, #T
13
true false
- epätosi
#false, false
#f, #F
VERTAILUOPERAATTORIT
Vertailuoperaattorit palauttavat totuusarvon
Yleensä vain samantyyppisiä arvoja kannattaa verrata keskenään, siksi
nämä funktiot tarkistavat myös sen, että argumentit ovat oikean
tyyppisiä:
 Vertailuoperaattorit luvuille: <, >, <=, >=, =
 Merkkijonoille: string=?
 Kuville: image=?
esim. (< 4 5)  #true
(= 4 -4)  #false
(string=? ”kissa1” ”kissa1”)  #true
14
PREDIKAATIT
Funktioita, jotka palauttavat totuusarvon kutsutaan predikaateiksi.
Racket-kielessä niiden nimessä on usein kysymysmerkki
esim. (number? 4)  #true
(string? 4)  #false
(even? 2)  #true
(zero? 3)  #false
(positive? -3)  #false
15
?
EHTOLAUSE (IF)
16
(if (< a 100)
”a on pienempi kuin 100”
”a on yhtäsuuri tai suurempi kuin 100”)
EHTOLAUSE FUNKTION SISÄLLÄ
Ehtolause sijaitsee normaalisti funktion sisällä, jolloin tutkitaan saatuja
parametrien arvoja:
esim.
(define (termostaatti lämpötila)
(if (< lämpötila 22)
”käynnistä lämmitin”
”sammuta lämmitin”)))
> (termostaatti 50)
> (termostaatti 10)
17
22°C
Boolean operaattoreilla voi yhdistellä ehtoja
 Kaikkien ehtojen tulee olla totta: and
 Vähintään yhden ehdon tulee olla totta: or
 Kääntää ehdon vastakkaiseksi: not
BOOLEAN OPERAATTORIT
(AND, OR, NOT)
18
AND
KAIKKIEN EHTOJEN TULEE TOTEUTUA
19
(and #true #true)  #true
(and #true #false)  #false
(and #false #true)  #false
Esim.
Jos funktiota kutsuu väärän tyyppisellä argumentilla, tulee virhe. Siksi on
hyvä tutkia ENNEN funktion kutsumista, että argumentit ovat ok.
(define (pinta-ala a b)
(if (and (number? a)(number? b))
(* a b)
”Virhe: anna lukuja”))
OR
VÄHINTÄÄN YHDEN EHDON ON TOTEUDUTTAVA
(or #true #false)  #true
(or #false #true)  #true
(or #false #false)  #false
20
Esim.
Joskus ”oikeita” vastauksia on useampi, silloin ehdot yhdisteään
käyttämällä or:ia.
(define (pohjoismaa? maa)
(or (string=? maa ”Suomi”)
(string=? maa ”Norja”)
(string=? maa ”Ruotsi”)
(string=? maa ”Tanska”)
(string=? maa ”Islanti”))
NOT
KÄÄNTÄÄ EHDON VASTAKKAISEKSI
21
(not #true)  #false
(not #false)  #true
Esim.
Joskus tarvitaan ehdon vastakohtaa
(define (nollastapoikkeva? luku)
(not (zero? luku))
A B (and A B) (or A B) (not A)
#T #T #T #T #F
#T #F #F #T #F
#F #F #F #F #T
VALINTALAUSE (COND)
Jos ehtolauseita tulee kovin monta sisäkkäin, niiden lukeminen ja
ohjelmointi on sekavaa. Valintalauseeseen voi laittaa niin monta ehtoa
kuin haluaa ja viimeinen else-haara suoritetaan jos mikään muu ehto ei
toteutunut.
22
Esim.
Koska bussilipun hinta (€) määräytyy iän mukaan ehtoja on oltava monta.
(define (bussilipun-hinta ikä)
(cond [(>= ikä 18) 3]
[(< 12 ikä 18) 2]
[(<= 7 ikä 12) 1]
[else 0]))
HARJOITUKSET: HAARAUTUMINEN
1) Syötteen tarkistaminen
2) Taksilaskut (Tehtävä 1)
3) Pythagoraan kääteislauseke (Tehtävä 2)
x
y
z
z
y
x
x
z
y
3
4
5
REKURSIO
24
Funktio, joka kutsuu itse
itseään on rekursiivinen.
Rekursiivisen funktion avulla voidaan toteuttaa silmukka, eli saadaan
ohjelma toistamaan jotain toimintoa monta kertaa.
Jotta silmukka päättyy joskus, meillä on oltava lopetusehto (if tai
cond).
Jotta silmukka ”muistaa” mitä on jo tehty, välituloksia säilytetään
funktion parametreissa.
Kutsuttaessa rekursiivista funktiota, annamme lähtötilanteen
argumentit. Kun lopetusehto toteutuu, funktiopalauttaa paluuarvon.
IKUINEN SILMUKKA LASKURILLA
25
(define (silmukka i)
(silmukka (add1 i))))uusi kierros
(silmukka 0)käynnistys
uusi kierros
(begin (display-info-timer i 50)
uusi i:n
arvo
i:n arvo alussa
DISPLAY-INFO
DISPLAY-INFO-TIMER
26
 display-info näyttää käyttäjälle kuvan/merkkijonon/luvun ja palauttaa
annetun arvon
 display-info-timer ottaa lisäksi ajan, joka kertoo kunka kauan info-
ruutu pidetään näkyvissä)
display-
info
ARGUMENTIT PALUUARVO
lukumerkkijono
”Game over”
sivuvaikutus
”Game over”
BEGIN JA LET
Jotta saamme funktion tekemään sivuvaikutuksia JA palauttamaan
paluuarvon, pitää muodostaa koodilohko begin:in avulla.
Begin evaluoi sen sisällä olevat lausekkeet järjestyksessä, ”hukkaa” niiden
tuottaman paluuarvon viimeistä lukuunottamatta ja palauttaa sen.
Jotta saamme talteen käyttäjän antamat syötteet, tarvitsemme lisäksi
funktion sisäisiä muuttujia. Näihin ns. lokaalit muuttujan arvot määritellään
let tai let* rakenteella (let* jos let-lauseke käyttää toista let-lauseketta).
27
muuttujan nimi muuttujan arvo
DISPLAY-READ
DISPLAY-READ-NUMBER
 display-read näyttää käyttäjälle kuvan/merkkijonon/luvun
(=sivuvaikutus) ja palauttaa käyttäjän editoriin kirjoittaman
merkkijonon
 display-read-number muuntaa annetun merkkijonon luvuksi
28
display-
read
ARGUMENTIT
PALUUARVO
kuva
”tikkataulu”
merkkijono
Asenna paketti DrRacket:issa:
File -> Package manager
Package source: teachpacks
(lopuksi paina enter)
sivuvaikutus
(require teachpacks/display-read)
DISPLAY-VALUE
 display-value näyttää käyttäjälle kuvan/merkkijonon/luvun ja
annetun arvon (jos sen voi näyttää) ja palauttaa annetun arvon
29
display-
value
ARGUMENTIT
PALUUARVO
merkkijono
35
luku
”Tulos on:”
luku
35
sivuvaikutus
IKUINEN SILMUKKA
(ESIMERKKI)
Automaattilaskuri kysyy käyttäjältä syötteitä, tallentaa ne lokaaleihin
muuttujiin (let), tutkii ovatko syötteet ok, jos ovat laskee tuloksen (kutsuu
pinta-ala funktiota) ja ilmoittaa tuloksen käyttäjälle (display-value), ja
palaa alkuun:
(define (automaattilaskuri)
(let [(a (display-read-number ”Anna kanta:”)
(b (display-read-number ”Anna korkeus:”)]
(if (and (number? a)(number? b))
(begin (display-value ”Pinta-ala on:” (pinta-ala a b))
(automaattilaskuri))
(begin (display-info ”Anna lukuja!”)
(automaattilaskuri)))))
30
Tämä älykkäämpi versio kysyy
käyttäjältä jatketaanko
parametreja ei tarvita
HARJOITUKSET : SILMUKAT
1) Lähtölaskenta
2) Laskuautomaatti
3) Myyrä – peli
4) Ufo-animaatio
MYYRÄPELI
1) Pistä myyrä vaihtamaan paikkaa
satunnaisesti pelikentän sisällä
;; uusi-sijainti : <void> -> Posn
2) Tee funktio, joka laskee hiiren etäisyyden
myyrän keskipisteestä
;; etäisyys : Luku Luku Luku Luku -> Luku
3) Tee funktio, joka vertailee onko hiiren sijainti
myyrän sisällä. Käytä hyväksesi etäisyys –
funktiota.
;; osuiko? : Luku Luku Luku Luku -> Totuusarvo
Lataa tehtävätiedosto
(x1, y1)
(x2, y2)
|y1-y2|
|x1-x2|
hiiri
OSUIKO?
(image-width MYYRÄ)
hiiri
(image-width MYYRÄ)
hiiri

More Related Content

Viewers also liked

Oppimisympäristöt - sosiaalisen median näkökulma
Oppimisympäristöt - sosiaalisen median näkökulmaOppimisympäristöt - sosiaalisen median näkökulma
Oppimisympäristöt - sosiaalisen median näkökulma
Pekka Ranta
 
Ely 2010 sometu
Ely 2010 sometuEly 2010 sometu
Ely 2010 sometu
Pekka Ranta
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
Tiina Partanen
 
Asiateksti 24.11.2012
Asiateksti 24.11.2012Asiateksti 24.11.2012
Asiateksti 24.11.2012hkaarnie
 
Ohjelmointi ja OPS
Ohjelmointi ja OPSOhjelmointi ja OPS
Ohjelmointi ja OPS
Riikka Järvinen
 
SL rakentaminen ja ohjelmointi Pauli Pinelli
SL rakentaminen ja ohjelmointi Pauli PinelliSL rakentaminen ja ohjelmointi Pauli Pinelli
SL rakentaminen ja ohjelmointi Pauli Pinelli
Pyy
 
OPS2016 ja ohjelmointi
OPS2016 ja ohjelmointiOPS2016 ja ohjelmointi
OPS2016 ja ohjelmointi
Iida-Maria Peltomaa
 
Sosiaalinen media - Mitä se on?
Sosiaalinen media - Mitä se on?Sosiaalinen media - Mitä se on?
Sosiaalinen media - Mitä se on?
Satu Luoma
 
Racket perusteet 4. Ehto- ja valintalauseet
Racket perusteet 4. Ehto- ja valintalauseetRacket perusteet 4. Ehto- ja valintalauseet
Racket perusteet 4. Ehto- ja valintalauseet
Tiina Partanen
 
Racket perusteet - Sovellukset A
Racket perusteet - Sovellukset ARacket perusteet - Sovellukset A
Racket perusteet - Sovellukset A
Tiina Partanen
 
Hyvä, paha sosiaalinen media
Hyvä, paha sosiaalinen mediaHyvä, paha sosiaalinen media
Hyvä, paha sosiaalinen media
hreinikainen
 
Racket alkeet 1. Peruslaskut
Racket alkeet   1. PeruslaskutRacket alkeet   1. Peruslaskut
Racket alkeet 1. Peruslaskut
Tiina Partanen
 
Racket alkeet 2. Kuvat
Racket alkeet   2. KuvatRacket alkeet   2. Kuvat
Racket alkeet 2. Kuvat
Tiina Partanen
 
Verbitaivutus
VerbitaivutusVerbitaivutus
Verbitaivutus
Anna-Maria Kohtala
 
Passiivilauseen objekti
Passiivilauseen objektiPassiivilauseen objekti
Passiivilauseen objekti
Anna-Maria Kohtala
 
Racket mooc 2017 - yleistä
Racket mooc 2017 -  yleistäRacket mooc 2017 -  yleistä
Racket mooc 2017 - yleistä
Tiina Partanen
 
Kasvaminen ja väheneminen kuvasta
Kasvaminen ja väheneminen kuvastaKasvaminen ja väheneminen kuvasta
Kasvaminen ja väheneminen kuvastateemunmatikka
 

Viewers also liked (19)

Oppimisympäristöt - sosiaalisen median näkökulma
Oppimisympäristöt - sosiaalisen median näkökulmaOppimisympäristöt - sosiaalisen median näkökulma
Oppimisympäristöt - sosiaalisen median näkökulma
 
Ely 2010 sometu
Ely 2010 sometuEly 2010 sometu
Ely 2010 sometu
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
 
Asiateksti 24.11.2012
Asiateksti 24.11.2012Asiateksti 24.11.2012
Asiateksti 24.11.2012
 
Ohjelmointi ja OPS
Ohjelmointi ja OPSOhjelmointi ja OPS
Ohjelmointi ja OPS
 
SL rakentaminen ja ohjelmointi Pauli Pinelli
SL rakentaminen ja ohjelmointi Pauli PinelliSL rakentaminen ja ohjelmointi Pauli Pinelli
SL rakentaminen ja ohjelmointi Pauli Pinelli
 
OPS2016 ja ohjelmointi
OPS2016 ja ohjelmointiOPS2016 ja ohjelmointi
OPS2016 ja ohjelmointi
 
Sosiaalinen media - Mitä se on?
Sosiaalinen media - Mitä se on?Sosiaalinen media - Mitä se on?
Sosiaalinen media - Mitä se on?
 
Racket perusteet 4. Ehto- ja valintalauseet
Racket perusteet 4. Ehto- ja valintalauseetRacket perusteet 4. Ehto- ja valintalauseet
Racket perusteet 4. Ehto- ja valintalauseet
 
Racket perusteet - Sovellukset A
Racket perusteet - Sovellukset ARacket perusteet - Sovellukset A
Racket perusteet - Sovellukset A
 
Hyvä, paha sosiaalinen media
Hyvä, paha sosiaalinen mediaHyvä, paha sosiaalinen media
Hyvä, paha sosiaalinen media
 
Racket alkeet 1. Peruslaskut
Racket alkeet   1. PeruslaskutRacket alkeet   1. Peruslaskut
Racket alkeet 1. Peruslaskut
 
Racket alkeet 2. Kuvat
Racket alkeet   2. KuvatRacket alkeet   2. Kuvat
Racket alkeet 2. Kuvat
 
Verbitaivutus
VerbitaivutusVerbitaivutus
Verbitaivutus
 
Passiivilauseen objekti
Passiivilauseen objektiPassiivilauseen objekti
Passiivilauseen objekti
 
Racket mooc 2017 - yleistä
Racket mooc 2017 -  yleistäRacket mooc 2017 -  yleistä
Racket mooc 2017 - yleistä
 
Funktiot
FunktiotFunktiot
Funktiot
 
Kasvaminen ja väheneminen kuvasta
Kasvaminen ja väheneminen kuvastaKasvaminen ja väheneminen kuvasta
Kasvaminen ja väheneminen kuvasta
 
Funktion nollakohta
Funktion nollakohtaFunktion nollakohta
Funktion nollakohta
 

More from Tiina Partanen

Computational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of MathematicsComputational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of Mathematics
Tiina Partanen
 
Racket mooc 2017 - aikataulu
Racket mooc 2017 -  aikatauluRacket mooc 2017 -  aikataulu
Racket mooc 2017 - aikataulu
Tiina Partanen
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)
Tiina Partanen
 
Ohjelmoinnin historiaa
Ohjelmoinnin historiaaOhjelmoinnin historiaa
Ohjelmoinnin historiaa
Tiina Partanen
 
Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)
Tiina Partanen
 
Kurkistus koodaukseen
Kurkistus koodaukseenKurkistus koodaukseen
Kurkistus koodaukseen
Tiina Partanen
 
Racket MOOC jakso 7
Racket MOOC jakso 7Racket MOOC jakso 7
Racket MOOC jakso 7
Tiina Partanen
 
Racket Turtle
Racket TurtleRacket Turtle
Racket Turtle
Tiina Partanen
 
Racket MOOC - jakso 6
Racket MOOC -  jakso 6Racket MOOC -  jakso 6
Racket MOOC - jakso 6
Tiina Partanen
 
Racket MOOC - jakso 5
Racket MOOC - jakso 5Racket MOOC - jakso 5
Racket MOOC - jakso 5
Tiina Partanen
 
Racket MOOC - jakso 3
Racket MOOC - jakso 3Racket MOOC - jakso 3
Racket MOOC - jakso 3
Tiina Partanen
 
Racket MOOC 2016 - yleistä (SYKSY)
Racket MOOC 2016 - yleistä (SYKSY)Racket MOOC 2016 - yleistä (SYKSY)
Racket MOOC 2016 - yleistä (SYKSY)
Tiina Partanen
 
Legorobottialkeet
LegorobottialkeetLegorobottialkeet
Legorobottialkeet
Tiina Partanen
 
Lapset koodaa?
Lapset koodaa?Lapset koodaa?
Lapset koodaa?
Tiina Partanen
 
Koodauksen ensiaskeleet
Koodauksen ensiaskeleetKoodauksen ensiaskeleet
Koodauksen ensiaskeleet
Tiina Partanen
 
Racket MOOC - viikko 6
Racket MOOC - viikko 6Racket MOOC - viikko 6
Racket MOOC - viikko 6
Tiina Partanen
 
Racket jatko 6. Listat
Racket jatko 6. ListatRacket jatko 6. Listat
Racket jatko 6. Listat
Tiina Partanen
 
Racket jatko 7. oppitunti
Racket jatko 7. oppituntiRacket jatko 7. oppitunti
Racket jatko 7. oppitunti
Tiina Partanen
 
Racket MOOC - 1. viikko
Racket MOOC - 1. viikkoRacket MOOC - 1. viikko
Racket MOOC - 1. viikko
Tiina Partanen
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - Racket
Tiina Partanen
 

More from Tiina Partanen (20)

Computational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of MathematicsComputational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of Mathematics
 
Racket mooc 2017 - aikataulu
Racket mooc 2017 -  aikatauluRacket mooc 2017 -  aikataulu
Racket mooc 2017 - aikataulu
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)
 
Ohjelmoinnin historiaa
Ohjelmoinnin historiaaOhjelmoinnin historiaa
Ohjelmoinnin historiaa
 
Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)
 
Kurkistus koodaukseen
Kurkistus koodaukseenKurkistus koodaukseen
Kurkistus koodaukseen
 
Racket MOOC jakso 7
Racket MOOC jakso 7Racket MOOC jakso 7
Racket MOOC jakso 7
 
Racket Turtle
Racket TurtleRacket Turtle
Racket Turtle
 
Racket MOOC - jakso 6
Racket MOOC -  jakso 6Racket MOOC -  jakso 6
Racket MOOC - jakso 6
 
Racket MOOC - jakso 5
Racket MOOC - jakso 5Racket MOOC - jakso 5
Racket MOOC - jakso 5
 
Racket MOOC - jakso 3
Racket MOOC - jakso 3Racket MOOC - jakso 3
Racket MOOC - jakso 3
 
Racket MOOC 2016 - yleistä (SYKSY)
Racket MOOC 2016 - yleistä (SYKSY)Racket MOOC 2016 - yleistä (SYKSY)
Racket MOOC 2016 - yleistä (SYKSY)
 
Legorobottialkeet
LegorobottialkeetLegorobottialkeet
Legorobottialkeet
 
Lapset koodaa?
Lapset koodaa?Lapset koodaa?
Lapset koodaa?
 
Koodauksen ensiaskeleet
Koodauksen ensiaskeleetKoodauksen ensiaskeleet
Koodauksen ensiaskeleet
 
Racket MOOC - viikko 6
Racket MOOC - viikko 6Racket MOOC - viikko 6
Racket MOOC - viikko 6
 
Racket jatko 6. Listat
Racket jatko 6. ListatRacket jatko 6. Listat
Racket jatko 6. Listat
 
Racket jatko 7. oppitunti
Racket jatko 7. oppituntiRacket jatko 7. oppitunti
Racket jatko 7. oppitunti
 
Racket MOOC - 1. viikko
Racket MOOC - 1. viikkoRacket MOOC - 1. viikko
Racket MOOC - 1. viikko
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - Racket
 

Ohjelmointi yläkoulussa: Jatkokurssi

  • 2. 8. JA 9. LUOKAN OHJELMOINTIA Seutukunnallinen OPS: 8lk Oppilas oppii suunnittelemaan ja ohjelmoimaan algoritmin, jolla voidaan ratkaista jokin ongelma tai tehtävä, joka voi olla esim. animaatio tai peli. 9lk Oppilas oppii käyttämään funktioita ja muuttujia ohjelmointitehtävissä. Oppilas osaa jakaa ongelman osaongelmiin, ratkaista ne ohjelmoimalla ja yhdistää osat yhdeksi ratkaisuksi.
  • 3. ALGORITMI Algoritmi on yksityiskohtainen kuvaus tai ohje siitä, miten tehtävä tai prosessi suoritetaan; jota seuraamalla voidaan ratkaista tietty ongelma. Algoritmin avulla voi ratkaista samankaltaisia tehtäviä esim. jakolaskualgoritmin avulla voidaan jakaa mikä tahansa luku millä tahansa luvulla. Niissä on usein haaratumia sekä toistoja.
  • 4. SISÄLTÖ 1) Funktio 2) Ehto- ja valintalause 3) Toisto Funktion määritteleminen Funktion parametrit muuttujina Funktion testaaminen Pinta-alan laskeminen • Monikulmiot • Ympyrä ja sektori Predikaatit, vertailuoperaattorit, Boolean operaattorit, ehto- ja valintalause • Syötteen tarkistaminen • Taksilaskut • Pythagoraan käänteinen lause Toistorakenne rekursion avulla Toistorakenne Message Loopin ja Callback -funktioiden avulla • Laskuautomaatti • Myyrä – peli
  • 5. FUNKTION AVULLA YLEISTETÄÄN SÄÄNTÖJÄ Tällä jaksolla opimme määrittelemään funktioita. Funktio on tapa yleistää sääntöjä. Sen sijaan, että kirjoittaisimme (/ (+ 1 2) 2) (/ (+ 4 5) 2) Kirjoitamme em. säännön yleisessä eli abstraktissa muodossa muuttujien a ja b avulla: (/ (+ a b) 2) Lisäksi tarvitsemme rakenteen, jolla saamme nimen säännölle (keskiarvo) sekä arvot muuttujille a ja b. (define (keskiarvo a b) (/ (+ a b) 2)) KOODIAAPINEN MOOC - SYKSY 2015 (keskiarvo 1 2) (keskiarvo 4 5) Funktion määrittely Funktion kutsuminen Kirjoita kerran, kutsu useasti.
  • 6. FUNKTION KÄSITE TULEE MATEMATIIKASTA KOODIAAPINEN MOOC - SYKSY 2015 MÄÄRITTELYJOUKKO ARVOJOUKKO 3 9 neliö-funktio -3 Funktio toimii aina samalla tavalla samalle syötteelle. neliö : Luku -> Luku 𝑓 𝑥 = 𝑥2
  • 7. FUNKTIO MUUTTAA SYÖTTEET (ARGUMENTIT) PALUUARVOKSI 7 ARGUMENTIT 100 PALUUARVO ”black” r väri MUUTTUJAT (PARAMETRIT) (𝑐𝑖𝑟𝑐𝑙𝑒 𝑟 "solid" 𝑣ä𝑟𝑖)
  • 8. FUNKTION MÄÄRITTELY 8 (define (ympyrä r väri) (circle r ”solid” väri))
  • 9. FUNKTION ESITTELY (KOMMENTTIRIVILLÄ) 9 ; ympyrä : Luku Väri -> Kuva (define (ympyrä r väri) (circle r ”solid” väri)) Funktion nimi 1. Parametrin tyyppi 2. Parametrin tyyppi Funktion paluuarvon tyyppi
  • 10. ESIMERKKI: PINTA-ALA-FUNKTIO 1) Funktion esittely: ;; pinta-ala : Luku Luku -> Luku 2) Funktion määrittely: (define (pinta-ala a b) (* a b)) 3) Funktion kutsuminen (testaaminen käsin): > (pinta-ala 400 25) 4) Funktion testaaminen (automaattisesti): (check-expect (pinta-ala 400 25) 10000) 10 funktiokutsu odotusarvo
  • 11. KIRJOITA OMA FUNKTIO 0. tarkoitus: kirjoita lyhyt kuvaus siitä mitä funktiosi tekee (vaihtoehtoisesti selitä tämä kaverillesi sanallisesti.) Pääasia, että ymmärrät mitä olet tekemässä. 1. esittely: keksi funktiollesi nimi, listaa tarvittavien muuttujien tietotyypit ja päätä mitä tietotyyppiä funktiosi palauttaa. 2. määrittely: keksi muuttujille (parametreille) nimet, kirjoita funktion koodi parametrien avulla. 3. testaus:  kutsu funktiotasi interaktioikkunasta eri argumenttien arvoilla TAI  kirjoita testit check-expect:in avulla ja aja koodi 11 kommenttejaajettavaakoodia
  • 12. HARJOITUKSET: FUNKTIOT 1) Monikulmioiden pinta-alat (neliö, suorakulmio, kolmio) 2) Ympyrän ja sektorin pinta-alat (ympyrä ja sektori, apufunktio) Huom! Likiarvojen testaaminen check-within – funktiolla, kolmas parametri on tarkkuus 3) Funktion testaaminen (automaattisesti): (check-within (ympyrän-pinta-ala 50) 7853.9816 0.001) funktiokutsu odotusarvo tarkkuus
  • 13. TOTUUSARVOT (TRUE/FALSE) - tosi #true, true #t, #T 13 true false - epätosi #false, false #f, #F
  • 14. VERTAILUOPERAATTORIT Vertailuoperaattorit palauttavat totuusarvon Yleensä vain samantyyppisiä arvoja kannattaa verrata keskenään, siksi nämä funktiot tarkistavat myös sen, että argumentit ovat oikean tyyppisiä:  Vertailuoperaattorit luvuille: <, >, <=, >=, =  Merkkijonoille: string=?  Kuville: image=? esim. (< 4 5)  #true (= 4 -4)  #false (string=? ”kissa1” ”kissa1”)  #true 14
  • 15. PREDIKAATIT Funktioita, jotka palauttavat totuusarvon kutsutaan predikaateiksi. Racket-kielessä niiden nimessä on usein kysymysmerkki esim. (number? 4)  #true (string? 4)  #false (even? 2)  #true (zero? 3)  #false (positive? -3)  #false 15 ?
  • 16. EHTOLAUSE (IF) 16 (if (< a 100) ”a on pienempi kuin 100” ”a on yhtäsuuri tai suurempi kuin 100”)
  • 17. EHTOLAUSE FUNKTION SISÄLLÄ Ehtolause sijaitsee normaalisti funktion sisällä, jolloin tutkitaan saatuja parametrien arvoja: esim. (define (termostaatti lämpötila) (if (< lämpötila 22) ”käynnistä lämmitin” ”sammuta lämmitin”))) > (termostaatti 50) > (termostaatti 10) 17 22°C
  • 18. Boolean operaattoreilla voi yhdistellä ehtoja  Kaikkien ehtojen tulee olla totta: and  Vähintään yhden ehdon tulee olla totta: or  Kääntää ehdon vastakkaiseksi: not BOOLEAN OPERAATTORIT (AND, OR, NOT) 18
  • 19. AND KAIKKIEN EHTOJEN TULEE TOTEUTUA 19 (and #true #true)  #true (and #true #false)  #false (and #false #true)  #false Esim. Jos funktiota kutsuu väärän tyyppisellä argumentilla, tulee virhe. Siksi on hyvä tutkia ENNEN funktion kutsumista, että argumentit ovat ok. (define (pinta-ala a b) (if (and (number? a)(number? b)) (* a b) ”Virhe: anna lukuja”))
  • 20. OR VÄHINTÄÄN YHDEN EHDON ON TOTEUDUTTAVA (or #true #false)  #true (or #false #true)  #true (or #false #false)  #false 20 Esim. Joskus ”oikeita” vastauksia on useampi, silloin ehdot yhdisteään käyttämällä or:ia. (define (pohjoismaa? maa) (or (string=? maa ”Suomi”) (string=? maa ”Norja”) (string=? maa ”Ruotsi”) (string=? maa ”Tanska”) (string=? maa ”Islanti”))
  • 21. NOT KÄÄNTÄÄ EHDON VASTAKKAISEKSI 21 (not #true)  #false (not #false)  #true Esim. Joskus tarvitaan ehdon vastakohtaa (define (nollastapoikkeva? luku) (not (zero? luku)) A B (and A B) (or A B) (not A) #T #T #T #T #F #T #F #F #T #F #F #F #F #F #T
  • 22. VALINTALAUSE (COND) Jos ehtolauseita tulee kovin monta sisäkkäin, niiden lukeminen ja ohjelmointi on sekavaa. Valintalauseeseen voi laittaa niin monta ehtoa kuin haluaa ja viimeinen else-haara suoritetaan jos mikään muu ehto ei toteutunut. 22 Esim. Koska bussilipun hinta (€) määräytyy iän mukaan ehtoja on oltava monta. (define (bussilipun-hinta ikä) (cond [(>= ikä 18) 3] [(< 12 ikä 18) 2] [(<= 7 ikä 12) 1] [else 0]))
  • 23. HARJOITUKSET: HAARAUTUMINEN 1) Syötteen tarkistaminen 2) Taksilaskut (Tehtävä 1) 3) Pythagoraan kääteislauseke (Tehtävä 2) x y z z y x x z y 3 4 5
  • 24. REKURSIO 24 Funktio, joka kutsuu itse itseään on rekursiivinen. Rekursiivisen funktion avulla voidaan toteuttaa silmukka, eli saadaan ohjelma toistamaan jotain toimintoa monta kertaa. Jotta silmukka päättyy joskus, meillä on oltava lopetusehto (if tai cond). Jotta silmukka ”muistaa” mitä on jo tehty, välituloksia säilytetään funktion parametreissa. Kutsuttaessa rekursiivista funktiota, annamme lähtötilanteen argumentit. Kun lopetusehto toteutuu, funktiopalauttaa paluuarvon.
  • 25. IKUINEN SILMUKKA LASKURILLA 25 (define (silmukka i) (silmukka (add1 i))))uusi kierros (silmukka 0)käynnistys uusi kierros (begin (display-info-timer i 50) uusi i:n arvo i:n arvo alussa
  • 26. DISPLAY-INFO DISPLAY-INFO-TIMER 26  display-info näyttää käyttäjälle kuvan/merkkijonon/luvun ja palauttaa annetun arvon  display-info-timer ottaa lisäksi ajan, joka kertoo kunka kauan info- ruutu pidetään näkyvissä) display- info ARGUMENTIT PALUUARVO lukumerkkijono ”Game over” sivuvaikutus ”Game over”
  • 27. BEGIN JA LET Jotta saamme funktion tekemään sivuvaikutuksia JA palauttamaan paluuarvon, pitää muodostaa koodilohko begin:in avulla. Begin evaluoi sen sisällä olevat lausekkeet järjestyksessä, ”hukkaa” niiden tuottaman paluuarvon viimeistä lukuunottamatta ja palauttaa sen. Jotta saamme talteen käyttäjän antamat syötteet, tarvitsemme lisäksi funktion sisäisiä muuttujia. Näihin ns. lokaalit muuttujan arvot määritellään let tai let* rakenteella (let* jos let-lauseke käyttää toista let-lauseketta). 27 muuttujan nimi muuttujan arvo
  • 28. DISPLAY-READ DISPLAY-READ-NUMBER  display-read näyttää käyttäjälle kuvan/merkkijonon/luvun (=sivuvaikutus) ja palauttaa käyttäjän editoriin kirjoittaman merkkijonon  display-read-number muuntaa annetun merkkijonon luvuksi 28 display- read ARGUMENTIT PALUUARVO kuva ”tikkataulu” merkkijono Asenna paketti DrRacket:issa: File -> Package manager Package source: teachpacks (lopuksi paina enter) sivuvaikutus (require teachpacks/display-read)
  • 29. DISPLAY-VALUE  display-value näyttää käyttäjälle kuvan/merkkijonon/luvun ja annetun arvon (jos sen voi näyttää) ja palauttaa annetun arvon 29 display- value ARGUMENTIT PALUUARVO merkkijono 35 luku ”Tulos on:” luku 35 sivuvaikutus
  • 30. IKUINEN SILMUKKA (ESIMERKKI) Automaattilaskuri kysyy käyttäjältä syötteitä, tallentaa ne lokaaleihin muuttujiin (let), tutkii ovatko syötteet ok, jos ovat laskee tuloksen (kutsuu pinta-ala funktiota) ja ilmoittaa tuloksen käyttäjälle (display-value), ja palaa alkuun: (define (automaattilaskuri) (let [(a (display-read-number ”Anna kanta:”) (b (display-read-number ”Anna korkeus:”)] (if (and (number? a)(number? b)) (begin (display-value ”Pinta-ala on:” (pinta-ala a b)) (automaattilaskuri)) (begin (display-info ”Anna lukuja!”) (automaattilaskuri))))) 30 Tämä älykkäämpi versio kysyy käyttäjältä jatketaanko parametreja ei tarvita
  • 31. HARJOITUKSET : SILMUKAT 1) Lähtölaskenta 2) Laskuautomaatti 3) Myyrä – peli 4) Ufo-animaatio
  • 32. MYYRÄPELI 1) Pistä myyrä vaihtamaan paikkaa satunnaisesti pelikentän sisällä ;; uusi-sijainti : <void> -> Posn 2) Tee funktio, joka laskee hiiren etäisyyden myyrän keskipisteestä ;; etäisyys : Luku Luku Luku Luku -> Luku 3) Tee funktio, joka vertailee onko hiiren sijainti myyrän sisällä. Käytä hyväksesi etäisyys – funktiota. ;; osuiko? : Luku Luku Luku Luku -> Totuusarvo Lataa tehtävätiedosto (x1, y1) (x2, y2) |y1-y2| |x1-x2| hiiri