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

Demo 4

Palauta ma klo 11:59 mennessä.

Osaamistavoitteet

Tämän demokerran päätteeksi

  • ymmärrät, miten ehtolausetta voidaan käyttää
  • osaat lukea käyttäjän syötettä (näppäimistöltä) ja käyttää merkkijonomuuttujia (String)
  • osaat käyttää ohjelmassasi useita aliohjelmia ja funktioita
  • osaat tehdä jo pienen pelin (Pong)

Ajankäyttösi tällä viikolla

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

# tunnit

Huomautus tehtävien pisteytyksistä

Jokaisella opiskelijalla on oikeus ja velvollisuus arvioida itse omien pisteidensä oikeellisuus. Mikäli ohjelmasi ei toimi, niin aseta itsellesi Custom pointsit itsearviosi mukaisesti, esim. mikäli ajattelet että olet saavuttanut 50% tehtävän tavoitteista niin silloin laitat itsellesi enintään 0.5 pistettä. Vastaavasti, jos arvioit että tehtäväsi on 90%:sti oikein, mutta automaattinen arviointi antaa sinulle jostain syystä vähemmän pisteitä, aseta itsellesi 0.9 pistettä.

Jypeli-tehtävät

Tehtävä 1*

Tee Pong-tutoriaalin vaiheet vaiheet 1-7. (Voit skipata vaiheet 1-3 jos teit ne jo ohjauksissa.) Kirjoita 100 sanan mittainen oppimispäiväkirja, jossa kerrot, mitä opit, mikä oli helppoa ja mikä vaikeaa, sekä mikä oli uutta. Kirjoita myös, oliko tästä tehtävästä sinulle hyötyä. Voit antaa myös palautetta tutoriaalin sisällöstä, ja miten sitä voisi kehittää.

Älä jää liikaa suremaan hieman omituista fysiikan käytöstä joissakin pompuissa. :-)

# demo4teht1

Tekstipohjaiset tehtävät

Seuraavat tehtävät ovat tekstipohjaisia. Käytä Jypelin mukana tulevaa ConsoleMain-projektimallia tai Console Application -projektimallia.

Tehtävä 2

Lue seuraavat dokumentaatiot ja aliohjelmien esittelyt. Jokaisessa niissä on jotain outoa. Parannettavaa voi olla (mutta ei välttämättä ole) paluuarvon tyypissä, funktion nimessä, parametrien määrässä ja niiden nimissä tai tyypeissä, tai itse dokumentaatiokommenteissa. Myös kokonaisia sanoja voi puuttua esittelyriviltä tai dokumentaatiosta.

Kirjoita vastaus, jossa kerrot, mitä korjattavaa löysit. Huomaa, että aliohjelmien toteutusta ei tässä arvioida eikä edes näytetä. Tee tulkintasi dokumentaation ja esittelyrivin perusteella.

Täysiä pisteitä varten jokaisesta kohdasta pitäisi löytyä vähintään kaksi korjattavaa asiaa.

A. Itseisarvo

/// <summary> Funktio palauttaa annetun luvun itseisarvon. </summary>
/// <param name="luku"> Luku, josta itseisarvo halutaan ottaa. </param>
/// <returns> Luvun itseisarvo. </returns>
public static int palautaitseisarvo(double luku)
{
  ...
}
# demo4teht2a

B. Lyhempi sana

/// <summary> Funktio palauttaa kahdesta sanasta lyhyemmän. 
/// Sanojen ollessa yhtä pitkiä palautetaan ensimmäinen. </summary>
/// <param name="sana1"> Ensimmäinen sana. </param>
/// <param name="sana2"> Toinen sana. </param>
/// <returns> Lyhyempi sana. </returns>
void String LyhyempiKahdestaSanasta(char sana1 char sana2)
{
  ...
}
# demo4teht2b

C. Palindromi

/// <summary> Funktio kertoo, onko sana palindromi. </summary>
/// <param name="sana"> Tutkittava sana. </param>
/// <returns> Onko palindromi. </returns>
public static String Palindromi(bool)
{
  ...
}
# demo4teht2c

Tehtävä 3*

M: 12. Merkkijonot, 13. Ehtolauseet.

Alla on valmiiksi annettu pääohjelma. Täydennä siihen luokka nimeltä PidempiSana.

Toteuta PidempiMerkkijono-funktio, joka palauttaa kahdesta annetusta merkkijonosta pidemmän. Jonojen ollessa yhtä pitkiä palautetaan ensimmäisenä parametrina annettu jono.

Huomaa! TIMissä ei toimi konsolilta lukeminen, eli joudut kokeilemaan tehtävän toimivuutta Visual Studiossa tai Xamarinissa.

public static void Main(string[] args) 
{
  Console.Write("Anna 1. sana >");
  String sana1 = Console.ReadLine();
  Console.Write("Anna 2. sana >");
  String sana2 = Console.ReadLine();
  String pidempi = PidempiMerkkijono(sana1, sana2);
  Console.WriteLine("\"" + pidempi + "\" on pidempi sana");
  Console.ReadKey();
}

Muista että ensin teet funktion esittelyrivin (sen missä on public static jne...). Sitten kirjoita funktion dokumentaatio (kolme kauttaviivaa /// ja täydennä summary ja parametrien merkitys). Lisätietoa Wiki-sivulta aliohjelmien kirjoittamisesta. Aluksi itse funktion sisältö (eli runko-osa) voi olla pelkästään

return "testi";

Xamarinissa en saa ComTestiä toimimaan. Katsoin ohjeita: https://trac.cc.jyu.fi/projects/comtest/wiki/xamarin mutta en saanut ladattua lisäosaa kohdassa 1.2. virheviestien takia. Virheviestejä ei voinut jättää huomioimatta. Tehtävästä TDD1 huomasin ettei comtest toimi xamarinissa. Jotta minulla on sama mahdollisuus kerätä pisteitä, katson että testit menevät läpi Timissä

05 Feb 17 (edited 05 Feb 17)

Sitten kokeilet, että ohjelma kääntyy ja kyselee ja tulostaa tuollaisenaan. Kun se toimii, voit alkaa muuttamaan funktion sisältöä niin, että funktio tekee sen, mitä pitääkin.

TDD:n (engl. Test Driven Development) tyyliin kuuluu, että ennen funktion toteutusta kirjoitetaan testit ja kokeillaan, että testit epäonnistuvat. Sitten vasta toteutat funktion ja ajat testit, korjaat funktiota jos testit eivät toimi jne. Tätä funktiota varten testit voisivat olla esim:

///  PidempiSana.PidempiMerkkijono("Eka sana", "toka") === "Eka sana";
///  PidempiSana.PidempiMerkkijono("Eka", "Toka") === "Toka";
///  PidempiSana.PidempiMerkkijono("Eka", "Tok") === "Eka";
///  PidempiSana.PidempiMerkkijono("", "Toka") === "Toka";
///  PidempiSana.PidempiMerkkijono("", "") === "";

Kun olet tehnyt tehtävän, niin kopioi funktio esittelyriveineen tuohon alapuolelle

Tehtävässä saa koodin ajamisesta 0.4 p., testien läpäisemisestä 0.5 p. ja dokumentaation tarkastelusta 0.1 p.

# demo4teht3

Ehto, että sanojen ollessa yhtäsuuria täytyy palauttaa ensimmäinen sana, oli aika piilossa dokumentaatiossa.

02 Feb 17

Mistä nämä dokumentaatiot löytää? Täältäkö: https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx

05 Feb 17

Tehtävä 4

M: 12. Merkkijonot.

Tee Console-ohjelma, joka toimisi seuraavasti

Toistan mitä sanot, mutta en osaa sanoa l:ää!
Anna teksti  >ralliauto ajaa superkovaa.
Sanoit siis : lalliauto ajaa supelkovaa.

Vinkki: katso String-luokan dokumenttia ja etsi metodi jolla voit vaihtaa kaikki kirjaimen esiintymät toiseksi kirjaimeksi. Katso edellisen tehtävän pääohjelmasta miten syötettä luetaan käyttäjän näppäimistöltä. Tässä tehtävässä ei välttämättä tarvitse itse kirjoittaa yhtään aliohjelmaa, tosin tulevia demoja ajatellen apufunktiosta ei ole haittaakaan)).

Toimivasta ohjelmasta saa 0.4 pistettä, testien läpäisemisestä 0.5 pistettä ja dokumentaatiosta loput 0.1 pistettä.

Huomaa! TIMissä konsolilta lukeminen ei toimi samalla tavalla kuin oikeassa ohjelmassa. TIMissä käyttäjän syöte pitää antaa sille varattuun tilaan ENNEN ohjelman ajamista.

# demo4teht4

Ohjelma ei osaa sanoa r:ää?

05 Feb 17

Tehtävä 5

M: 13. Ehtolauseet.

Tee ohjelma, joka kysyy kolme kokonaislukua ja tulostaa niistä suurimman ja pienimmän. Main on jo valmiiksi annettu, joten tee funktiot Suurin ja Pienin, jotka molemmat saavat kolme parametria. Toisin sanoen, näitä kahta funktiota voidaan kutsua siten että funktiokutsussa annetaan kolme kokonaislukutyyppistä argumenttia. Katso Näytä koko koodi -painikkeesta mitä koodia on jo valmiiksi kirjoitettu.

Tehtävässä voit olettaa, että poikkeuksia (siis mikäli käyttäjä antaa syötteenä jonkin muun kuin kokonaisluvun) ei tarvitse tässä ottaa huomioon.

Kokonaisluvun saat luettua käyttäjän näppäimistöltä seuraavasti:

Console.Write("Anna 1. kokonaisluku > ");
int a = int.Parse(Console.ReadLine());

Pohdi myös, millä arvoilla näitä funktioita olisi hyvä testata, ja lisää pohdintasi tavallisena kahden kauttaviivan kommenttina funktion sisään.

Vinkki! Suurin (tai vastaavasti Pienin) -funktiota on helpoin lähteä laajentamaan ajatuksesta

int suurin = a;
if (b > suurin) suurin = b;
return suurin;

Tehtävässä saa sen ajamisesta 0.4 p + testien läpäisemisestä 0.5 p (Test-painike) + dokumentaation tarkastelusta 0.1 p.

# demo4teht5

Tehtävä 6

M: 12. Merkkijonot, Jonoja.cs.

Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi (vinkki: String-luokan metodit IndexOf, Substring tai Split. Hae MSDN-dokumentaatio ja tutki miten merkkijono saadaan paloiteltua. Split vaatii taulukon jota ei vielä ole käsitelty).

public static void Main(string[] args) 
{
  Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
  String kokonimi = Console.ReadLine();
  String etunimi = PoistaEkaSana(kokonimi);
  String sukunimi = AnnaEkaSana(kokonimi);
  Console.WriteLine("Etunimesi on siis " + etunimi +  
    " ja sukunimesi " + sukunimi);
  Console.ReadKey();
}
# demo4teht6

TDD 1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen.

Valitettavasti Xamarinissa Comtest ei tällä hetkellä toimi. Voit kuitenkin ajaa testit Timissä.

Käyttääksesi ComTestiä asenna se tietokoneellesi edellä löytyvän linkin ohjeiden mukaan. Voit varmistaa että asennus on mennyt oikein läpi näin:

  1. Tee uusi Console Application -projekti
  2. Copy-pasteta tämä testikoodi projektiisi
  3. Aja ComTest (Tools \(\rightarrow\) ComTest \(\rightarrow\) ComTest solution)
  4. Jos avautuu alas Test Results ja vihreä pallo missä lukee Passed, niin kaikki meni oikein. Muussa tapauksessa tutki asennusohjeita uudestaan ja kysy tarvittaessa apua ohjaajilta.

Vastauksena kerro minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Huomaa, että ohjelmia joissa on pelkkä Main-pääohjelma ei voida tämän kurssin tiedoilla testata, kuten ei myöskään Jypeli-pelejä. Siksi testaamista tehdään demoissa vain static-funktioille. Tässä demossa sellaisia on tehtävissä 3, 4, 5 ja 6.

# demo4tdd

Ville 1

Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Muista: Villen käyttöohje. Kirjoita lyhyesti mitä opit Ville-tehtävistä ja olivatko tehtävät hyödyllisiä.

# demo4ville1

B1-2

Ota Demo 2:n mallivastauksista SuorakulmiotFysiikalla.cs. Aja se ensin sellaisenaan. Muuta sitten se niin, että luodaan pelikentälle satunnaisiin paikkoihin 30 palloa (mielellään satunnaisin värein), joilla on satunnainen säde 5 ja 30 välillä. Kokeile että toimii. Lisää vielä yksi 40-säteinen valkoinen pallo jota voi ohjata "tökkimällä" nuolinäppäimillä (katso mallia edellisen demon Lumiukon tökkimisestä).

Huom! Tässä tehtävässä TIM ei anna pisteitä, vaan ne täytyy määritellä itse. Ruksi tehtävän ylälaidasta Set custom points -laatikko.

Anna itsellesi 2 pistettä vaatimukset täyttävästä ja hyvin dokumentoidusta vastauksesta. Hyvästä yrityksestä, johon kuuluu ainakin pallon liikuttelu tai satunnaisten pallojen luonti, voit antaa itsellesi yhden pisteen.

Ohjainten lisäämiseen voit katsoa vinkkiä Pong-tutoriaaleista.

# demo4tehtb12

En saanut mallikoodia toimimaan Timissä tai Xamarinissa. Main, Begin, Begin.. kaikkia noita rivejä kokeilin poistella ja lisäillä, sillä virheilmoitukset menivät niile, Mutta ei toimi.

06 Feb 17

B3

Voit tehdä a- ja b-kohdat samaan cs-tiedostoon.

A. Katso char-dokumentaatiota. Mitä sinun on kirjoitettava Xxx:n paikalle jotta seuraava ohjelma toimisi:

# demo4tehtb3a

B. Tee ohjelma, jossa kysyt käyttäjältä merkin, ja tulosta tieto, onko se iso kirjain (uppercase) vai ei (''lower case'').

(Katso myös luentomoniste.)

# demo4tehtb3b

G1

Lisää tehtävän B1-2 pallopeliin ominaisuus, että jos ohjattavalla pallolla osuu toiseen palloon kentän puolivälin yläpuolella, niin toinen pallo räjähtää ja poistuu pelistä (vinkki: Jypelin ohjeet. Pelin tarkoituksena on räjäyttää kaikki pallot.

# demo4g1

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