Changes between Initial Version and Version 1 of k2012/demot/demo9


Ignore:
Timestamp:
2012-03-07 15:57:42 (6 years ago)
Author:
anlakane
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • k2012/demot/demo9

    v1 v1  
     1= [wiki:k2012/demot Demot] » Demo 9, 12.3.2012 =  
     2 
     3{{{ 
     4#!html 
     5<div style="margin-top: 15px; line-height: 25px !important; margin-bottom: 20px;"> 
     6<a style="font-family: Georgia; font-size: 11pt; text-decoration: underline; border-bottom:0px; padding: 10px; " href="#V1">&raquo;&nbsp;Ville</a> 
     7<a style="font-family: Georgia; font-size: 11pt; text-decoration: underline; border-bottom:0px; padding: 10px; " href="#TDD1">&raquo;&nbsp;TDD</a> 
     8<a style="font-family: Georgia; font-size: 11pt; text-decoration: underline; border-bottom:0px; padding: 10px; " href="#Tehtävä1">&raquo;&nbsp;Tavalliset</a> 
     9<a style="font-family: Georgia; font-size: 11pt; text-decoration: underline; border-bottom:0px; padding: 10px; " href="#B1-2">&raquo;&nbsp;Bonus</a> 
     10<a style="font-family: Georgia; font-size: 11pt; text-decoration: underline; border-bottom:0px; padding: 10px; " href="#G1-2">&raquo;&nbsp;Guru</a> 
     11</div> 
     12}}} 
     13 
     14{{{ 
     15#!html 
     16<div style="max-width: 50em !important; text-align: left; "> 
     17}}} 
     18 
     19Demot ovat tällä kertaa hieman tavallista iisimmät johtuen siitä että tekoaikaa on vähemmän; palautus normaalisti maanantaina 12.3. klo 7:30 mennessä. Jos haluat haastetta lisää niin sekä bonus että guru tarjoavat sitä ihan mukavasti. PP-tehtäviä ei ole tällä kertaa, mutta ensi viikolla taas on. 
     20 
     21== V1 == 
     22Tee [https://ville.utu.fi/VServer Ville]-tehtävät: 5.11, 6.4, 6.5, 7.2. Muista: [https://trac.cc.jyu.fi/projects/ohj1/wiki/ville#a1.3Käyttömuillakerroilla Villen käyttöohje] ja [https://trac.cc.jyu.fi/projects/ohj1/wiki/ville#a1.4Ville-tehtävienpalautusNettiDemoWWW:llä Ville-tehtävien palauttamisohjeet]. 
     23 
     24== TDD1 == 
     25Jos tarkistat '''vähintään kahden funktion toiminnan''' automaattisella testillä ([https://trac.cc.jyu.fi/projects/comtest/wiki/ComTestCsharp 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 [https://trac.cc.jyu.fi/projects/comtest/wiki/ComTestCsharp Comtestin] käytöstä. Mikäli [https://trac.cc.jyu.fi/projects/comtest/wiki/ComTestCsharp ComTest] ei toimi yliopiston mikroluokissa, kokeile ensin asentaa [https://svn.cc.jyu.fi/srv/svn/comtest/proto/tojukarp/trunk/plugin/bin/Release/ComTestCSPlugin.vsix 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. Kysy tarvittaessa ohjaajalta neuvoa. 
     26 
     27== Tehtävä 1 == 
     28 
     29Tee algoritmi kokonaislukutaulukon sekoittamiseksi. Tee (void-)aliohjelma, joka ottaa parametrina {{{int}}}-taulukon ja sekoittaa sen alkiot. Testaa algoritmiasi taulukolla, johon on alustettu järjestyksessä luvut 1, 2, 3, ..., 52. Palauta toimiva ohjelmakooditiedosto, jossa on hyvin kommentoituna, mitä algoritmissa tehdään.  
     30 
     31'''Huom:''' Tässä ei ole tarkoitus "keksiä" omaa algoritmia, vaan käyttää ideaa jostakin valmiista algoritmista sekoittamiseen. Hyvä algoritmi on esim: [http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle Fisher-Yates shuffle]. Tästä on toteutus Jypelin [https://trac.cc.jyu.fi/projects/npo/browser/trunk/Jypeli/RandomGen.cs RandomGen] -luokan Shuffle-aliohjelmassa. Voit matkia esimerkiksi tätä. Jos matkit tätä, niin vaihda {{{T}}}:n tilalle {{{int}}} ja listan tilalle {{{int}}}-taulukko. Funktion alkuun pitää lisätä nyt {{{Random rand = new Random();}}} jotta {{{rand}}}-olio on olemassa, Jypelin esimerkissä se on olemassa 
     32koska se on !RandomGen-luokan attribuutti. 
     33 
     34'''Vinkki:''' Ethän laita lukuja 1, 2, 3, ... jne taulukkoon "manuaalisesti", koska siihen on helpompikin tapa :-). Aina pitää miettiä että voiko tämän saman asian tehdä (helposti) vaikka tuhannelle tai miljoonalle luvulle. 
     35 
     36== Tehtävä 2 == 
     37 
     38Palataan hetkeksi kurssin alkupuolen [http://users.jyu.fi/~anlakane/ohjelmointi1/ratkaisut/demo3/PortaatKuormittaminen.cs laatikkotehtävään]. Muuta ohjelmaa siten, että {{{PiirraNelio}}}-aliohjelmalle viedään {{{Vector}}}-olio kahden reaaliluvun (ja koon) sijaan. Tämä vektori toimii piirrettävän laatikon vasemman alakulman pisteenä. Funktio piirtää laatikon ja palauttaa sitten piirtämänsä laatikon oikean yläkulman koordinaatin. Nyt seuraavan laatikon piirtäminen on yksinkertaista koska se voidaan aloittaa edellisen kutsun palauttamasta paikasta. ({{{Game}}}-parametrin voit halutessasi jättää pois, jolloin {{{static}}}-sana jää pois esittelyriviltä eikä tällöin {{{this}}}-parametriä myöskään anneta). 
     39 
     40{{{Begin}}}-aliohjelma näyttäisi tältä. 
     41 
     42{{{ 
     43#!C# 
     44public override void Begin() { 
     45  Vector piste = new Vector(0, 0); 
     46  piste = PiirraNelio(piste); 
     47  piste = PiirraNelio(piste); 
     48  piste = PiirraNelio(piste); 
     49} 
     50}}} 
     51 
     52Piirrä vielä pieni punainen ympyrä, joka on pisteessä (0, 0). Ympyrän saat muiden olioiden päälle varmasti kun lisäät sen "ylemmälle" tasolle 
     53 
     54{{{ 
     55Add(pallo, 1);  
     56// Huomaa: luku 1 tarkoittaa tasoa numero 1.  
     57// Add(pallo) lisäisi pallon tasolle 0 
     58}}} 
     59 
     60Kuva siitä, miltä toimiva ohjelma näyttää ruudulla: 
     61 
     62[[Image(https://trac.cc.jyu.fi/projects/ohj1/attachment/wiki/s2011/demot/demo9/demo9-t2.png?format=raw)]] 
     63 
     64== Tehtävä 3 == 
     65 
     66Jatka edellistä tehtävää siten, että jos pääohjelmaa muutetaan seuraavasti: 
     67{{{ 
     68#!C# 
     69public override void Begin() 
     70{ 
     71  Vector piste = new Vector(0, 0); 
     72  piste = PiirraNelio(piste); 
     73  piste = PiirraNelio(piste); 
     74  piste = PiirraNelio(piste); 
     75  piste -= new Vector(0, NELION_KOKO);  
     76  piste = PiirraNelioAlas(piste); 
     77  piste = PiirraNelioAlas(piste); 
     78} 
     79}}} 
     80 
     81niin ohjelma piirtää viisi laatikkoa, joista keskimmäinen on korkeimmalla. {{{PiirraNelioAlas}}} saa parametrinaan uuden laatikon ''vasemman ylänurkan'' koordinaatin ja palauttaa piirtämänsä laatikon ''oikean alanurkan'' koordinaatin. 
     82 
     83[[Image(https://trac.cc.jyu.fi/projects/ohj1/attachment/wiki/s2011/demot/demo9/demo9-t3.png?format=raw)]] 
     84 
     85HUOM! Määrittele {{{NELION_KOKO}}} luokan vakioksi, eli {{{const double NELION_KOKO = ...}}}. 
     86 
     87== Tehtävä 4 == 
     88 
     89Lisää edelliseen vielä aliohjelma {{{PiirraNeliot}}}, joka piirtää annetun määrän laatikoita ylöspäin ja sitten annetun määrän alaspäin. Sama kuva saataisiin siis kutsulla: 
     90 
     91{{{ 
     92#!C# 
     93public override void Begin() 
     94{ 
     95  Vector piste = new Vector(0, 0); 
     96  PiirraNeliot(piste, 3, 2); // 3 ylös ja 2 alas 
     97} 
     98}}} 
     99 
     100Kuva pitäisi näyttää samalta kuin tehtävässä 3. 
     101 
     102== Tehtävä 5-6 == 
     103 
     104'''M:''' [http://kurssit.it.jyu.fi/ITKP102/monistecs/html/?id=o22Dynaamiset_tietorakenteet 22. Dynaamiset tietorakenteet]. Olkoon meillä lista String-olioita. Tee funktio, joka etsii listan pisimmän jonon ja palauttaa sen (merkkijonona). Pääohjelma tulostaa pisimmän sanan ja poistaa sitten listasta KAIKKI tämän sanan esiintymät. Lista-olioilla on [http://msdn.microsoft.com/en-us/library/wdka673a.aspx RemoveAll]-metodi, mutta sen käyttöä ei tässä vaadita, eikä tämän kurssin tiedoilla sitä valitettavasti opita käyttämään. Tarkoitus on hoitaa poistaminen käyttämällä silmukkaa ja lista-olion "tavallista" [http://msdn.microsoft.com/en-us/library/cd666k3e.aspx Remove]-metodia. 
     105 
     106'''Vinkki:''' Huomaa erityisesti {{{Remove}}}-metodin paluuarvon tyyppi ({{{bool}}}) ja dokumentaatio:  
     107 
     108  '' '''true''' if item is successfully removed; otherwise, '''false'''. This method also returns '''false''' if item was not found in the {{{List}}}''. 
     109 
     110== B1-2 == 
     111Tee seuraava Console Application -peli. 
     112 
     113Kaksi pelaajaa kilpailee siitä, kumpi saa noppaa heittämällä ensin 100 pistettä. Jokaisella vuorolla pelaaja heittää toistuvasti noppaa, kunnes saa joko numeron 1 tai pelaaja sanoo "pankki" jolloin hänen vuorollaan heitettyjen silmälukujen summa lisätään hänen kokonaispistemääräänsä.  
     114 
     115Pelaaja kullakin heittokerralla joutuu siis tekemään seuraavan valinnan 
     116 
     117 * '''heitto''' - arvotaan nopan silmäluku 1-6, ja jos tulos on 
     118  - 1: pelaaja menettää kaikki omalla vuorollaan heittämänsä pisteet ja vuoro vaihtuu vastustajalle 
     119  - 2-6: silmäluku lisätään pelaajan "turn totaliin" ja pelaajan vuoro jatkuu 
     120 * '''pankki''' - pelaajan omalla vuorollaan heittämät pisteet (eli "turn total") lisätään hänen kokonaispistemääräänsä ja vuoro vaihtuu vastustajalle 
     121 
     122== G1-2 == 
     123 
     124Tee ohjelma, joka saa jostakin taulukon (tai käyttää vakiotaulukkoa), jossa on kokonaislukuja. Taulukossa sama luku voi esiintyä useasti. Kirjoita aliohjelma, joka saa tuon taulukon parametrinaan ja palauttaa taulukon, jossa on taulukon alkiot kukin vain yhden kerran järjestettynä niiden esiintymiskertojen määrän mukaan nousevaan järjestykseen. 
     125taulukosta {{{ {1, 2, 3, 34, 34, 2, 1, 34, 1, 1, 1} }}} palautetaan {{{ {3, 2, 34, 1} }}}. 
     126 
     127== G3 == 
     128Tee Palloja karkuun -ohjelmaan eri vaikeustasoja. Mieti itse mikä olisi järkevä tapa toteuttaa vaikeustasot. Käyttäjän pitäisi itse pystyä valitsemaan vaikeustaso. Tee jokaiselle vaikeustasolle oma parhaiden pisteiden lista. 
     129 
     130{{{ 
     131#!html 
     132</div> 
     133}}}