The referenced paragraph does not exist.
The referenced paragraph does not exist.

Demo 3

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 Visual Studiota, MonoGamea tai Jypeliä (tai Xamarin/MonoDevelopia).

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

Set Custom Points -toiminto ei ole käytössä?

  • VL: nyt on, mutta pitää miettiä miksei se antaisi pisteitä automaattisesti?
28 Jan 18 (edited 23 Sep 18)
# tesla

Videokuvan käyttö plagiaatintunnistuksessa* (TESLA-kehittämishanke) (1 p.)

Tämä tehtävä ei liity varsinaisesti ohjelmointiin vaan saatte olla testaamassa videokuvaan perustuvaa plagiaatintunnistusjärjestelmää. Jos sinulla ei ole web-kameraa, niin Sovjet ja Finland -luokissa on viisi kameraa kummassakin tällä viikolla keskiviikosta perjantaihin.

Tehtävä on yksi tämän viikon tähtitehtävistä, mutta mikäli et kertakaikkiaan halua osallistua tähän tutkimukseen, niin voit jättää tämän tehtävän tekemättä ja tehdä jonkin muun ei-tähtitehtävän tämän tilalla.

Tämä tehtävä ja sen ohjeet ovat Moodle-järjestelmässä. Järjestelmään kirjaudutaan Jyväskylän yliopiston tunnuksilla.

Tehtävässä täytetään esikysely, annetaan lyhyt videonäyte (referenssinäyte) kasvoista, ja sitten tehdään varsinainen kirjoitustehtävä (mielipiteitä videokuvan käytöstä plagiaatintunnistuksessa). Kirjoitustehtävän yhteydessä annetaan myös videonäyte jota verrataan referenssinäytteeseen ja tällä tavalla sitten tutkitaan onko oikea henkilö tehnyt tehtävän. Lopuksi on loppukysely. Alku- ja loppukyselyn osallistuvat myös iPadin arvontaan.

Voit yrittää huijata videonäyte-järjestelmää, eli jollain tavalla yrittää "vakuuttaa" että sinä olet tekemässä tehtävää, vaikka tosiasiassa et olisikaan. Keksi itse miten tätä systeemiä voisi huijata. Systeemiä ollaan kehittämässä, joten kaikenlainen palaute on arvokasta.

Mikäli yrität huijata, niin kirjoita Moodle-tehtävään yksityiskohtaisesti se miten toteutit huijauksesi, ja copy-pasteta ko. teksti sitten alla olevaan TIM-palautuslaatikkoon. Valitettavasti opiskelija ei tässä vaiheessa saa tietoa siitä että menikö huijaus "läpi", mutta minä saan jossain vaiheessa keväällä raportin josta tämä toivottavasti myöhemmin selviää. Forwardoin sen sitten kaikille, jotka tekivät tämän tehtävän.

Tehtävän palautuksena kirjoita "Tein Tesla-tehtävän" (ja mahdollisesti kuvailuteksti huijausyrityksestäsi) ja laita itsellesi 1 piste Set custom points -toiminnolla.

# teslaPlugin

Sanalliset tehtävät

Tehtävä 1

M: 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*

M: 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 (tai C# \(\rightarrow\) Console application jos et ole asentanut Jypeliä). Nimeä projektisi esimerkiksi Muunnos, ja 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*

M: 9. Aliohjelman paluuarvo. Fahrenheit-asteet (\(F\)) muunnetaan celsius-asteiksi (\(C\)) seuraavalla kaavalla.

\(C = (F − 32) / 1,8\)

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. Tee testit (0.2 p), jotka varmistavat, että funktio toimii annetuilla testisyötteillä. Testit voi ajaa painamalla Test-painiketta.
  3. Generoi dokumentaatio (0.1 p). Tämän voi tehdä painamalla vastauslaatikon alareunassa olevaa Document linkkiä.

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

Olenko ainut joka saa ohjelman toimimaan vain vaihtamalla tulostuslauseessa tempF :n lampotilaF :ään

22 Jan 18 (edited 22 Jan 18)

olemassa oleva koodi virheellinen, koska tempF ei ole määritelty

23 Jan 18

sama ongelma, tempF pitää vaihtaa lampotilaF

23 Jan 18

Miten päin tässä oikein halutaan muunnos? Tehtävän kuvaus ja ohjelmakoodi ristiriitaisia.

24 Jan 18

Tehtävänanto korjattu.

26 Jan 18 (edited 26 Jan 18)

Miksi ohjelma toimii (mielestäni) samalla tavalla laitettuna tehtävän 5 vastauslaatikossa kokeiltuna, mutta tässä ei, ja tämän vastauslaatikossa myös rivien tekstien sijoitukset muuttuvat, kun yrität ajaa testin. Kokeiltu nyt tehtävässä 5 ja saatu oikeat tulokset ja ohjelma toimimaan.

28 Jan 18

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

/MatkatTest.cs ei löydy

23 Jan 18

Täälläkin on tuon koodin kanssa ongelma koska ml ei ole määritelty Main ohjelmassa

23 Jan 18

Antaa 0.9 pistettä, vaikka ajo ja test ovat ok. Saavatko muut yhden pisteen?

26 Jan 18 (edited 27 Jan 18)

0.1p saa kun generoi dokumentaation (painaa 'document' linkkiä)

28 Jan 18

Tehtävä 5

M: 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

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 PysicsGame Physics2D.NET. Nimeä projektisi esimerkiksi Porras, jolloin Visual Studio luo automaattisesti Porras.cs 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

Tehtävän ohjeita tarkennettu pe 27.1. klo 9:20.

Lue aliohjelman kuormittamisesta (function overload), ja katso esimerkkikoodi.

M: 6. Aliohjelmat (Kuormittaminen). 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.

Kuormittamisella siis tarkoitetaan sitä, että ohjelmassa on useita samannimisiä aliohjelmia, mutta niillä on eri määrä (tai eri tyyppiset) parametrit. HUOM! Aliohjelmissa ei saa olla toistoa!

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

Image
Image

Saan jostain syystä tehtävästä vain 0.9 pistettä, vaikka mielestäni tein tehtävän täysin oikein. #-

-

Lisäys: Dokumentoinnista sainkin sen puuttuvan 0.1...

28 Jan 18 (edited 28 Jan 18)
# d3teht6

Muut tehtävät

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

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.