wiki:k2015/demot/demo4
Last modified 3 years ago Last modified on 2015-02-06 13:55:59

Demot » Demo 4, 9.2.2015

Palauta demot ma klo 11:59 mennessä kurssin NettiDemoWWW:llä.

Huomio ohjauksissa kävijät: Ota ohjauksiin aina kynä ja paperia! Muistathan, että ohjaustehtävät ovat myös omalla sivullaan.

Oppimistavoitteet

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)

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ää. Palauta oppimispäiväkirja nimellä teht1.txt, Pong-tutoriaalin kooditiedostoja EI tarvitse palauttaa.

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

Console Application -tehtävät

Seuraavat tehtävät ovat tekstipohjaisia. On suositeltavaa asentaa Visual Studioon kurssia varten tehty ConsoleMain -projektimalli, jolla luokan nimi tulee automaattisesti samaksi kuin projektin nimi. Lisäksi ko. projektimalli poistaa koodin alusta Namespacen joka on tällä kurssilla turha. Tämä pikkuisen helpottaa nimeämistä ja dokumentaatioiden kirjoittamista.

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. Palauta vastauksena teht2.txt, jossa kerrot, mitä korjattavaa löysit. Huomaa, että aliohjelmien toteutusta ei tässä arvioida eikä edes näytetä. Tee tulkintasi dokumentaation ja esittelyrivin perusteella.

Kun löydät jokaisesta kohdasta vähintään kaksi korjattavaa asiaa, voit laittaa itsellesi täyden (yhden) pisteen.

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

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 PalautaLyhyempiKahdestaSanasta(char sana1 char sana2)
{
  ...
}

c) Palindromi

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

Tehtävä 3

M: 12. Merkkijonot, 13. Ehtolauseet. Tee alla olevaan (Console-projektin) pääohjelmaan tarvittava funktio

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 = PidempiJono(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). Aluksi itse funktion sisältö (eli runko-osa) voi olla pelkästään

return "testi";

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.

Jos teet kunnon TDD:tä (eng. Test Driven Development, ks. kohta TDD1), niin ennen funktion toteutusta kirjoitat testit ja kokeilet, että testit epäonnistuvat. Sitten vasta toteutat funktion ja ajat testit, korjaat funktiota jos testit eivät toimi jne.

Tehtävä 4

M: 12. Merkkijonot. Tee konsoliohjelma (Console Application), joka toimisi seuraavasti (vinkki: katso String-luokan dokumentaatiota ja etsi metodi jolla voit vaihtaa kirjaimen toiseksi. (Vinkki: String.Replace(char, char). Tiedon lukemiseen käyttäjältä käytä Console.ReadLine()-metodia, kuten edellisessä tehtävässä. Tässä tehtävässä ei välttämättä tarvitse itse kirjoittaa yhtään aliohjelmaa tai funktiota, tosin jonkin apufunktion tekemisestä saattaa olla hyötyä.

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

Tehtävä 5

M: 13. Ehtolauseet. Tee ohjelma joka kysyy kolme kokonaislukua ja tulostaa niistä suurimman ja pienimmän. Tee avuksi funktioaliohjelmat Suurin(a, b, c) ja Pienin(a, b, c). Millä arvoilla näitä funktioita olisi hyvä testata? Oletetaan, että käyttäjä syöttää kokonaisluvun, eli poikkeuksia (jokin muu kuin kokonaisluku annettu) ei tarvitse tässä ottaa huomioon. Numeron saat luettua päätteeltä seuraavasti:

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

Vinkki tehtävään 5. (Älä lue jos haluat ensin itse miettiä)

Tehtävä 6

M: 12. Merkkijonot. 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();
}

TDD 1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen. Käyttääksesi ComTestiä asenna se tietokoneellesi edellä löytyvän linkin ohjeiden mukaan. Asennusohje löytyy myös videona: http://www.youtube.com/watch?v=y5O3VsFRupw. 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 -> ComTest -> 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.

https://trac.cc.jyu.fi/projects/ohj1/raw-attachment/wiki/k2012/demot/demo4/comtest-ok.png

Palauta DemoWWW:ssä tekstitiedosto tdd.txt (jonka siis arvostelet yhden pisteen arvoiseksi), missä kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Tehtävän "numeroksi" anna TDD1. Voit antaa samassa tiedostossa palautetta ja kehitysehdotuksia Comtestin käytöstä. Huom! Ohjelmia, joissa on pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastava testata, samoin esim. pelijuttuja. Siksi testaamista tehdään näissä demoissa vain funktioille, eli aliohjelmille, jotka palauttavat jotakin. Tässä demossa sellaisia on tehtävissä 3, 5 ja 6.

Ville 1

Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.

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ä). Ohjainten lisäämiseen voit katsoa vinkkiä Pong-tutoriaaleista.

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:

public static void Main(string[] args) 
{
  char pienena = 'a';
  char isona = Char.Xxx(pienena);
  Console.WriteLine(pienena + " => " + isona); // a => A
  pienena = 't';
  isona = Char.Xxx(pienena);
  Console.WriteLine(pienena + " => " + isona); // t => T
}

b) Kysy käyttäjältä merkki, ja tulosta tieto, onko se iso kirjain (uppercase) vai ei (lower case). Esimerkki ohjelman käytöstä:

Anna merkki > B [enter]
Annoit ison kirjaimen.

Anna merkki > p [enter]
Annoit pienen kirjaimen. 

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 tarkoituksen on räjäyttää kaikki pallot.