Demo 3
Huomautus: Lopulliset demotehtävät julkaistaan aina tasan viikkoa ennen deadlinea. Demotehtäviin saattaa ennen sitä tulla muutoksia tai korjauksia. Tehtäviä voi tulla lisää tai tehtäviä voi poistua. Tehdessäsi tehtäviä ennen virallista julkaisua, ota tekemästäsi koodista aina varmuuskopio omalle tietokoneellesi.
Palauta ma 1.2. klo 11:59 mennessä.
Tästä demosta eteenpäin ohjelmointitehtävät tehdään Visual Studiolla. Osaathan luoda solutionin ja projektin sekä lisätä uuden projektin olemassa olevaan solutioniin? Kertaa tarvittaessa ohjeet Windowsille ja macOS:lle. Pyydä apua jos et ole vielä tähän mennessä saanut asennettua kurssin työkaluja.
Huomio ohjauksissa kävijät: Ota ohjauksiin aina kynä ja paperia!
Osaamistavoitteet
Tämän demokerran 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
Ajankäyttösi tällä viikolla (0.5 p.)
Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.
Demokerran päätteeksi kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla (kalenteriviikko, ma klo 00:00 -- su klo 23:59) käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit.
Sanalliset tehtävät
Tehtävä 1
Lue ensin: 7. Muuttujat.
Tehtävä: Miten esittelisit (tyyppi ja nimi) muuttujat seuraavia tilanteita varten. Anna myös esimerkki miten sijoittaisit muuttujalle jonkin arvon.
a) Työmatkan pituus polkupyörällä
b) Suoritettujen opintopisteiden määrä
c) Koko tutkinnon laajuus opintopisteissä
d) Tehtyjen demojen 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. 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.
voiko muuttujan nimeen laittaa numeroita sanojen sekaan?
Kyllä voi, jos lopputulos pysyy luettavana. Esim pelaaja1
ja pelaaja2
ovat ihan ok, mutta muuttuja1
, muuttuja2
ei ole mielekästä koska niiden merkitys ei tule ilmi. -JuhoK
Tehtävä 2*
(TODO Opettajille: Muuta ID jatkossa.)
Lue ensin: 7. Muuttujat.
Tehtävä: Vastaa kunkin muuttujan kohdalla perusteluiden kera seuraaviin kysymyksiin: (1) Onko muuttuja määritelty syntaktisesti oikein? (2) Ovatko muuttujan nimi tai tyyppi hyvin valittu?
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. 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.
Console Application -tehtävät
Tässä yleisiä ohjeita konsolisovellusten tekemiseen jatkossa. Avaa Visual Studio, aloita uusi projekti ja valitse C# \(\rightarrow\) Jypeli \(\rightarrow\) ConsoleMain
(.NET Core) (tai C# \(\rightarrow\) Console application jos et ole asentanut Jypeliä). Nimeä projektisi kuvaavasti, esimerkiksi tehtävään 3 sopiva projektin nimi voisi olla Muunnos
. Nimeä myös luokan nimeksi Muunnos.cs
, jos Visual Studio ei sitä automaattisesti nimeä. Kirjoita ohjelmakoodisi Muunnos.cs
-luokkaan.
Paina tehtävissä olevien vastauslaatikoiden alareunassa olevaa Näytä koko koodi
linkkiä, niin näet miten funktiota kutsutaan.
Huom! Saadaksesi täydet pisteet tehtävissä 3-4 sinun täytyy tehdä seuraavat asiat:
- Aja koodi (0.25 p). Tämä onnistuu painamalla vastauslaatikon alla olevaa
Aja
-painiketta. - Aja testit painamalla
Test
-painiketta (0.25 p.). Testien tehtävänä on varmistaa, että funktio antaa oikean paluuarvon kullakin annetulla testisyötteellä. Tässä tehtävässä testit on siis kirjoitettu valmiiksi, mutta jatkoa varten Comtest-testien kirjoittamiseen itse löydät mallia monisteesta.
Jos/kun teet tehtävän Visual Studiossa, niin kopioi vastauslaatikkoon vain funktion esittelyrivi ja toteutus. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana. Vaatimus ja oletus on kuitenkin, että kirjoitat itse dokumentaatiot Visual Studiossa, vaikka niitä ei nyt näihin vastauslaatikoihin laitetakaan.
Tehtävä 3a* (0.5 p.)
Lue ensin: 9. Aliohjelman paluuarvo.
(Jos sinulla on ongelmia funktioiden laatimisen kanssa, kokeile tehdä harjoittelutehtävä 3.4.)
Tee funktio nimeltä PlusYksi
, joka ottaa parametrina yhden kokonaisluvun, ja palauttaa aina yhtä suuremman luvun.
Arviointi: Koodin ajamisesta max 0.25 p., onnistuneesti ajetuista testeistä 0.25 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Tehtävä 3b* (0.5 p.)
Tee funktio JaaKahdella
joka ottaa parametrina int
-tyyppisen kokonaisluvun ja palauttaa kyseisen luvun jaettuna kahdella.
Arviointi: Koodin ajamisesta max 0.25 p., onnistuneesti ajetuista testeistä 0.25 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
Vinkki: Muista int
-kokonaislukujen jakamiseen liittyvä erikoisuus, ks. M. 7.8.1.
Tehtävä 4a (0.5 p.)
Fahrenheit-asteet (\(F\)) muunnetaan celsius-asteiksi (\(C\)) seuraavalla kaavalla.
C = (F - 32) / 1.8
Tehtävä: Kirjoita funktio (aliohjelma joka palauttaa arvon) 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.
Ilmeisesti näihinkään ei vielä pääse lisäämään dokumentaatiokommentteja kuin vain tyo pieni laatikko avoinna koodinpätkälle?
VL: Eikös tuon laatikon koko kasva sitä mukaa kun kirjoittaa?
Selvensin tehtävänantoa hieman. Dokumentaatiokommentit ovat tehtävissä 3-4 tosiaan valmiina, mutta kyllä ne kuuluu Visual Studiossa itse omatoimisesti kirjoittaa. -AJL
Ok! Tämä selvensi asiaa, olenkin ne sinne tehnyt.
—Tehtävä 4b (0.5 p.)
(Jos sinulla on ongelmia funktioiden laatimisen kanssa, kokeile tehdä harjoittelutehtävä 3.4.)
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).
TODO: Funktioiden kieli yhtenäiseksi (englanti, suomi)
Tehtävä 5
Lue ensin: 7.7 Operaattorit (ja aritmeettiset lausekkeet).
Tehtävä: 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;
System.Console.WriteLine("Tunnissa sekunteja {0}", tunnissaSekunteja);
{0}
tarkoittaa että siihen kohtaan tulostuu pilkun jälkeisen muuttujan arvo.
Arviointi: Käytä Set custom points -toimintoa. 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.
Tässä ei suostu kirjoittamaan tuloksia, antaa kommentin "‘Console’ does not contain a definition for ‘Writeline’
Pitää paikkansa, koska Writeline-nimistä aliohjelmaa ei ole olemassa Console-luokassa. Tarkista isot ja pienet kirjaimet tehtävän ohjeesta. -JuhoK
—Jypeli-tehtävät
Nämä tehtävät tehdään Visual Studion Jypeli-kirjastolla. Tee FysiikkaPeli (Farseer). Anna projektisi esimerkiksi Portaat
, jolloin Visual Studio luo automaattisesti Portaat
-luokan. Kirjoita koodisi tähän luokkaan. Huomaa, että Visual Studio luo automaattisesti myös Ohjelma.cs
-tiedoston, jota sinun ei tarvitse eikä pidä muokata.
Miksi Visual Studioni ei osaa ajaa koodia, joka toimii TIMisssä? Herjaa että ‘kansio6.exe’ specified in Tehtävä6 debug profile does not exist.
—Tehtävä 6
Lue ensin: 6.5 Aliohjelman kuormittaminen (function overload), ja katso esimerkkikoodi. Lyhyesti: Kuormittamisella siis tarkoitetaan sitä, että ohjelmassa on useita samannimisiä aliohjelmia, mutta niillä on eri määrä (tai eri tyyppiset) parametrit.
Tehtävä: Ota Demo 2:n Portaat-esimerkki ja liitä koodi luomaasi luokkaan. 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ä. (TODO opettajille: Muuta tätä, tarkoitus on tehdä kuormittamisen kautta.)
- 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! (0.9 p.)
Generoi dokumentaatiosivu painamalla Document
linkkiä. Tutki syntyneen sivun sisältöä. Dokumentaatiosivu perustuu kirjoittamiisi dokumentaatiokommentteihin. (0.1 p)
Demo 2: Portaat-esimerkki linkistä tulee vain ilmoitus ettei sivua löydy?
Näkyykö nyt? -AJL
—Mitä tarkoittaa, että aliohjelmissa ei saa olla toistoa?
Katso linkattu esimerkkikoodi. Jos molemmissa PiirraLumiukko
-aliohjelmissa olisi sama koodi vain hieman muuteltuna, niin silloin olisi toistoa. -JuhoK
Arviointi: Käytä Set custom points -toimintoa. 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.
Koodini toimii Visual Studiossa, mutta Timissa tulee tyhjä laatikko. Ilmeisesti johtuu siitä, että luokka on jo valmiina laatikossa ja sitä ei saa poistettua?
Luokka on tosiaan pohjassa valmiina (klikkaa Näytä koko koodi -linkkkiä). Ota TIM-vastauksestasi luokkamäärittely pois. -AJL
—Muut tehtävät
L1. Liukuhihna
Dokumentissa Liukuhihna on hauska robotti. Vastaa siellä 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.
Huom!. Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!
Tauno 1 a (0.5 p)
Kunkin Tauno-tehtävän aluksi klikkaa Click here to show Tauno
-linkkiä.
Taunossa raahaa taulukon alkioita niin, että sinulla on lopuksi tehtävässä pyydetty lopputulos. Katso samalla minkälaista koodia Tauno sinulle generoi. Tämä on C#-kielinen algoritmi tehtävän suorittamiseksi. Jos haluat aloittaa Tauno-tehtävän alusta, piilota ja näytä Tauno uudelleen.
Raahaamisen sijaan (ja joissakin mobiileissa ei muuten voi tehdäkkään) voit myös tökätä ensin lähdealkiota ja sitten kohdealkiota.
Jos tarvitset apumuuttujia, joihin voit viedä alkioita tilapäiseen "säilöön", paina uusi muuttuja
-painiketta. Keksi muuttujalle kuvaava nimi. Muuttujalle voit antaa alkuarvon, mutta tämä ei ole pakollista jos olet heti aikeissa raahata siihen jonkin toisen muuttujan arvon talteen.
Laskutoimituksia voit tehdä raahaamalla arvoja vasemmassa alakulmassa olevaan laskualueeseen ja valitsemalla arvojen välistä minkä laskutoimituksen haluat tehdä. Laskun tuloksen voit sitten raahata takaisin johonkin muuttujaan (siis myös taulukon alkioksi).
Muuttujan arvoa voit lisätä/vähentää yhdellä vetämällä ++
tai --
-operaattorin muuttujan arvon päälle.
Kun olet saanut Taunolla ohjelman mielestäsi valmiiksi, voit painaa Aja
tai Test
-painikkeita nähdäksesi miten ohjelma toimii. Molemmissa tapauksissa Taunon tekemä ohjelmakoodi kopioidaan ohjelma-alueeseen ja ajetaan. Ajossa voidaan käyttää eri taulukkoakin kuin mitä Taunossa käytettiin, mutta hyvä "algortimi" selviää tästäkin. Jos testissä saat punaista, lue huolella virheilmoitus ja mieti mikä meni pieleen.
Halutessasi voit aloittaa Taunolla alusta tai sitten jos osaat, voit korjata suoraan ohjelma-alueeseen kopioitua koodia. Demotehtävän vastaukseksi riittää että Aja-napin yläpuolella on sama koodi kuin Taunon koodialueessa.
Näytä koko koodi
-linkistä voit katsoa minkälaisilla arvoilla ohjelma ajetaan tai minkälaisilla arvoilla testataan. Tästä kokonaisuudesta ei kurssin aluksi tarvitse vielä ymmärtää kaikkea. Voit tietysti yrittää "arvailla" mistä on kyse.
Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.
Lisää aluksi Taunossa tulos
-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee tulos
-muuttujaan parillisissa paikoissa olevien lukujen summa miinus parittomissa paikoissa olevien summa. Tässä kaikille tekijöille mansikka, olkaapa hyvä! 🍓
Tauno 1 b (0.5 p)
Lisää aluksi Taunossa tulos
-niminen muuttuja aloitusarvolla 0 ja tee sitten Taunolla ohjelma, joka laskee yhteen taulukon luvut niin, että summa (ensimmäinen - viimeinen) + (toinen - toiseksi viimeinen) + jne... on lopuksi tulos
-nimisessä muuttujassa.
Esimerkiksi taulukolla 5, 4, 6, 2, 9, 1 tulos olisi (5-1) + (4-9) + (6-2) = 3.
Ville 1
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ää.
Viime viikon villet
(Ne, jotka eivät viime viikolla saaneet tätä tehtyä kirjautumisongelmien vuoksi, voivat tehdä sen nyt. Jos teit nämä jo viime viikolla, et voi kirjata itsellesi uudestaan pisteitä. )
Tee Villestä tehtävät 2.2-2.6 ja 6.1-6.4. Muodollinen parametri on "turkulaisten kielessä" aliohjelman esittelyrivillä oleva muuttujan nimi (meillä tästä käytetään nimeä parametri), ja ''todellinen parametri'' sille kutsussa sijoitettu arvo (meillä argumentti).
Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.
B1
Katso Voimia ja sitominen. Tee ohjelmasta sellainen, että voit "pukkailla" keskipalloa nuoli vasemmalle ja nuoli oikealle näppäimillä. Tehtävä kannattaa tehdä Visual Studiolla. Kopioi tekemäsi koodi alle ja paina aja-nappia.
G1-2
Jatketaan demo 2:n laatikkotehtävää. 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 = 4 / 10 * laatikonKoko
Tehtävässä saa 0.1 pistettä dokumentaation luomisesta, kun olet tehnyt funktion valmiiksi. Dokumentaatio luodaan painamalla document-linkkiä.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.