Harjoitustehtävien harjoittelu

Tässä dokumentissa voit harjoitella harjoitustehtäviä vastaavia tehtäviä. Näistä ei kuitenkaan saa hyväksiluettavia harjoitustehtäväpisteitä. Osassa tehtävistä pistemäärä on kuitenkin näkyvillä. Kunkin tehtävän perässä on malliratkaisu.

Harjoitustehtävät 3

3.4 Funktioita

Malli tehtävään Funktioita.

Tehtävän aluksi kannattaa katsoa Näytä koko koodi. Ja sitten välillä pistää se pois, koska aliohjelmaa tehdessä ei saa enää ajatella, että mistä sitä kutsuttiin. Kun valmis, muista Aja ja Test sekä katsoa myös Document.

# kuutio

Näkyvyysvinkki

STATICvaiEI-vinkki

PALUUARVONTYYPPI -vinkki

FUNKTIONNIMI -vinkki

PARAMETRINTYYPPI -vinkki

NIMI -vinkki

LASKUTOIMITUS -vinkki

Mallivastaus

# hyotyd3t4

Harjoitustehtävät 4

4.2 Merkkijonofunktio

Esimerkki, jossa on samoja elementtejä kuin Tehtävässä 2. Tämä tehtävä on "vaikeampi" kuin varsinainen harjoitustehtä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 halutaa tulostuvan lainausmerkki, pitää laittaa lainausmerkin eteen takakeno \ jotta se tulkitaan tavalliseksi merkiksi, ei merkkijonon sulkevaksi lainausmerkiksi.

# onkopitka

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

Toteutuksen aloittaminen

Pituuden vertailu

Entä jos ehto ei toteudu?

Pääohjelman ajaminen

Mallivastaus

# hyotyd4t2
# d5

Harjoitustehtävät 5

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

# d5t1

5.1 StringBuilder

# lisaakeskelle

Vinkit

Mallivastaus

Parannus testeihin: muutetaan sivuvaikutukselliseksi funktioksi

# hyotyd5t1
# d5t2

5.2 Taulukot ilman silmukkaa

# montako3

Vinkit

Mallivastaus

# hyotyd5t2
# d5t3a

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.

# tulostatoiseen

Vinkit

Mallivastaus - while

Mallivastaus - for

Mallivastaus - do-while

# hyotyd5t3
# d5t4b

5.4 Taulukot silmukalla

# montakoN

Vinkkejä

Mallivastaus - while

Mallivastaus - for

# hyotyd5t4
# d6

Harjoitustehtävät 6

# d6tauno2

6 Tauno 2. Matriisin indeksit

Harjoitustehtäväkerran 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]:

# d5tauno21

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.

# d6tauno22

Naapureiden osoitteet

Mallivastaus

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

# d6tauno23

Miksi näin

Mallivastaus

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

# d6tauno24

Erotaulukko

Mallivastaus

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

# d6tauno25

Mallivastaus

# hyotyd6tauno2
# d6t2

6.2 Ehto ja etumerkin vaihtaminen

# d6t2a

Tynkä, kommentit ja testit

Miten testataan ja miten etumerkki vaihdetaan

Mallivastaus

# d6t2b

Tynkä, kommentit ja testit

Summa ja testaaminen

Mallivastaus

# hyotyd6t2
# d6t3

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 harjoitustehtävän 6:n tehtävä 3:ssa vaadittava EtsiLahin. Molemmissa mitataan "paremmuttaa" jollakin tavalla ja etsitään sitä, jolla on mittarin mukana paras tulos.

# d6t3etsiminen

Esittelyrivi, tynkä, kommentit ja testit

Ongelman hamottaminen

Mallivastaus (melkein)

Mallivastaus (melkein) - foreach

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

Puuttuvat tarkastukset

# hyotyd6t3
# d7

Harjoitustehtävät 7

# d7t1

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 tehtävässä ole missään tapauksessa tarkoitus tulostaa, vaan luoda palloja, joiden keskipiste on paikassa p (tai pisteet[i] jos ei käytetä apumuuttujaa).

# d7t1pisteettaulukossa

Esittelyrivi, kommentit ja tynkä

Taunomainen ratkaisu

Mallivastaus silmukalla

Mallivastaus foreach-silmukalla ilman apumuuttujaa

# hyotyd7t1
# d7t2

7.2 Arvo lukuja taulukkoon

# d7t2arvolukuja

Esittelyrivi ja tynkä

Mallivastaus

# hyotyd7t2
# d7t3

7.3 Etsi vektoritaulukosta

# d7t3indeksilahella

Esittelyrivi, tynkä, kommentit ja testit

Mallivastaus

# hyotyd7t3
# d7t5

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ä.

# laskeisot

Esittelyrivi, tynkä, kommentit ja testit

Funktion toteutus

# hyotyd7t5
# d7t6a

7.6 Taulukon vastinalkioiden summataulukko

# Vastinalkiot

Esittelyrivi ja tynkä

Tulostaulukon luominen

Mallivastaus

# hyotyd7t6a
# d7t6b

7.6 Matriisin palauttamien

# matriisinkertominenvakiolla

Esitelyrivi ja tynkä

Tulosmatriisin luominen

Alkioiden läpikäynti

Mallivastaus

# hyotyd7t6b

Harjoitustehtävät 8

# d8t1

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ä
# jaollisuus

Esittelyrivi, tynkä, kommentit ja testit

Ongelman hahmottamista

Malliratkaisu

Toisenlainen malliratkaisu

# hyotyd8t1
# d8t2

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ä
# naakkaif

Esittelyrivi, tynkä, kommentit ja testit

Mallivastaus

# naakkacase

Mallivastaus

# naakkataulukko

Mallivastaus

# hyotyd8t2
# d9

Harjoitustehtävät 9

# d9t1

9.1 Montako samojen joukkoa

# d9t1samojenlaskeminen

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

# d9t2

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ä.

# d9t2viivatcache
# d9t2viivat

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.

# d9t3portaatylosjaalas

Suunnittelu

Mallivastaus

# hyotyd9

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