Harjoitustehtävät 3

# fields

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

Avaa palautelomake klikkaamalla tästä

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.

# tehtava_muuttujat

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ä.

# tehtava_valitse_tyyppi

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.

Ohjeita ja vinkkejä tehtävän tekemiseen

# tehtava_plus_yksi

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

19 Sep 25 (edited 20 Sep 25)

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.

Ohjeita ja vinkkejä tehtävän tekemiseen

# tehtava_jaa_kahdella

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

19 Sep 25 (edited 19 Sep 25)

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:

double lampotilaC;
lampotilaC = FahrenheitToCelsius(13);

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.

# tehtava_fahrenheit_to_celsius

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.

# tehtava_mailit_kilometriksi

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.

20 Sep 25 (edited 20 Sep 25)

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ä

Tulosta muuttujien arvot. Esimerkiksi tyyliin:

int tunnissaSekunteja = 60*60;
Console.WriteLine($"Tunnissa sekunteja {tunnissaSekunteja}");

Laittamalla $-merkin lainausmerkin eteen voi tekstiin laittaa mukaan muuttujien arvoja. Muuttujat laitetaan aaltosulkeiden sisään.

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.

# tehtava_lausekkeet
# tehtava_portaat_header

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.
Lopputuloksen pitäisi näyttää tältä.
Lopputuloksen pitäisi näyttää tältä.

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.

# tehtava_portaat

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

21 Sep 25 (edited 21 Sep 25)

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.

# visu_liukuhihna

V4. Tauno (1 p.)

Tehtävä koostuu kahdesta osatehtävästä, jotka ovat kummatkin 0,5 pisteen arvoisia.

Katso käyttöohje: Tauno

# visu_tauno_summaa_parilliset_miinus_parittomat
# visu_tauno_summaa_joka_toinen

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ää.

# visu_ville

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.

# bonus_lumiukko

B2. Muuttujan nimi (1 p.)

Vastaa kunkin muuttujan kohdalla perusteluiden kera seuraaviin kysymyksiin:

  1. Onko muuttuja määritelty syntaktisesti oikein?
  2. Ovatko muuttujan nimi ja tyyppi hyvin valittuja?
int mansikanKiloHinta;
double default;
char omaNimi;
double metriMm;
double tuntejaVuorokaudessa;
real nopeus;
boolean AuringonEtäisyys;
ulong kuukaudenKeskiLampo;
int kissoja,2_kanaa,kolmeKoiraa;
int i, j, l, I;

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.

# bonus_muuttujat
# tehtava_pienenvat_portaat_header

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.

# guru_laatikot

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.