wiki:k2012/demot/demo8-luonnos
Last modified 6 years ago Last modified on 2012-02-28 08:07:39

Demot » Demo 8, 6.3.2012

» PP » Ville » TDD » Tavalliset » Bonus » Guru

Demojen palauttaminen

Demot palautetaan viimeistään tiistaina klo 11:30 mennessä.

NettiDemoWWW https://www.mit.jyu.fi/demowww/ohj1k/

Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä. Jos sinulla on samassa .cs-tiedostossa usean tehtävän vastaus, niin voit laittaa tehtävän kohdalle esim. 3-4, tai voit palauttaa saman tiedoston useammalla eri rivillä.

Demo 8 poikkeuksellisesti tiistaina 6.3. klo 12:15-14:00 salissa C232.

PP

PP1

M: 16. Toistorakenteet. Silmukat ovat ohjelmoinnin perustyökalu, niitä tarvitaan jatkuvasti. Tässä tehtävässä harjoitellaan vielä silmukoiden käyttöä.

Tee funktio LaskeSanat, jolle annetaan parametrina merkkijonotaulukko, sekä etsittävä merkkijono. Funktio laskee, kuinka monta etsittävää sanaa taulukosta löytyi.

Funktiota voisi kutsua

String[] sanat = {"Omena", "Mandariini", "Appelsiini", "Omena", "Omena", "Päärynä"};
int montakoLoytyi = LaskeSanat(sanat, "Omena");

Bonus (tätä ei ole pakko tehdä): Miten saisit funktioon sellaisen ominaisuuden, että parametrina annetaan tieto siitä, onko kirjainkoolla väliä. Eli jos kolmantena parametrina annetaan false (eli kirjainkoolla ei ole väliä) "Omena" voi olla kirjoitettuna myös pienellä 'o':lla?

PP2

Esittele harjoityösi tämän hetkinen tilanne ohjaajalle. Tee sitten peliisi vähintään yksi uusi ominaisuus / toiminto / aliohjelma / vaihe. Palauta demowww:hen pp2.txt, missä kerrot, mitä ja miten teit uuden asian. Kerro samassa tiedostossa, miten aiot harjoitustyössäsi seuraavaksi edetä.

V1

Tee Ville-tehtävät: 6.5, 9.7 + kaksi sellaista joita et ole aiemmin ymmärtänyt kunnolla (jos kaikki ymmärretty, ei tätä ylim kahta tarvitse tehdä). Mitä 9.7:ssa on väärin C#:ia ajatellen? Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.

TDD1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen. 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ä. Mikäli ComTest ei toimi yliopiston mikroluokissa, kokeile ensin asentaa ComTest-VS-plugin. Sitten tarkista, että ComTest haetaan oikeasta paikasta: Valitse Visual Studiossa Tools -> ComTest -> Options. Tarkista, että Path to ComTest.jar executable kentässä on N:\bin\ComTest.jar ja olet yhdistänyt koneesi N-verkkolevyyn. }}}

Tehtävä 1

M: 13. Ehtolauseet. Tee funktio Karkausvuosi(int vuosi), joka palauttaa tosi jos vuosi on karkausvuosi. Karkausvuosia ovat neljällä jaolliset vuodet, mutta ei täydet vuosisadat paitsi neljällä jaolliset vuosisadat (esim. 1900 ei ollut karkausvuosi, 1900 on 19:s vuosisata ja 19 ei ole jaollinen neljällä, mutta 20:s on ja siksi 2000 on karkausvuosi). Mieti kunnon testiohjelma / ComTest-testit.

Tehtävä 2

M: 13. Ehtolauseet, 13.8 13.8 switch-rakenne, 16. Toistorakenteet, 15. Taulukot. Kirjoita 3 erilaista funktiota Vuodenaika(int kuukausi), joka palauttaa merkkijonona sen vuodenajan, joka parametrina vietynä kuukautena on. Yksi käyttää käyttää if-lausetta, toinen switch-lausetta ja kolmas taulukkoa.

Tehtävä 3

Tee Console Application ja siihen seuraavanlainen "kolikonheittofunktio": Funktio ottaa parametrina vastaan, montako perättäistä klaavaa halutaan. Funktio palauttaa tiedon että kuinka monta "kolikonheittoa" tarvittiin. Funktiota voisi kutsua pääohjelmasta seuraavasti.

int montakoHeittoa = MontakoHeittoaTarvitaan(3);
Console.WriteLine(montakoHeittoa);

Tässä siis selvitetään ja tulostetaan, montako heittoa tarvitaan, että saadaan kolme perättäistä klaavaa.

Tässä tehtävässä et poikkeuksellisesti saa käyttää Jypeliä apuna. Tällaista funktiota ei myöskään voi testata ComTestilla (mieti miksi!).

Vinkki: Käytä C#-kielen Random-luokkaa satunnaisten double-lukujen arpomiseen väliltä 0..1. Jos teet uuden olion silmukan jokaisella kierroksella, saat vääriä tuloksia, joten älä vie Random-oliota silmukkaan.

Tehtävä 4

Tässä koodissa on turhaa toistoa

private PhysicsObject LuoSeina()
{
    PhysicsObject seina = new PhysicsObject(tileWidth, tileHeight);
    seina.Tag = "rakenne";
    seina.Image = tiilenKuva;
    return seina;
}

private PhysicsObject LuoKatto()
{
    PhysicsObject katto = new PhysicsObject(tileWidth * 1.5, tileHeight);
    katto.Tag = "rakenne";
    katto.Image = katonKuva;
    return katto;
}

Tee uusi metodi LuoRakenne sopivilla parametreilla niin, että saat vaihdettua sekä LuoSeina että LuoKatto -metodit yhden rivin metodeiksi.

Täyden pisteen voit laittaa itsellesi, kun (varsinaisen tehtävän lisäksi) ohjelma kääntyy ja dokumentaatiot ovat kunnossa. Pelin ei tarvitse piirtää varsinaisia rakenteita näkyville.

Tehtävä 5

M: 22.2 Listat Muuta LahinPisteHiiresta-esimerkkiä niin, että muutat PhysicsObject[] pallot-taulukon listaksi. Tee kaikki muut tarvittavat muutokset, jotta peli toimii täsmälleen kuten aikaisemminkin.

Tehtävä 6

Jatketaan tehtävää 3. Kysy käyttäjältä, montako perättäistä klaavaa halutaan. Kysy sitten, montako kertaa tulos halutaan. Lopuksi tulosta, montako kertaa keskimäärin meni heittäessä oikea määrä perättäisiä klaavoja. Alla ohjelman käyttöesimerkki (tulostus).

Tervetuloa kolikonheittopeliin!
Montako perättäistä klaavaa halutaan? > 3
Montako kertaa haluat tuloksen? > 10
Keskimäärin 3 perättäistä klaavaa heitettiin 5.4 heitolla.

B1-2

Muuta luennolla tehtyä LahinPisteHiiresta-ohjelmaa siten, että poistat KorostaLahinPiste-aliohjelmasta jälkimmäisen foreach-silmukan: siis hoidat tilanteen niin, ettei hiirenkuuntelijassa tarvitse joka kerta värjätä kaikkia palloja. Onko alkuperäisen toteutuksen ja tämän "korjatun" välillä nopeuseroa?

B3

M: 15. Taulukot, 16. Toistorakenteet. Tee funktioaliohjelma Moodi(luvut), joka etsii taulukon yleisimmän luvun. Jos eniten esiintyviä on yhtä monta, niin silloin ensimmäisenä näistä lukujoukoista tulkitaan yleisimmäksi. Ennen kuin lähdet ohjelmoimaan yhtään mitään, mieti, kuinka ratkaisit tämän ongelman kynällä ja paperilla (eli mieti algoritmi). Et tarvitse aputaulukkoja välttämättä, vaan tehtävän voi ratkaista muutamalla apumuuttujalla.

Taustaa: Moodi on yksi keskiluvuista. Toinen on keskiarvo. Kolmas keskiluvuista on mediaani, eli aineiston keskimmäinen alkio. Tätä ei vielä tarvitse tehdä. Mitä mediaanin laskemiseksi pitäisi ensin tehdä? Katso vaikka Wikipediasta keskiluku.

G1-2

Jatka LahinPisteHiiresta-tehtävää siten, että se pallo, joka on lähimpänä pelaajaa (hiiren kursoria), lähtee lähestymään pelaajaa. Jos pallo saa pelaajan kiinni, tapahtuu jotakin (esim MessageDisplay-oliolle ilmestyy teksti... tai... galaksit räjähtää, tai jotain muuta!).

Ohje: Ylikirjoita Update-metodi, ja toteuta lähimmän pallon liikuttelu ko. metodissa. Esimerkki Update:n ylikirjoittamisesta löytyy ainakin täältä. Tee pikkupalloista fysiikkaolioita.