wiki:k2013/demot/demo4
Last modified 5 years ago Last modified on 2013-02-05 11:30:23

Demot » Demo 4, 11.2.2013

Tehtävä 1

Tee Pong-tutoriaalista vaiheet 4-7. (Tee myös 1-3 jos et niitä ohjauksissa tehnyt.) Kirjoita parin kappaleen mittainen oppimispäiväkirja, eli mitä opit, mikä oli uutta? Mikä oli helppoa ja mikä vaikeaa? Oliko tästä tehtävästä sinulle hyötyä? Voit antaa myös palautetta tutoriaalin sisällöstä. 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 :-).

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 2 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ä (Test Driven Development, ks. edellä), 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 App -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ää edelliseen 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.