Harjoitustehtävät 3
Tästä eteenpäin suosittelemme tekemään ohjelmointitehtäviä integroidussa kehitysympäristössä.
Osaathan luoda solutionin ja projektin sekä lisätä uuden projektin olemassa olevaan solutioniin? Kertaa tarvittaessa ohjeet.
Pyydä apua jos et ole vielä tähän mennessä saanut asennettua kurssin työkaluja.
Vinkki: Pidä tehtäviä tehdessäsi aina esillä kynä ja paperia.
Osaamistavoitteet
Tämän harjoituksen päätteeksi
- osaat tehdä funktion, joka ottaa vastaan parametrin ja palauttaa arvon
- ymmärrät, mitä tarkoittaa funktion kuormittaminen (function overload)
- osaat nimetä muuttujat ja aliohjelmat kuvaavasti
T0. Palaute tästä osasta (0,5 p.)
Auta meitä parantamaan tätä kurssia antamalla palautetta tästä kurssin osiosta.
Huom: Vastaa tähän vasta, kun olet valmis tämän harjoitustehtäväkerran tehtävien kanssa
Vastaa alla oleviin kohtiin tämän kurssin osasa käsiteltyjen materiaalien ja tehtävien (luennot, esimerkit, kurssimoniste, harjoitustehtävät) perusteella.
Saat 0,25 pistettä vastaamalla kaikkiin alla oleviin väittämiin.
Kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, harjoitustehtävien tekeminen, luentovideon katsominen, tehtävien purkutilaisuuteen osallistuminen ja niin edelleen.
T1. Tyyppi ja nimi muuttujalle (1 p.)
Lue ensin: 7. Muuttujat.
Miten esittelisit muuttujat (tyyppi ja nimi) seuraavia tilanteita varten. Vastaukseksi riittää muuttujan alustus jollakin esimerkkiarvolla.
a) Työmatkan pituus polkupyörällä
b) Suoritettujen opintopisteiden määrä
c) Koko tutkinnon laajuus opintopisteissä
d) Tehtyjen harjoitustehtävien lukumäärä
e) Kirjan ensimmäinen kirjain
f) Sadan metrin juoksun voittajan aika.
g) 3 kuukauden euribor-korko
h) euron markka-muuntokerroin
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
T2*. Valitse sopiva tyyppi (1 p.)
Valitse sopiva tyyppi kullekin seuraavista tiedoista. Mahdollista yksikköä (esim. EUR / kg) ei tarvitse huomioida.
Voit antaa kysymykseen vastauksen vain kerran.
Arviointi: 0,1 pistettä jokaisesta oikeasta valinnasta. Väärästä vastauksesta ei vähennetä pisteitä.
T3*. Yksinkertaisia funktioita (1 p.)
Lue ensin monsteesta: 9. Aliohjelman paluuarvo.
Katso ensin: Luento 5.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät 3.1 ja 3.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä 3.1
Tee funktio nimeltä PlusYksi, joka ottaa parametrina yhden kokonaisluvun, ja palauttaa aina yhtä suuremman luvun. Huomaa, että "Näytä koko koodi"-linkin takaa saat esiin tehtävässä jo olevan valmiin koodin. Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia.
Palautus: Palautuslaatiikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja ja tallenna -painikkeella 0,1 p; onnistuneesti ajetuista testeista Aja opettaja kirjoittamat testit -painikkeella 0,4 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Voit kokeilla tehdä alkuun vastaavan tehtävän tutoriaalina täältä:
Harjoitustehtävien harjoittelu: Funktioita-tutoriaali
Katso lisäksi yleinen ohje aliohjelmien kirjoittamisesta:
Muista erityisesti mallijärjestys aliohjelman kirjoittamiselle:
- Kirjoita aliohjelman määritys (
public static, palautustyyppi, nimi, parametrit, runko) - Lisää runkoon joku pakollinen
return-lause niin, että ohjelma kääntyy, esimerkiksireturn "testi"; - Kokeile, että ohjelma varmasti kääntyy.
- Lisää dokumentaatio aliohjelman alkuun.
- Nyt voit muuttaa aliohjelman runkoa niin, että se tekee halutun asian.
Missähän mättää kun en saa tässä toimimaan komentoa luku++ yhden lisäämiseen, vain luku + 1 toimii?
Tässä tulee vastaan ++-operaattorin toiminnan pieni yksityiskohta: luku++ on lauseke, eli suorituksen lopuksi se tuottaa arvon, jonka voi sijoittaa muuttujaan. C#-kielessä (ja oikeastaan kaikissa C-pohjasissa kielissä, jossa ++ on operaattori), luku++ tuottaa arvoksi luvun ennen kasvattamista yhdellä. Sen sijaan ++luku kasvattaa muuttujan arvon yhdellä ja palauttaa päivittyneen arvon.
Katso monisteesta Luku 7.7.3 Arvonmuutto-operaattorit ja kiinnitä huomiota erityisesti siellä oleviin WriteLine-esimerkkeihin.
Tämän tehtävän kannalta kuitenkin luku + 1 on ehkä vähän selkeämpi :) -DZ
Tehtävä 3.2
Tee funktio JaaKahdella joka ottaa parametrina int-tyyppisen kokonaisluvun ja palauttaa kyseisen luvun jaettuna kahdella.
Palautus: Palautuslaatiikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja ja tallenna -painikkeella 0,1 p; onnistuneesti ajetuista testeista Aja opettaja kirjoittamat testit -painikkeella 0,4 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Vinkki: Muista int-kokonaislukujen jakamiseen liittyvä erikoisuus, ks. monisteen Luku 7.8.1.
Voit kokeilla tehdä alkuun vastaavan tehtävän tutoriaalina täältä:
Harjoitustehtävien harjoittelu: Funktioita-tutoriaali
Katso lisäksi yleinen ohje aliohjelmien kirjoittamisesta:
Muista erityisesti mallijärjestys aliohjelman kirjoittamiselle:
- Kirjoita aliohjelman määritys (
public static, palautustyyppi, nimi, parametrit, runko) - Lisää runkoon joku pakollinen
return-lause niin, että ohjelma kääntyy, esimerkiksireturn "testi"; - Kokeile, että ohjelma varmasti kääntyy.
- Lisää dokumentaatio aliohjelman alkuun.
- Nyt voit muuttaa aliohjelman runkoa niin, että se tekee halutun asian.
Tein koodin riderilla ja tulostaa sen ihan oikein, mutta kun yritän tänne liittää sitä niin heittää vain erroria ja syöttää tuon alkuperäisen koodin. Miten saan oman koodin tuossa toimiin että se työttäisi vain sen?
Huomaa tehtävän palautusohje: Palautuslaatiikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana. Näet TIMissa olevan valmiin pohjakoodin Näytä koko koodi -painikkeella. -DZ
—T4. Yksikkömuunnokset (1 p.)
Lue ensin monsteesta: 9. Aliohjelman paluuarvo.
Katso ensin: Luento 5.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät 4.1 ja 4.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä 4.1
Fahrenheit-asteet (F) muunnetaan celsius-asteiksi (C) seuraavalla kaavalla.
C = (F - 32) / 1.8
Tee funktio FahrenheitToCelsius, joka ottaa parametrina fahrenheit-lämpötilan ja palauttaa sen celsiusasteina. Funktiota voi kutsua esimerkiksi seuraavasti:
Tämän jälkeen lampotilaC-muuttujan arvona tulisi olla lämpötila celsiusasteina.
Palautus: Palautuslaatiikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja ja tallenna -painikkeella 0,1 p; onnistuneesti ajetuista testeista Aja opettaja kirjoittamat testit -painikkeella 0,4 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Tehtävä 4.2
Kirjoita funktio MailitKilometreiksi, joka muuntaa mailit kilometreiksi. Yksi maili on 1 609,344 metriä. Kuten tehtävässä 3, täydet pisteet saa kun koodi toimii ja ajat sen (Aja), kun testit menevät läpi (Test).
Palautus: Palautuslaatiikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja ja tallenna -painikkeella 0,1 p; onnistuneesti ajetuista testeista Aja opettaja kirjoittamat testit -painikkeella 0,4 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Käytin alunperin koodissa mailia double pituuskilomereina = pituusMaileina * 1.60934; Silloin koodi antoi virhettä. Kokeilin muuttaa lakskutoimituksen siten, että se tapahtuu pelkästään muuttujilla. Tämä ei auttanut. Huomasin, että virhe johtui siitä, että käytin yhtä desimaalia liian vähän mailin lukemassa. Jätin muuttujan kanssa tehdyn koodin vastaukseen, kun ei sillä nyt sinänsä mitään väliä ole.
—T5. Muuttujat ja operaattorit (1 p.)
Lue ensin monisteesta: 7.7 Operaattorit (ja aritmeettiset lausekkeet).
Määrittele sopivat muuttujat ja sijoita niihin alla olevaa kuvausta vastaava arvo. Käytä mahdollisimman vähän ns. literaaleja, eli koodiin kirjoitettuja kiinteitä lukuja. Kiinnitä huomiota muuttujien tyyppeihin ja nimeämiseen. Pelkkä Main()-pääohjelma riittää, tässä ei tarvitse kirjoittaa aliohjelmia.
a) vuorokauden sekuntien lukumäärän
b) vuoden tuntien lukumäärän
c) kauanko valolla kuluu aikaa matkaan auringosta maahan
(keskietäisyydet riittävät).
d) valovuosi kilometreinä
Palautus: Palautuslaatiikkoon palautetaan Main-pääohjelman sisältö. Pääohjelman määrittely on TIM-versiossa valmiiksi mukana.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
T6. Erilaisia portaita (1 p.)
Lue ensin monisteesta: 6.5 Aliohjelman kuormittaminen (function overload).
Katso esimerkkikoodi: Lumiukko ja ylikuormittaminen.
Jos haluat tehdä tehtävän Riderissa: Jypeli-tehtävien tekeminen Riderissa.
Katso ensin Harjoitustehtävien 2 Tehtävän 4 (Portaat) mallivastaus menemällä tehtävän palautuslaatikon kohdalle ja painamalla laatikon yläpuolella olevaa Näytä mallivastaus -painiketta. Liitä mallivastauksen koodi tämän tehtävän pohjaksi. Voit myös käyttää omaa vastausta, jos olet tehnyt tehtävän.
Muokkaa koodia sellaiseksi, että PiirraNelio voidaan kutsua kahdella eri tavalla siten että koodi toteuttaa Begin-aliohjelmassa olevat kutsut.
- Viisi ensimmäistä kutsua toimivat kuten aikaisemmassa Portaat-tehtävässä.
- Kaksi jälkimmäistä kutsua toimivat kuten Portaat-tehtävässä, mutta viimeisellä argumentilla ilmaistaan neliön koko.
- Tee neliöistä
GameObject-olioita, niin fysiikan kanssa ei tule ongelmia.
HUOM! Aliohjelmissa ei saa olla toistoa, ts. varsinaisten neliöiden luonti tulee olla vain yhdessä aliohjelmassa.
Kun saat tehtävän palautettua, generoi dokumentaatio painamalla Document-linkkiä. Tutki syntyneen sivun sisältöä.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
Aliohjelman kuormittaminen on luennon perusteella hyvin selvä. Lumiukkojen tekeminen onnistui tämän tehtävän ylivoimaiseksi haasteeksi muodostui se että en löydä miten koon voi määrittää Cs kielessä...
Muista, että kuormittamisessa käytännössä tehdään useampi samaniminen aliohjelma, joilla on eri määrä parametreja (tai parametrien tyyppi on eri). Sinulla on nyt kaksi PiirraNelio-aliohjelmaa ja niillä on täysin samat parametrit (double, double).
Nyt tarvitaan siis yksi PiirraNelio, jolla on kaksi parametria (x ja y) ja yksi PiirraNelio, jolla on kolme parametria (x, y ja koko). Parametrit tulee määrittää aliohjelman määrittelyrivillä (eli rivillä, jossa on public void). Katso vielä malliksi luennon esimerkkikoodi ja kiinnitä huomio siihen, miten jokainen aliohjelma on määritelty.
Kun on koolle on oma parametri lisätty yhteen kuormitukseen, voi sitä käyttää Jypelin-olion width ja height -ominaisuuksien asettamisessa. -DZ
V1-3. Liukuhihna (2,5 p.)
Dokumentissa Liukuhihna on hauska robotti. Vastaa dokumentissa oleviin kysymyksiin. Maksimissaan voit tuolta kerätä 2.5 p.
Kirjoita alla olevaan tehtävään miltä liukuhihnatehtävä tuntui ja laita itse tehtävän pisteisiin liukuhihnan tuloksesi.
Arviointi: Käytä Set custom points -toimintoa TIMissa.
V4. Tauno (1 p.)
Tehtävä koostuu kahdesta osatehtävästä, jotka ovat kummatkin 0,5 pisteen arvoisia.
Katso käyttöohje: Tauno
V5. ViLLE (1 p.)
Tee ViLLE-tehtävät: 3.1, 3.2, 3.4, 7.1 - 7.6.
Muista: ViLLEn käyttöohje.
Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit tämän kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.
B1. Voimia ja sitominen (1 p.)
Katso lisämateriaalista Voimia ja sitominen. Tee ohjelmasta sellainen, että voit "pukkailla" keskipalloa nuoli vasemmalle ja nuoli oikealle näppäimillä. Tehtävä kannattaa tehdä integroidussa kehitysympäristössä eikä TIMissa. Kopioi tekemäsi koodi alle ja paina Aja-painiketta.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
B2. Muuttujan nimi (1 p.)
Vastaa kunkin muuttujan kohdalla perusteluiden kera seuraaviin kysymyksiin:
- Onko muuttuja määritelty syntaktisesti oikein?
- Ovatko muuttujan nimi ja tyyppi hyvin valittuja?
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
G1-2. Pienenevät portaat (2 p.)
Jatketaan Harjoitustehtävien 2 Tehtävän 4 (Portaat) edistämistä. Ota pohjaksi oma vastaus tai mallivastaus menemällä tehtävän palautuslaatikon kohdalle ja painamalla laatikon yläpuolella olevaa Näytä mallivastaus -painiketta.
Tee ohjelmasta sellainen, että se piirtää viiden laatikon sijaan n laatikkoa, vieläpä siten, että laatikot pienenevät. Tällöin i:nnen laatikon koko tulisi olla
(n + 1 - i) / n * laatikonKoko
eli esimerkiksi jos halutaan piirtää yhteensä 10 laatikkoa, niin 7:nnen laatikon koko on
(10 + 1 - 7) / 10 * laatikonKoko = 4 / 10 * laatikonKoko

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 pistettä jne.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.