The referenced paragraph does not exist.

Demo 3

# fields

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 6.2. klo 11:59 mennessä.

Viimeistään tästä demosta eteenpäin ohjelmointitehtävät tehdään graafisessa kehitysympäristössä.

Osaathan luoda solutionin ja projektin sekä lisätä uuden projektin olemassa olevaan solutioniin? Kertaa tarvittaessa ohjeet (linkki päivitetty 30.1.). 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.

# d3tunnit

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.

# d3Muuttujat1

Tehtävä 2*

Tehtävä lisätty 30.1. klo 16:25. Jos jo teit aikaisemman tähtitehtävän (nyt se on tehtävänä B2), ei tätä tehtävää ole pakko tehdä.

Valitse sopiva tyyppi kullekin seuraavista tiedoista. Mahdollista yksikköä (esim. EUR / kg) ei tarvitse huomioida.

Voit antaa kysymykseen vastauksen vain kerran.

# d3t2

Tämä tuntuisi minusta kyllä loogisimmalta kuvata int siten, että esim. 1=avattu, 2=suljettu, 3=sulkeutumassa ja 4=avautumassa, kunhan asian vaan kommentoi koodiin näkyville.

Hyvä havainto. Tuollainen järjestely on itse asiassa ns. enumeraatioiden taustalla (joita ei varsinaisesti käsitellä tällä kurssilla). Lisäsin myös int-luvun oikeaksi vaihtoehdoksi. -AJL

VL: Itse asiassa nuo kannattaisi numeroida melkein:

  • 0: suljettu
  • 1: sulkeutumassa
  • 2: avautumassa
  • 3: avattu

Peruste: Silloin voisi siirtyä "tilasta toiseen" niin, että avautuessa olisi tila = Min(tila+2, 3); ja suljettaessa olisi tila=Max(tila-2,0).

31 Jan 23 (edited 31 Jan 23)

Voisihan autotallin oven tila olla jopa niinkin, että 0 = kiinni, 1 = auki ja sulkeutumisen vaihetta seurattaisiin vaikka sekunnin välein desimaalilukuna välillä (0, 1), jolloin myös double kävisi vastausvaihtoehdoksi. Right?

Jos tutkittaisiin autotallin oven etäisyyttä vaikkapa lattian tasosta, niin silloin kyllä. (Tosin en ole varma millä ihmevekottimella sellainen saataisiin mitattua.) Tässä kohdassa oli kuitenkin annettu neljä tilaa, joten double ei ole tähän luontevin valinta. -AJL

VL: Noissa on koneisto joka vaijerilla tms nostaa/kääntää ovea. Voisi mitata kierroksia sieltä joka kelaa sitä vaijeria tai kulma-anturilla sitä missä kulmassa ovi on. Tai ylöspäin aukeavassa ovessa G-mittarilla asentoa. 50e kännykkä oveen kiinni ja se lähettää asentoaan kotiautomaatioon. Etäisyyttä voi mitata vaikka lego-robottisarjan ultaäänianturilla.

01 Feb 23 (edited 01 Feb 23)

Miksei auton nopeus voisi olla int? Jos ajattelee nopeusmittaria autossa, siinä ei taida kovinkaan usein desimaaleja olla?

Varmaan digitaalinen näyttö tuollainen voisi ollakin. Tässä kysymys oli auton nopeudesta, ei näytön lukemasta. -AJL

03 Feb 23 (edited 04 Feb 23)

Console Application -tehtävät

Tässä yleisiä ohjeita konsolisovellusten tekemiseen jatkossa. Avaa JetBrains Rider, luo uusi solution ja valitse Jypeli -> ConsoleMain. Nimeä solution kuvaavasti, esimerkiksi tähän demokertaan sopiva solutionin nimi voisi olla Demo3, ja projektin nimi Muunnos tai Teht3-Muunnos. Muista, että solutionin ja projektin nimi alkaa aina suuraakkosella.

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:

  1. Aja koodi (0.25 p). Tämä onnistuu painamalla vastauslaatikon alla olevaa Aja-painiketta.
  2. 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 Riderissa, 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 Riderissa, vaikka niitä ei nyt näihin vastauslaatikoihin laitetakaan.

Tehtävä 3a* (0.5 p.)

TODO: Oikein-teksti puuttuu tulosteesta.

Lue ensin: 9. Aliohjelman paluuarvo.

(Jos sinulla on ongelmia funktioiden laatimisen kanssa, kokeile tehdä harjoittelutehtävä 3.4.)

Tehtävä: Tee funktio nimeltä PlusYksi, joka ottaa parametrina yhden kokonaisluvun, ja palauttaa aina yhtä suuremman luvun. Huomaa, että palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia.

Arviointi: Koodin ajamisesta max 0.25 p., onnistuneesti ajetuista testeistä 0.25 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.

# d3PlusYksi

Luulin, että oon tehnyt ihan oikein, mutta en saa pistettä :( Mitäköhän puuttuu?

Tehtävässä palautetaan vain funktio. Muuta koodia (class sekä Main) ei palauteta. -AJL

01 Feb 23 (edited 01 Feb 23)

Mitäköhän nyt pielessä...otin classin ja Mainit pois

Funktio alkaa sanoilla public static. Sitä ennen palautuslaatikossa ei saa olla muuta koodia. (Dokumentaatiota ja mahdollisia testejä saa kyllä olla.) -AJL

01 Feb 23 (edited 01 Feb 23)

miksi antaa vain 0.25p vaikka pitäisi kaiken olla kunnossa?

Aja testit painamalla Test-painiketta (0.25 p.). -AJL

05 Feb 23 (edited 05 Feb 23)

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. Huomaa, että palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia.

Vinkki: Muista int-kokonaislukujen jakamiseen liittyvä erikoisuus, ks. M. 7.8.1.

# d3Jako

Tehtävä 4a (0.5 p.)

Fahrenheit-asteet (F) muunnetaan celsius-asteiksi (C) seuraavalla kaavalla.

C = (F - 32) / 1.8

Tehtävä: 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.

# d3FtoC

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

# d3MileToKm

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:

TODO: Tulostus $"" tyylillä

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.

# d3Lausekkeet

Jypeli-tehtävät

Nämä tehtävät tehdään Riderin Jypeli-kirjastolla. Tee FysiikkaPeli. Anna solutionin nimeksi esimerkiksi Portaat, jolloin Rider luo automaattisesti Portaat-luokan. Kirjoita koodisi tähän luokkaan. Huomaa, että Riderin luo automaattisesti myös Ohjelma.cs-tiedoston, jota sinun ei tarvitse eikä pidä muokata.

Tehtävä 6

Lue ensin: 6.5 Aliohjelman kuormittaminen (function overload), ja katso esimerkkikoodi. Lyhyesti: Kuormittamisella tarkoitetaan sitä, että ohjelmassa on useita samannimisiä aliohjelmia, mutta niillä on eri määrä (tai eri tyyppiset) parametreja.

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ä.
  • 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. (0.9 p.)

Generoi dokumentaatiosivu painamalla Document-linkkiä. Tutki syntyneen sivun sisältöä. Dokumentaatiosivu perustuu kirjoittamiisi dokumentaatiokommentteihin. (0.1 p)

Lopputuloksen pitäisi näyttää tältä.
Lopputuloksen pitäisi näyttää tältä.

Onko tämä nyt niin, kun nuo aliohjelman kuormittamisella tehdyt neliöt ovat erikokoiset, että ohjelma täytyy rakentaa niin, että vaikka noista kahdesta neliöstä tehdään erikokoiset, niin ne ovat silti kiinni kulmistaan?

Kyllä, kuviosta täytyy tulla samanlainen kuin mallikuvassa. -AJL

01 Feb 23 (edited 01 Feb 23)

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.

# d3Portaat

Muut tehtävät

# liuku

L1. Liukuhihna

Dokumentissa Liukuhihna on hauska robotti. (TODO opettajille: Korjaa vuosilinkitys jatkossa.) 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ä!

# liukuhihna

Tauno 1 a (0.5 p)

Taunon käyttöohjeita

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ä! 🍓

# summaparilisetmiinusparittomat

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.


# summaajokotoinen

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

# VilleV1

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

# villev1

B1

Katso syksyn materiaalista 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.

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.

# d3bonus1

B2

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.

# d3Muuttujat2

Tästä editorista kommentti: kun kirjoittaa tekstiä joka menee seuraavalle riville, menee fokus väärään kohtaan kesken sanan. Voisiko asialle tehdä jotain? On tosi ärsyttävää :)

31 Jan 23

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

# d3guru12

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