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

Tästä demosta eteenpäin ohjelmointitehtävät tehdään Visual Studiolla. 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. 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
# d3teht2

Tehtävä 2*

Lue ensin: 7. Muuttujat. 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;
# d3teht3

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.

Huom! Oletusarvoisesti konsoli-ikkuna sulkeutuu välittömästi ohjelman päätyttyä. Näin kuuluukin tapahtua. Konsoli-ikkunan saa jäämään näkyviin kun ajaa ohjelman ajamalla (Run, Ctrl-F5).

Joku voi ehdottaa myös rivin Console.ReadKey() lisäämistä pääohjelman viimeiseksi lauseeksi. Kannattaa huomata että tämä on ylimääräinen rivi, joka ei oikeastaan kuulu ohjelmaan. Sen takia tätä riviä ei saa jättää lopullisiin ohjelmiin, ja fiksumpaa onkin kirjoittaa

#if DEBUG
  Console.ReadKey();
#endif

jolloin tuota viimeistä näppäimenpainallusta jäädään odottamaan vain siinä tilanteessa että ohjelma ajetaan Debug-tilassa Visual Studiosta. Mutta siis tuo Ctrl-F5 on helpompi ratkaisu.

Tehtävä 3*

Lue ensin: 9. Aliohjelman paluuarvo.

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

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

C = (F - 32) / 1.8

Varsinainen tehtävä: Kirjoita funktio (aliohjelma joka palauttaa arvon) joka palauttaa annetun fahrenheit-lämpötilan celsiusasteina. Funktiota kutsutaan esimerkiksi seuraavasti:

double lampotilaC;
lampotilaC = FahrenheitToCelsius(13);

Paina tehtävissä olevien vastauslaatikoiden alareunassa olevaa Näytä koko koodi linkkiä, niin näet miten funktioita kutsutaan.

Huom! Saadaksesi täydet pisteet sinun täytyy tehdä seuraavat asiat:

  1. Aja koodi (0.7 p). Tämä onnistuu painamalla vastauslaatikon alla olevaa Aja-painiketta.
  2. Aja testit painamalla Test-painiketta (0.2 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.
  3. Generoi dokumentaatiosivu painamalla Document linkkiä (0.1 p). Tutki syntyneen sivun sisältöä. Dokumentaatiosivu perustuu kirjoittamiisi dokumentaatiokommentteihin ja Comtest-testeihin.

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

# d3FtoC

testi ei toimi. tulee errori:

error CS2001: Source file ‘/home/agent/LampoTest.cs’ could not be found.001 using System;



VL: sulla on väärin kun on tuo staattinen apumuuttuja!

25 Jan 20 (edited 25 Jan 20)

Tehtävä 4

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

Kirjoita funktio, 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) ja dokumentaatio on tehty.

# d3MileToKm

Testi ei toimi tässäkään. Samantapainen error kun edellisessä. Miksi?



VL: sama vika: Käytät väärin tuota apumuuttujaa. KOSKAAN EI SAISI tehdä staattisia apumuuttujia sinne funktioiden ulkopuolelle! Mistä tuon olet löytäönyt että noin voisi tehdä?

25 Jan 20 (edited 25 Jan 20)

Tehtävä 5

Lue ensin: 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;
System.Console.WriteLine("Tunnissa sekunteja {0}", tunnissaSekunteja);

{0} tarkoittaa että siihen kohtaan tulostuu pilkun jälkeisen muuttujan arvo.

# d3teht55

Tämä antaa errorin: cs0220 The operation overflows at compile time in checked mode

29 Jan 20

Katso, että et yritä tallentaa liian suuri luku muuttujaan, jonka tyyppi ei näin suuria lukuja tue. Esimerkiksihän suurin luku, joka mahtuu int-tyyppiin on 2^31-1 (katso moniste ja myös Int32.MaxValue MSDN:stä).

29 Jan 20 (edited 29 Jan 20)

En löydä tuohon kohtaan 4 sopivaa tietotyyppia, joka sallisi suuriakin lukuja kuten valovuosi kilometreinä. Kokeilin long-tyypin, mutta sekään ei auttanut.

29 Jan 20

C# oletuksena tulkitsee “literaaleja” (eli suoraan koodiin kirjoitettuja)
kokonaislukuja oletuksena int-tyyppeiksi. Vastaavasti, kun lasket kokonaislukuja, C# pyrkii pitämään laskutuloksen tyypin samana. Jos haluat sanoa C#:lle, että koodiin kirjoitettu luku pitää tulkita long-tyyppisenä, pitää luvun perään laittaa kirjain L. Eli koodiin kirjoitettu 10 tulkitaan tyypiksi int ja 10L tyypiksi long. Eli vähän kuin float-tyypin kanssa, jossa lukujen perään pitää laittaa kirjain F (esim. 1.2f).

Samalla voi miettiä, löytyykö parempaa tyyppiä kuin long. Kyllä C#:ssa voi tallentaa suurempia lukuja kuin 2^64-1 ilman lisätemppuja, mutta ei enää kokonaislukuna… -DZ

29 Jan 20 (edited 31 Jan 20)

Literaali on minkä tahansa tietotyypin arvon esitys ohjelmointikielessä, ei pelkästään kokonaisluvun. Merkkijonot, taulukot, yms. voidaan alustaa literaalilla alkuarvoonsa. -ji

06 Feb 20

Jypeli-tehtävät

Nämä tehtävät tehdään Visual Studion Jypeli-kirjastolla. Avaa Visual Studio, aloita uusi projekti ja valitse C# \(\rightarrow\) Jypeli (Windows) \(\rightarrow\) FysiikkaPeli. Macilla valitse PhysicsGame Physics2D.NET. Nimeä 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.

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ä
  • Kaksi jälkimmäistä kutsua toimivat kuten Portaat-tehtävässä, mutta viimeisellä argumentilla ilmaistaan neliön koko.

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)

Portaat.cs -tiedoston linkki palauttaa virheen 404

27 Jan 20

Kiitos, nyt korjattu! /AJL

27 Jan 20

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

Image
Image
# d3teht6

onko normaalia että Document-osio ei näytä dokumentaatiokommentteja, ja “source code”:ssa näkyvät punaisella?

30 Jan 20

Peliluokkaa ei ole tässä pohjassa itse asiassa dokumentoitu, johtuu käytettävästä “geneerisestä” pohjatiedostosta. Sun itse tekemäsi dokumentaatiot kyllä minusta näkyvät ihan OK. -AJL

30 Jan 20

Muut tehtävät

# liuku

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

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

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

# d3bonus1

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.