ohjelmointi yläkoulussa: jatkokurssi
TRANSCRIPT
![Page 1: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/1.jpg)
OHJELMOINTI YLÄKOULUSSA Jatkokurssi 1.11.2016
![Page 2: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/2.jpg)
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.
![Page 3: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/3.jpg)
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.
![Page 4: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/4.jpg)
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
![Page 5: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/5.jpg)
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.
![Page 6: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/6.jpg)
FUNKTION KÄSITE TULEE MATEMATIIKASTA
KOODIAAPINEN MOOC - SYKSY 2015
MÄÄRITTELYJOUKKO ARVOJOUKKO
3 9neliö-funktio
-3
Funktio toimii aina samalla tavalla samalle syötteelle.
neliö : Luku -> Luku
𝑓 𝑥 = 𝑥2
![Page 7: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/7.jpg)
FUNKTIO MUUTTAA SYÖTTEET (ARGUMENTIT) PALUUARVOKSI
7
ARGUMENTIT
100
PALUUARVO
”black”
r
väri
MUUTTUJAT
(PARAMETRIT)
(𝑐𝑖𝑟𝑐𝑙𝑒 𝑟 "solid" 𝑣ä𝑟𝑖)
![Page 8: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/8.jpg)
FUNKTION MÄÄRITTELY
8
(define (ympyrä r väri)
(circle r ”solid” väri))
![Page 9: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/9.jpg)
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
![Page 10: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/10.jpg)
ESIMERKKI: PINTA-ALA-FUNKTIO1) 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
![Page 11: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/11.jpg)
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
kom
mentte
jaa
jetta
vaa
kood
ia
![Page 12: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/12.jpg)
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
![Page 13: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/13.jpg)
TOTUUSARVOT (TRUE/FALSE)
- tosi
#true, true
#t, #T
13
true false
- epätosi
#false, false
#f, #F
![Page 14: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/14.jpg)
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
![Page 15: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/15.jpg)
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
?
![Page 16: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/16.jpg)
EHTOLAUSE (IF)
16
(if (< a 100)
”a on pienempi kuin 100”
”a on yhtäsuuri tai suurempi kuin 100”)
![Page 17: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/17.jpg)
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
![Page 18: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/18.jpg)
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
![Page 19: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/19.jpg)
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”))
![Page 20: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/20.jpg)
ORVÄ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”))
![Page 21: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/21.jpg)
NOTKÄÄ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
![Page 22: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/22.jpg)
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]))
![Page 23: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/23.jpg)
HARJOITUKSET: HAARAUTUMINEN
1) Syötteen tarkistaminen
2) Taksilaskut (Tehtävä 1)
3) Pythagoraan kääteislauseke (Tehtävä 2)
x
y
zz
y
x
x
z
y
3
4
5
![Page 24: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/24.jpg)
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.
![Page 25: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/25.jpg)
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
![Page 26: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/26.jpg)
DISPLAY-INFODISPLAY-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”
![Page 27: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/27.jpg)
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
![Page 28: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/28.jpg)
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)
![Page 29: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/29.jpg)
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
PALUUARVOmerkkijono
35luku
”Tulos on:”
luku35
sivuvaikutus
![Page 30: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/30.jpg)
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
![Page 31: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/31.jpg)
HARJOITUKSET : SILMUKAT
1) Lähtölaskenta
2) Laskuautomaatti
3) Myyrä – peli
4) Ufo-animaatio
![Page 32: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/32.jpg)
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
![Page 33: Ohjelmointi yläkoulussa: Jatkokurssi](https://reader031.vdocuments.site/reader031/viewer/2022022202/588420a01a28ab485c8b579f/html5/thumbnails/33.jpg)
OSUIKO?
(image-width MYYRÄ)
hiiri
(image-width MYYRÄ)
hiiri