Onko vaikeuksia silmukoissa ja taulukoissa?

  • aloita ensimmäistä Taunoista ja tee ne Taunolla ja sitten silmukalla. Tarvittaessa katso avuksi demonpalautusvideoita Tauno-tehtävän käsittelystä.
  • sitten siirry seuraaviin Taunoihin ja jatka kunnes kaikki käyty läpi!
  • tee kaikki taulukkotehtävät demojen harjoittelusivuilta
  • katso eri taulukkotehtävien vastauksia demojen mallivastauksista
  • lue luentomonisteesta taulukoista ja silmukoista
  • katso luentovideoista taulukoista ja silmukoista
  • lue lisämateriaalista taulukoista ja silmukoista

Demojen harjoittelu

Tässä dokumentissa voit harjoitella demoja vastaavia tehtäviä. Näistä ei saa oikeasti demopisteitä, toki osaan tehtävistä tulee “leikisti” pisteitä.
Tehtävien perässä on tehtävään malliratkaisu, jonka voit avata sitten kun tuntuu siltä, että tarvitset apua, tai olet ratkaissut tehtävän.

Demo 3

3.4 Funktioita

Katso kertauksena: Funktion tekeminen Luento 6 – 19m20s (31m42s) 6. Aliohjelmat

Tämä on malli demo 3 tehtävään Funktioita. Tässä mallissa pitää tehdä funktio NelionAla.

Tehtävän aluksi kannattaa katsoa alta Näytä koko koodi. Ja sitten välillä pistää se pois, koska aliohjelmaa tehdessä ei saa enää ajatella, että mistä sitä kutsuttiin.

Jos olet ihan ulkona, katso ensin yllä oleva video.

Aloita miettimällä alla olevaan funktioon ISOLLA kirjoitettu sana kerrallaan, mitä pitää tulla siihen kohti ja kirjoita vastaava sana siihen. Jos et keksi, avaa vastaava vinkki. Katso vinkki sitten joka tapauksessa sanan täydentämisen jälkeen ja mieti oliko päättelysi oikein.

Kun valmis, muista Aja ja Test sekä katso myös Document ajatuksen kanssa.

Alla harjoittelutehtävän tekemistä ohjaava video kokonaisena. Mutta voi olla järkevää katsoa se alempaa pala kerrallaan, kun on ensin miettinyt itse mitä kunkin sanan kohdalle tulee ja sitten avaa vastaavan vinkin, lukee siinä olevan tekstin ja tarvittaessa katsoo vielä siinä olevan videon palan. Vinkit kannattaa sulkea lukemisen jälkeen niin sivun pituus ei kasva liikaa.

Harjoittelutehtävä kokonaisena videona Harjoittelu 03 (9m2s)

Aloitus: Tehtävän voi tehdä suoraan TIMIssä, mutta videossa se on tehty käyttäen Visual Studiota.

Nyt siirry tehtävään ja rupea sana kerrallaan miettimään mitä kirjoitetaan ja sitten katso vinkit.

#

Tehtävä 4. Neliö

Kirjoita funktio nimeltä NelionAla, joka palauttaa parametrina viedyn sivun pituuden avulla lasketun neliön alan. Tehtävän laskun voi tehdä ihan kertolaskuna, eli toiseen korotukseen ei kannata etsiä mitään Math-luokan funktiota.

    NAKYVYYS STATICvaiEI PALUUARVONTYYPPI FUNKTIONNIMI(PARAMETRINTYYPPI NIMI)
    {
        return TÄHÄNLASKUTOIMITUSTULOKSENSAAMISEKSI;
    }

 

Näkyvyysvinkki

STATICvaiEI-vinkki

PALUUARVONTYYPPI -vinkki

FUNKTIONNIMI -vinkki

PARAMETRINTYYPPI -vinkki

NIMI -vinkki

LASKUTOIMITUS -vinkki

Mallivastaus

Huomaa että tämä sama malli pätee kaikkiin aliohjelmiin joita kirjoitetaan. Voit aina aloittaa kopioimalla itsellesi tämän tehtävän lähtöpohjan (pääset siihen Alusta-linkillä) itsellesi.

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

Demo 4

4.2 Merkkijonofunktio

Esimerkki, jossa on samoja elementtejä kuin Tehtävässä 2. Tämä tehtävä on “vaikeampi” kuin itse demotehtävä.

Huom. Tehtävää tehdessä ei pidä miettiä sitä, mitä järkeä funktiossa on, tehtävä on laadittu vaan sellaiseksi, että funktiossa tulee käytettävksi eri tyyppisiä parametreja.

Tehtävänä on tehdä ohjelma, joka kysyy käyttäjältä merkkijonon ja sitten sen mukaan onko jono pidempi kuin 4 vai ei, tulostetaan Aika pitkä tai lyhyt.

Pohjassa on pääohjelma valmiina ja toteutettavaksi jää vain funktio OnkoPitka.

Pääohjelmassa olevat \" ovat sitä varten, koska jos halutaan tulostaa lainausmerkit, niin nehän katkaisisivat merkkijono. Joten siihen, mihin halutaan tulostuvan lainausmerkki, pitää laittaa lainausmerkin eteen takakeno \. Tällöin lainausmerkki tulkitaan tavalliseksi merkiksi, ei merkkijonon sulkevaksi lainausmerkiksi.

#

Tehtävä 2. Onko pitkä

Kirjoita funktio nimeltä OnkoPitka, joka saa parametrinaan merkkijonon, rajapituuden sekä merkkijonon joka palautetaan, mikäli jono oli pidempi kuin raja. Mikäli jono on yhtäpitkä tai lyhyempi kuin raja, niin palautetaan sana “lyhyt”. Kirjoita funktio tähän alapuolelle.

 

Miten aloitan?

Miten esittelyrivi alkaa?

Mikä on funktion paluuarvo?

Mitä paluuarvon jälkeen?

Mikä on ensimmäinen parametri?

Toinen parametri?

Kolmas parametri?

Tynkätoteutuksen tekeminen

Punaisen näkeminen

Algoritmi

Toteutuksen aloittaminen

Pituuden vertailu

Entä jos ehto ei toteudu?

Pääohjelman ajaminen

Mallivastaus

Muita malliratkaisuja

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

Demo 5

Aloita aina tehtävä avaamalla Näytä koko koodi ja sitten tutustu huolella pääohjelmaan.

#

5.1 StringBuilder

#

Tehtävä 1. Lisää jonoon

Kirjoita aliohjelma nimeltä LisaaKeskelle, joka saa parametrinaan muuttuvan merkkijonon, sekä merkkijonon joka lisätään jonon keskelle.

 

Harjoittelutehtävä kokonaisena videona Harjoittelu 05_1 (9m12s)

Algoritmi

Vinkit

Mallivastaus

Parannus testeihin: muutetaan sivuvaikutukselliseksi funktioksi

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

5.2 Taulukot ilman silmukkaa

#

Tehtävä 2. Montako kuutosta

Kirjoita funktio Montako, niin että pääohjelma toimii. Katso huolella, montako parametria on nyt kutsussa ja esittele funktio sen mukaan. Poikkeuksellisesti saat olettaa että lukuja taulukossa on tasan 3 kpl ja vastausta ei ole pakko kirjoittaa silmukalla.

 

Harjoittelutehtävä kokonaisena videona Harjoittelu 05 2 (3m43s)

Algoritmi

Vinkit

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

5.3 Lukujen tulostaminen

Tulostuksen on oltava täsmälleen alla olevan kaltainen:

Luku Toiseen
 0     0
 1     1
 2     4
 3     9
 4    16
 5    25
12345678

eli luku-muuttujalle varataan tilaa 2 paikkaa ja sitten kolme välilyöntiä ja toisen potenssin kohdalla varataan tilaa 3 paikkaa. Alin rivi on vain luettelo sarakkeista, mihin mikäkin pitää tulostaa, sitä ei tulosteta oikeasti.

#

Tehtävä 3. Tulosta lukuja

Tee aliohjelma TulostaToiseen(alku, loppu), joka tulostaa luvun ja sen toisen potenssin aloittaen luvusta alku ja lopettaen lukuun loppu. Tee ensin while-silmukalla ja muuta sitten for-silmukaksi. Kokeile muuttaa myös do-while-silmukaksi.

 

Harjoittelutehtävä kokonaisena videona Harjoittelu 05 3 (15m33s)

Tynkä

Silmukaton “tyhmä” versio aluksi

Silmukaton versio muuttujilla

Tulostuksen muotoilu

Muutetaan silmukaksi

Vaihtoehtoja muotoiluun ja apumuuttujiin

Mallivastaus - while

Mallivastaus - for. Miten while muutetaan for-silmukaksi?

Mallivastaus - do-while. Miten while muutetaan do-while -lauseeksi?

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

5.4 Taulukot silmukalla

#

Tehtävä 4. Montako kuutosta, silmukalla

Kirjoita funktio Montako, niin että pääohjelma toimii. Katso huolella, montako parametria on nyt kutsussa ja esittele funktiot sen mukaan. Nyt vastaus pitää kirjoittaa silmukalla. Tee ensin while-silmukka ja sitten vertailun vuoksi for-silmukka.

 

Harjoittelutehtävä kokonaisena videona Harjoittelu 05 4 (11m20s)

Vinkkejä

Mallivastaus - while

Mallivastaus - for

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

Demo 6

#

6 Tauno 2. Matriisin indeksit

Demo 5 sopulipelistä poiketen tässä naapureiksi lasketaan vaan “pääilmansuunnissa” olevat naapurit, eli suoraan yläpuolella, sivulla tai alapuolella olevat naapurit (max 4 kappaletta jos olla keskellä lautaa). Mallikuvassa nämä ovat vihreällä.

Aluksi lasketaan naapurit vain ruudulle [1,2]:

#

Tehtävä Tauno 2.1

        // Lisää n:ään kaikkien pääilmansuunnissa olevien naapureiden määrä,
        // ruudulle [1,2], eli monista ja muokkaa seuraavaa riviä
        n += sukupolvi[0,2];

 

Naapureiden osoitteet

Mallivastaus

Seuraavaksi muutetaan niin, että lasketaan naapurit “sisäpisteelle” [iy,ix]. Reunapisteet ovat tässä vaiheessa hankalampia, koska niillä on eri määrä naapuriruutuja.

#

Tehtävä Tauno 2.2

        // Lisää n:ään kaikkien pääilmansuunnissa olevien naapureiden määrä
        // ruudulle [iy,ix], eli monista ja muokkaa seuraavaa riviä
        n += sukupolvi[iy-1,ix+0];

 

Naapureiden osoitteet

Mallivastaus

Nyt lähdetään yleistämään tilannetta niin, että olisi jatkossa mahdollisimman helppo tehdä silmukka naapureiden laskemiseksi.

#

Tehtävä Tauno 2.3

        // Lisää n:ään kaikkien pääilmansuunnissa olevien naapureiden määrä
        // ruudulle [iy,ix], eli monista ja muokkaa seuraavia rivejä, mutta
        // koita säilyttää n+= rivi muuttumattomana.
        y = -1; x = 0;
        n += sukupolvi[iy+y,ix+x];

 

Miksi näin

Mallivastaus

Tehdään silmukka niin, että laitetaan naapuriruutujen erokoordinaatit aputaulukkoon, ja käydään sieltä hakemassa äsken vakioina olleet arvot.

#

Tehtävä Tauno 2.4

        // Täydennä erot-taulukko ja silmukan 1. rivi, niin että funktio toimii
        int[,] erot= {{-1,0}, {0,???}, ???? };
        for (int i=0; i<erot.GetLength(0); i++)
        {
            y = erot[i,0]; x = ???;
            n += sukupolvi[iy+y,ix+x];
        }

 

Erotaulukko

Mallivastaus

Korjataan koodia vielä niin, että voidaan laskea minkä tahansa ruudun naapurit. Jopa sellaisten, jotka ovat reilusti alueen ulkopuolella.

#

Tehtävä Tauno 2.5

        // Vaihdetaan itse laskuun pelkkä y ja x, lasketaan yhteenlasku
        // valmiiksi ja testataan, että indeksi on rajoissa.
        // Täydennä puuttuvat ehtolauseet niin, että voidaan laskea minkä tahansa
        // pisteen naapurit.
        int[,] erot= {{-1,0}, {0,-1}, {0,1}, {1,0}};
        int maxy = sukupolvi.GetLength(0);
        int maxx = sukupolvi.GetLength(1);
        for (int i=0; i<erot.GetLength(0); i++)
        {
            y = iy + erot[i,0]; x = ix + ???;
            if ( y < 0 ) continue;
            if ( y >= maxy ) continue;
            ???
            n += sukupolvi[y,x];
        }

 

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

6.2 Ehto ja etumerkin vaihtaminen

#

Tehtävä 2a. Etumerkin vaihto

Kirjoita funktioVaihdaParillisenEtumerkki, joka vaihtaa luvun etumerkin jos se on parillinen. Parittomat luvut palautetaan sellaisenaan. Aloita kirjoittamalla esittelyrivi, tee tynkä, kirjoita kommentit ja testit.

    /// <summary>
    /// Vaihdetaan parillisen luvun etumerkki
    /// </summary>
    /// <param name="???">?????</param>
    /// <returns>parilliset luvut etumerkki vaihtuneena, parittomat sellaisenaan</returns>
    /// <example>
    /// <pre name="test">
    ///   VaihdaParillisenEtumerkki(-8) === 8;
    ///   ??? TÄYDENNÄ KATTAVAT TESTIT
    /// </pre>
    /// </example>
    JULKISUUS STATICVAIEI TYYPPI VaihdaParillisenEtumerkki(TYYPPI NIMI)

 

Tynkä, kommentit ja testit

Miten testataan ja miten etumerkki vaihdetaan

Mallivastaus

#

Tehtävä 2b. Etumerkin vaihto summasta

Kirjoita funktioVaihdaParittomanSummanEtumerkki, joka lisää lukuun 10 ja jos tulos on parillinen, palauttaa sen sellaisenaan, muuten palauttaa tuloksen vastaluvun. Käytä vaihtamisen apuna edellistä funktiota, eli kopioi sen toteutus tähän tehtävään. Aloita kuten edellä.

    /// <summary>
    /// Lisätään lukuun 10 ja palautetaan tulos sellaisenaan jos se on parillinen,
    /// muuten tuloksen vastaluku.
    /// </summary>
    /// <param name="???">?????</param>
    /// <returns>luku+10 jos parillinen, muuten -(luku+10)</returns>
    /// <example>
    /// <pre name="test">
    ///   VaihdaParittomanSummanEtumerkki(-8) === 2;
    ///   ??? TÄYDENNÄ KATTAVAT TESTIT
    /// </pre>
    /// </example>
    JULKISUUS STATICVAIEI TYYPPI VaihdaParittomanSummanEtumerkki(TYYPPI NIMI)

 

Tynkä, kommentit ja testit

Summa ja testaaminen

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

6.3 Etsiminen

Tämän tehtävän ymmärtäminen, kuten kaikkien muidenkin, vaatii sen, että käsin lasketaan eri luvuille jakojäännöksiä ja kirjoitetaan niitä lukujen viereen paperille ja sitten itse etsitään haluttua tulosta. Kun tätä on tehnyt riittävän usein, voi ymmärtää ongelman ja sitten pystyä miettimään sitä ohjelmaksi.

Tämän tehtävän vaikeusaste on sama kuin demo 6:n tehtävä 3:ssa vaadittava EtsiLahin. Molemmissa mitataan “paremmuutta” jollain tavalla ja etsitään sitä alkiota, jolla on mittarin mukana paras tulos.

#

Tehtävä 3. Taulukosta etsiminen

Kirjoita funktio EtsiLukuJollaPieninJakojaannos, joka etsii taulukon sen luvun, jolla on pienin jakojäännös kun se jaetaan luvulla jakaja. Valmis jakojäännösoperaattori % toimii niin, että kun negatiivisen luvun jakojäännös lasketaan, tulee siitä negatiivinen. Aloita kuten edellä.

    /// <summary>
    /// Etsitään luku, jolla on pienin jakojäännös kun se jaetaan jakajalla.
    /// </summary>
    /// <param name="???">?????</param>
    /// <param name="???">?????</param>
    /// <returns>luku jolla pienin jakojäännös</returns>
    /// <example>
    /// <pre name="test">
    ///   int[] luvut = {2344, 1023, 97, 2343, 1236};
    ///   EtsiLukuJollaPieninJakojaannos(luvut, 7) === 1023;
    ///   ??? TÄYDENNÄ KATTAVAT TESTIT
    /// </pre>
    /// </example>
    JULKISUUS STATICVAIEI TYYPPI EtsiLukuJollaPieninJakojaannos(PARAMETRIT)

 

Esittelyrivi, tynkä, kommentit ja testit

Ongelman hahmottaminen

Mallivastaus (melkein)

Mallivastaus (melkein) - foreach

Mitä asioita mallivastauksessa on käsittelemättä, testaamatta ja dokumentoimatta?

Puuttuvat tarkastukset

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

#

Demo 7

#

7.1 Vektoreita taulukossa

Tässä esimerkissä on tehty Jypelin Vector luokkaa vastaava minimaalinen versio, jossa ainoa mikä toimii on ToString().

HUOM! Vaikka tässä harjoituksessa tulostetaankin pisteitä, ei vastaavassa demotehtävässä ole missään tapauksessa tarkoitus tulostaa, vaan luoda palloja, joiden keskipiste on paikassa p (tai pisteet[i] jos ei käytetä apumuuttujaa).

#

Tehtävä 1. Pisteet taulukossa

Kirjoita aliohjelma TulostaPisteet, joka tulostaa taulukossa olevat pisteet (=x,y -lukuparit, = Vector) Aloita kirjoittamalla aliohjelman esittely, tynkä joka tulostaa yhden pisteen, kommentit ja toteuta aliohjelma vaikka ensin taunomaisesti kopioiden malliriviä 4 kertaa ja sopivasti muokaten. Sitten vaihda vakioindeksien tilalle indeksi ja muuta silmukaksi.

    /// <summary>
    /// </summary>
    /// <param name="pisteet"></param>
    ... esittelyrivi ...
    {
            Vector p = pisteet[0];  Console.WriteLine(p);
    }

 

Esittelyrivi, kommentit ja tynkä

Taunomainen ratkaisu

Mallivastaus silmukalla

Mallivastaus foreach-silmukalla ilman apumuuttujaa

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

7.2 Arvo lukuja taulukkoon

#

Tehtävä 1. Pisteet taulukossa

Kirjoita funktio ArvoLukuja, joka luo n-paikkaisen reaalilukutaulukon ja arpoo sinne sattunaisia lukuja väliltä [x1,x2[. Aloita kirjoittamalla funktion esittelyrivi ja tynkä. Sitten toteuta funktio niin että pääohjelma saa tulostettua 12 lukua. Arvonta toteutetaan kutsumalla funktiota RandomGen.NextDouble(x1,x2). Aloita kirjoittamalla esittelyrivi ja tynkä. Testejä on hieman vaikea kirjoittaa tässä tapauksessa, joten jätetään ne väliin.

 

Esittelyrivi ja tynkä

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

7.3 Etsi vektoritaulukosta

#

Tehtävä 1. Pisteet taulukossa

Kirjoita funktio EtsiPisteenPaikka, joka etsii taulukosta ensimmäisen pisteen paikan (indeksin), joka on etsittävästä korkeintaan etaisyyden paassa Aloita kirjoittamalla aliohjelman esittely, tynkä sekä testit. Aja ja näe punaista. Sitten toteuta funktio niin että näet testiajossa vihreää. Kahden pisteen välinen etäisyys voidaan laskea Vector.Distance(p1,p2).

    /// <example>
    /// <pre name="test">
    ///  Vector[] pisteet = { new Vector(3, 1), new Vector(9, 2), new Vector(2, 9), new Vector(12, 5) };
    ///  EtsiPisteenPaikka(pisteet, new Vector(3,1), 0.1) === 0;
    ///   ... kirjoita lisää testejä niin että jokainen piste tulee kokeiltua
    ///  EtsiPisteenPaikka(new Vector[0], new Vector(8,3), 2.0) === -1;
    /// </pre>
    /// </example>
    ... esittelyrivi ...
    {
            tähän tynkätoteutus aluksi
    }

 

Esittelyrivi, tynkä, kommentit ja testit

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

7.5 Kirjainten tutkiminen

Alla oleva tehtävä on oikestaan sama kuin aikaisempi Taulukot silmukalla-tehtävä. Kannattaa ensin katsoa sen vinkit ja yrittää tätä ilman vinkkejä.

#

Tehtävä 5. Laske isot

Tehtävä funktio nimeltä MontakoIsoa, joka saa parametrinaan merkkijonon ja palauttaa tiedon siitä, montako isoa kirjainta on jonossa. Aloita kirjoittamalla funktion esittelyrivi, tynkä, dokumentit ja ComTestit. Sitten aja testit niin, että näet punaista ja lopuksi toteuta itse funktio.

    /// <summary>
    /// </summary>
    /// <param name=""></param>
    /// <returns></returns>
    /// <example>
    /// <pre name="test">
    /// </pre>
    /// </example>

 

Esittelyrivi, tynkä, kommentit ja testit

Funktion toteutus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

7.6 Taulukon vastinalkioiden summataulukko

#

Tehtävä 6. Taulukkojen summa

Tehtävä funktio nimeltä Summa, joka laskee vastinalkioittain yhteen kaksi 1-ulotteista taulukkoa. Palautetaan summa uudessa taulukossa. Mikäli taulukot ovat erikokoisia, toimitaan lyhyemmän taulukon mukaisesti. Aloita kirjoittamalla funktion esittelyrivi ja tynkä. Sitten aja testit niin, että näet punaista ja lopuksi toteuta itse funktio.

 

Esittelyrivi ja tynkä

Tulostaulukon luominen

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

7.6 Matriisin palauttamien

#

Tehtävä 6. Matriisin palauttaminen

Tehtävä funktio nimeltä Kerro, joka kertoo taulukon jokaisen alkion kertoimella. Palautetaan uusi taulukko, jossa kerrotut luvut. Aloita kirjoittamalla funktion esittelyrivi ja tynkä. Sitten aja testit niin, että näet punaista ja lopuksi toteuta itse funktio.

 

Esitelyrivi ja tynkä

Tulosmatriisin luominen

Alkioiden läpikäynti

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

Demo 8

#

8.1 Jaollisuus

Pelissä Saalista Silakka on pisteiden suhteen sääntö, että pelin voi voittaa vain jos:

  1. Pisteiden lukumäärä on 3,6,9,.. eli jaollinen 3:lla
  2. Pisteitä on enemmän kuin 0.
  3. Pisteitä ei ole 50, 100, 150,… eli lukumäärä ei ole jaollinen 50:llä
#

Tehtävä 8. Jaollisuus

Tehtävä funktio nimeltä VoikoVoittaa, joka palauttaa tiedon siitä, voiko Silakan Saalistaminen -pelissä voittaa. Säännöt olivat edellä. Koska pistemäärä riippuu silakoiden määrästä, se ei voi koskaan olla negatiivinen. Aloita kirjoittamalla funktion esittelyrivi, tynkä, kommentit ja testit. Sitten toteuta funktio niin, että testit menevät läpi.

    /// <summary>
    /// </summary>
    /// <param name="pisteet"></param>
    /// <returns>true jos pelissä voi voittaa</returns>
    /// <example>
    /// <pre name="test">
    /// </pre>
    /// </example>

 

Esittelyrivi, tynkä, kommentit ja testit

Ongelman hahmottamista

Malliratkaisu

Toisenlainen malliratkaisu

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

8.2 Luvun sanallinen vastike

Pelissä Nappaa naakka on keräyttyjen naakkojen lukumäärän mukaan seuraavat arvostelut:

  • 0-3: umpisurkeaa
  • 4: aloittelija
  • 5: kohtuullinen nappaaja
  • 6-7: mestari naakan nappaaja
  • 8: naakan nappaajien kuningas
  • 9-: huijari, näin montaa naakkaa ei ole pelissä
#

Tehtävä 2.1 if-lause

Kirjoita funktio NaakkaArvostelu joka pistemäärän perustella palauttaa merkkijonona arvion pelaajan suorituksesta. Käytä vain if-lauseita. Aloita kirjoittamalla kommentit, esittelyrivi, tynkä ja testit.

    /// <summary>
    /// </summary>
    /// <param name="pisteet"></param>
    /// <returns></returns>
    /// <example>
    /// <pre name="test">
    /// </pre>
    /// </example>

 

Esittelyrivi, tynkä, kommentit ja testit

Mallivastaus

#

Tehtävä 2.2 switch-case -lause

Kirjoita funktio NaakkaArvostelu joka pistemäärän perustella palauttaa merkkijonona arvion pelaajan suorituksesta. Käytä vain switch-case -lausetta. Kommentit ja testit ovat valmiina

    public static string NaakkaArvostelu(uint pisteet)
    {
        return "umpisurkeaa";
    }

 

Mallivastaus

#

Tehtävä 2.3 Taulukolla

Kirjoita funktio NaakkaArvostelu joka pistemäärän perustella palauttaa merkkijonona arvion pelaajan suorituksesta. Käytä taulukkoa. Kommentit ja testit ovat valmiina

    public static string NaakkaArvostelu(uint pisteet)
    {
        return "umpisurkeaa";
    }

 

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa? Riittääkö että vinkkejä tulee enemmän kerralla eikä pikkupaloissa kuten d3 harjoittelussa?

 

#

Demo 9

#

9.1 Montako samojen joukkoa

#

Tehtävä 1. Peräkkäisten tutkiminen

Kirjoita funktio SamojenJoukkojenMaara, joka laskee montako sellaista osajoukkoa taulukosta löytyy, jossa peräkkäiset luvut ovat samoja. Esimerkiksi joukossa {3,3, 4,4,4 ,1, 2,2, 9,9, 1, 9,9} on osajoukot: {3,3}, {4,4,4}, {2,2}, {9,9} ja toinen {9,9}, joissa peräkkäiset luvut ovat samoja ja noita osajoukkoja on siis yhteensä 5 kappaletta. Tehtävässä ei tarvitse muodostaa osajoukkoja, riittää niiden määrän laskeminen. Aloita täydentämällä esittelyrivi, tynkä, kommentit ja testit. Aja testit, näe punaista ja sitten kirjoita toteutus.

    /// <summary>
    /// Lasketaan joukossa olevien samoista luvuista muodostuvien
    /// osajoukkojen määrä.  Yhden luvun joukkoja ei lasketa.
    /// </summary>
    /// <param name="???">?????</param>
    /// <param name="???">?????</param>
    /// <returns>luku jolla pienin jakojäännös</returns>
    /// <example>
    /// <pre name="test">
    ///   int[] luvut = {3,3, 4,4,4 ,1, 2,2, 9,9, 1, 9,9};
    ///   SamojenJoukkojenMaara(luvut) === ???;
    ///   ??? TÄYDENNÄ KATTAVAT TESTIT
    /// </pre>
    /// </example>
    JULKISUUS STATICVAIEI TYYPPI SamojenJoukkojenMaara(PARAMETRIT)

 

Esittelyrivi, tynkä, kommentit ja testit

Ratkaisun hahmottelua

Peräkkäiset eivät samoja

Mutta?

Mallivastaus

Mallivastaus aloittaen 0:sta

Mallivastaus foreach

Mallivastaus ilman silmukan jälkeistä korjausta

#

9.2 Vektorit ja viivat

Piirrä seuraavan kuvan mukaiset portaat viivoilla. Eli tee aliohjelma PiirraViiva niin, että se aloittaa viivan parametrina viedystä pisteestä ja piirtää se parametrina vietyyn suuntaan. Lopuksi palautetaan piirretyn viivan loppupiste. Ideana on että, kun viivan piirtävä aliohjelma aina palauttaa tiedon siitä mihin lopetti, niin seuraava viiva voidaan suoraan aloittaa tästä.

#
#

Tehtävä 2: Viivan piirto ja siirtymä

Paina Näytä koko koodi, tutki pääohjelmaa, kommentteja ja aloita tarvittavan aliohjelman teko esittelyrivillä ja tyngällä. Sitten täydennä koodi niin, että tarvittava viiva piirretään joko leveänä ja matalana suorakaiteena tai kapeana ja korkeana suorakaiteena.

    Täydennä tähän aliohjelma esittelyrivi ja toteutus

 

Esittelyrivi ja tynkä

Viivan pituus ja leveys

Viivan siirto

Mallivastaus

Mitä pitäisi vielä korjata jotta pääohjelmaa voitaisiin jatkaa riveillä:

        piste = PiirraViiva(this, piste, -pysty);
        piste = PiirraViiva(this, piste, -pysty);
        piste = PiirraViiva(this, piste, -vaaka);

Mallivastaus negatiivisille suunnille

9.3 Portaat ylös ja alas

Muutetaan seuraavaksi pääohjelmaa niin, että sillä voidaan piirtää mielivaltainen määrä portaita.

#

Tehtävä 3: Portaat ylös ja alas

Paina Näytä koko koodi, tutki pääohjelmaa, kommentteja ja aloita tarvittavan aliohjelman teko esittelyrivillä ja tyngällä. Sitten täydennä koodi niin, että PiirraPortaat toimii ja piirtää halutun määrän portaita ylös ja alas.

    NÄKYVYYS STATICVAIEI TYYPPI PiirraPortaat(PARAMETRIT)
    Täydennä tähän aliohjelma esittelyrivi ja toteutus

 

Suunnittelu

Mallivastaus

#

Kirjoita tähän oliko mallitehtävästä hyötyä ja mikä oli sinulle tässä hankalaa?

 

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.