wiki:k2012/demot/demo4-luonnos
Last modified 6 years ago Last modified on 2012-01-30 15:35:09

Demot » Demo 4, 6.2.2012

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.

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. Voit varmistaa että asennus on mennyt oikein läpi näin:

  1. Tee uusi projekti
  2. Copy-pasteta tämä testikoodi projektiisi
  3. Aja ComTest (Tools -> ComTest -> ComTest solution)

Valitettavasti tätä kirjoittaessa (30.1.) ei ole vielä takuuta onko Agoran mikroluokissa ComTest jo asennettuna.

Palauta DemoWWW:ssä tekstitiedosto tdd.txt (jonka siis arvostelet yhden pisteen arvoiseksi), missä kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. 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 kannattaa tehdä tässä demoissa vain funktioille, eli aliohjelmille/metodeille jotka palauttavat jotakin. Tässä demossa sellaisia on tehtävissä 3, 5 ja 6.

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 dokumenttia 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/funktiota, tosin apufunktiosta ei ole haittaakaan.

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 aliohjelmia 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ää on helpointa lähteä laajentamaan ajatuksesta

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

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();
}

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.

Tehtävä B3

Kirjaimet: katso char-dokumentaatiota. Katso mikä kutsu 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
}

Jatkokysymys: Kysytään käyttäjältä merkki ja tulostetaan onko se iso kirjain (uppercase) vai ei (lower case).

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.