Demo 5
Huomautus: Lopulliset demotehtävät julkaistaan aina tasan viikkoa ennen deadlinea. Demotehtäviin saattaa ennen sitä tulla muutoksia tai korjauksia. Tehtäviä voi tulla lisää tai tehtäviä voi poistua. Tehdessäsi tehtäviä ennen virallista julkaisua, ota tekemästäsi koodista aina varmuuskopio omalle tietokoneellesi.
Palauta viimeistään ma 15.2. klo 11:59. Läpikäynti klo 12-14.
- Muista: Harjoitustyön suunnitelma täytyy olla hyväksyttynä demo 5:n palautuksen määräaikaan mennessä.
- Tehtäviä kannattaa tehdä Visual Studiossa, jolloin niitä voi debugata samalla ja etsiä mahdollisia virheitä siitä, miksi silmukka tms ei toimi. Kun vastauksia kopioi Visual Studiosta TIMiin, kannattaa olla huolellinen että kopioi nimenomaan sen osan, mikä TIMiin pitäisi kirjoittaa. Klikkaa TIMistä tehtävän kohdalta
Näytä koko koodi
-näppäintä, niin näet mitä kaikkea tehtävään on jo valmiiksi täytetty. - Tehtävien nimeämisestä: Anna
cs
-tiedostoille kuvaavat nimet. Esim.G1.cs
on huono. Opetellaan käyttämään nimiä, jotka toimisivat oikeassakin ohjelmassa.Pallopeli.cs
on taas paljon parempi. Muista myös luokan ja tiedoston nimen suhde. - Vinkki: Askella luentomonisteessa silmukka- ja taulukkoesimerkkejä läpi ja seuraa mitä silmukoissa tapahtuu. Nuo esimerkit ovat toistaiseksi hieman huonosti näkyvillä ja ne hyppäävät esiin kun vie hiiren niiden päälle. Niitä löytää kun etsii jonoa "Animaatio:".
- Tällä demokerralla on kaksi TDD tehtävää. Tämä tarkoittaa sitä, että testien käytöstä voi poikkeuksellisesti saada jopa kaksi pistettä.
Monisteen lisäksi kannattaa lukea:
Osaamistavoitteet
Tämän demokerran päätteeksi
- ymmärrät mihin taulukkoa voi käyttää ja osaat tehdä taulukon
- ymmärrät silmukkarakenteiden (
while
,for
,do-while
) toimintaperiaatteen - algoritminen ajattelusi kehittyy
Ajankäyttösi tällä viikolla (0.5 p.)
Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.
Demokerran päätteeksi kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla (kalenteriviikko, ma klo 00:00 -- su klo 23:59) käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit.
Tehtävä 1*
Tässä tehtävässä ei ole valmiina mitään koodia. Kirjoita ohjelmaan, luokka, pääohjelma ja tarvittavat using-lauseet.
Tee kohdissa a ja b ohjelmat, joissa silmukkaa käyttäen tulostetaan
1a) luvut 0--100, jokainen luku omalle rivilleen. Tulosteessa ei saa olla mitään muuta. (0.5 p.)
Arviointi: Vastaus kääntyy ja siinä on käytetty silmukkaa, 0.2 p. Oikeasta tulostuksesta lisäksi 0.3 p. Tehtävässä on automaattinen arvostelu.
Jos kirjoittaa vain luokan ja pääohjelman niin ajaessa huutaa erroria “Console does not exist in the current context”. Korjautui kun lisäsi alkuun “using Systems;”-litanian.
—Olikohan mulla tässä mikä virhe, kun saan vain 0.2p? Tulostus kuitenkin näyttää ihan oikealta.
#-
Katso tehtävänannosta tarkasti mitkä luvut piti tulostaa. -AJL
—Antaa vain 0.2 pistettä. Mitä pitää muuttaa ohjelmassa? Tulostaa ainakin oikein. edit: numero 0 unohtui!
—1b) parittomat luvut 1, 3, 5, ..., 99, jokainen luku omalle rivilleen. Tulosteessa ei saa olla mitään muuta. (0.5 p.)
Arviointi: Silmukan käyttämisestä 0.2 pistettä, oikeasta tulostuksesta 0.3 pistettä. Tehtävässä on automaattinen arvostelu.
onko tarkoitus että luvun 5 jälkeen luvut toistuu normaalin lukujonon mukaan vai onko jokaisessa kahden luvun ero?
Vain parittomat luvut tulostetaan, ei muita. -AJL
—Tulostuu ihan oikein, mutta pisteitä herui vain 0,2. Mikä meni pieleen?
Kokeile ottaa ylimääräiset välilyönnit pois tulostuksesta. -AJL
—Jostain syystä ohjelma ajaa aina 199 riville saakka, eikä pysähdy looppiin asetettuun <100 ehtoon.
Tulosteessa saa olla vain luvut 1, 3, …, 99, ei muuta. -AJL
—Tehtävä 2
Tee ohjelma joka tulostaa luvut 1--100, ja jos luku on jaollinen 5:llä, tulosta luvun perään teksti "Hep!" . Huom! Tässä tehtävässä pitää tulostuksen olla täsmälleen kuten mallissa. Ota huomioon välit ja rivinvaihdon kohta.
1
2
3
4
5 Hep!
6
7
8
9
10 Hep!
Arviointi: Vastaus kääntyy ja siinä on käytetty silmukkaa, 0.4 p. Oikeasta tulostuksesta lisäksi 0.6 p. Tehtävässä on automaattinen arvostelu.
Tehtävä 3
ei näkökjään ole automaattista arvostelua tässä, vaikka vastaus ois oikein niin silti näyttää points 0 / 0.3 eli pitää siis kokonaan asettaa pisteet ite vai?
Kyllä. -JuhoK
—Tee kohdat a, b ja c. Aseta pisteet Set Custom Points -toiminnolla.
\((a)\) Tee aliohjelma TulostaKertotauluFor(n)
, joka tulostaa luvun n
kertotaulun (lukujen 1 \(-\) 10 tulo luvun n
kanssa) for
-silmukalla. Esimerkiksi kutsu TulostaKertotauluFor(3)
tulostaisi:
Kohdassa c sanotaan että siitä voisi saada 0.4 pistettä.
Jep, näin on. Korjasin tehtävänantoa. -AJL
— 1 * 3 = 3
2 * 3 = 6
3 * 3 = 9
4 * 3 = 12
5 * 3 = 15
6 * 3 = 18
7 * 3 = 21
8 * 3 = 24
9 * 3 = 27
10 * 3 = 30
\((b)\) Tee aliohjelma TulostaKertotauluWhile(n, m)
, joka tulostaa luvun n kertotaulun lukuun m saakka. Toteutus pitää tehdä while
-silmukalla. Esimerkiksi kutsu TulostaKertotauluWhile(3, 5)
tulostaisi
1 * 3 = 3
2 * 3 = 6
3 * 3 = 9
4 * 3 = 12
5 * 3 = 15
Kutsumalla TulostaKertotauluWhile(3, 0)
ei siis saa tulostua mitään.
Muista laittaa pisteet Set Custom Pointsilla.
\((c)\) Tee aliohjelma kuten kohdassa \((b)\) mutta käyttäen do-while
-silmukkaa.
Tehtävä 4
M: 12.4 Muokattavat merkkijonot: StringBuilder.
Pääohjelmassa (annettu alla valmiiksi) kutsutaan LisaaAlkuunJaLoppuun
-nimistä aliohjelmaa. Toteuta kyseinen aliohjelma. TODO Void.
public static void Main(string[] args)
{
StringBuilder jono = new StringBuilder("kissa istuu");
LisaaAlkuunJaLoppuun(jono, "***"); // jono muuttuu aliohjelmassa
Console.WriteLine("Jono on nyt " + jono);
// tulostaa: Jono on nyt *** kissa istuu ***
}
Vinkki: Katso StringBuilderin dokumentaatiosta miten voit lisätä tekstiä jonon keskelle ja miten loppuun.
Tehtävässä saa sen ajamisesta 0.4 p. + testien läpäisemisestä + 0.5 p. + dokumentaatiosta 0.1 p.
Huomaa, että on myös lisättävä välilyönnit kuten esimerkissä. Ja erityisesti huomaa, että lisättävä jono pitää voida olla mitä tahansa, muutakin kuin tähtiä. Katso testit, kun painat Näytä koko koodi
!
Kirjoita itsellesi esimerkkijonoja ja niiden indeksejä. Esimerkiksi lisätään jonoon "kissa" sana "kiva" alkuun ja loppuun.
01234
kissa
012345678
kivakissa
Ei hyvä, tarvitaan vielä välilyönti. Välilyönnin lisäämiseksi pitäisi löytää sen paikka tuosta, eli jotenkin tuo 4. Mutta se on turhan työlästä! Entä jos aloitetaan välilyönnin lisäämisellä alkuun:
012345
kissa
0123456789
kiva kissa
01234567890
kiva kissa
012345678901234
kiva kissa kiva
Katso luentomonisteen kohdasta StringBuilder miten voi lisätä ja siellä olevia esimerkkejä. Katso StringBuilderin dokumentaatiosta kohdasta Methods
, miten voit lisätä tekstiä jonon alkuun ja miten loppuun.
Jos et löydä suoraan "oikeaa" aliohjelmaa dokumentaatiosta, niin mieti, onko jokin aliohjelmista sellainen, joka lisää jonon haluttuun paikkaan? Jos on, niin mikä on se indeksi eli paikka, johon haluta lisätä? Mitä parametreja on siinä, mitä haluat lisätä? Noita saman nimisiä voi olla todella monta ja niistä on valittava se, missä on oikeat paramerit. Kun olet sen löytänyt, klikkaa dokumentaatiosta sitä aliohjelman nimeä, jota haluat käyttää ja tutki tarkemmin sen kuvausta.
Puuttuuko testeistä j1:n vertailurivi tarkoituksella, ja jos niin miksi?
VL: Luulisin että vahingossa unohtunut. Siihenhän voi periaattessa itse lisätä uusia testirivejä kun laittaa koko tuon <example>
hässäkän.
Jep, oli unohtunut. Lisäsin sen nyt paikalleen. -AJL
—Tehtävä 5*
M: 15. Taulukot, 16. Toistorakenteet.
Seuraavissa kohdissa taulukko
tarkoittaa int
-tyyppisiä kokonaislukuja sisältävää taulukkoa.
Toteuta aliohjelma TulostaYli(taulukko, raja)
, joka tulostaa parametrina annetusta taulukosta kaikki ne luvut, jotka ylittävät raja
-parametrina annetun luvun.
Huomaa, että tämä on void
-aliohjelma, joten se ei palauta mitään arvoa.
Rajan ylittävät luvut tulee tulostaa samalle riville välilyönnein eroteltuna. Esimerkiksi pääohjelma...
public static void Main(string[] args)
{
int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
TulostaYli(luvut, 4);
}
...tulostaisi...
12 5 9 7 9
Arviointi: Tehtävässä saa sen ajamisesta 0.4 p. ja oikeasta tulostuksesta 0.6 p. Tehtävässä on automaattinen arvostelu.
saan tästä oikean tulostuksen näkyviin, mutta pointsit ei päivity?
VL: Vertasitko onko tulostus saman näköinen kuin tehtävän määrittelyssä?
—Aivan mielenvikainen tehtävä. Lentääkö kurssilta nyt pihalle jos ei saanut tuota tehtyä oikein?
Oleellisin virhe on että sinulta puuttuu tulostaminen kokonaan. Eli Write tai WriteLine -metodeita, näistä löytyy käyttöesimerkkejä kurssimonisteesta. Yrität if-lauseen sisällä ilmeisesti muokata taulukkoa, mikä ei ole sallittua. Lisäksi tämä on void-aliohjelma, eli ei saa palauttaa mitään (aliohjelman esittelyriviä täytyy myös muuttaa), tähän asiaan löytyy lisäapua TIMistä “Lisäsivut” -> “Monisteen täydennykset” -> “Aliohjelmat”. -JuhoK
—Täällä tulee kanssa hylky!!
Tallennatko Timiin vastauksesi niin mekin pääsemme tarkastelemaan sitä. -AJL
—Saan oikean tulostuksen, mutta erroria pukkaa. Mistä kiikastaa? edit. Sain korjattua
—Tehtävä 6
Toteuta funktio SummaYli(taulukko, raja)
, joka ottaa parametrina taulukon sekä raja-arvon, ja palauttaa summan niistä luvuista, jotka ylittävät raja-arvon. Esimerkiksi pääohjelma...
public static void Main(string[] args)
{
int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
int summa = SummaYli(luvut, 4);
Console.WriteLine("Yli 4 olevien lukujen summa on: " + summa);
}
…tulostaisi…
Yli 4 olevien lukujen summa on: 42
Huomaa, että tämä funktio ei saa tulostaa mitään. Tulostaminen tehdään pääohjelmassa (ks. Näytä koko koodi).
Arviointi: Ajamisesta 0.4 p. ja testien läpäisemisestä 0.6 p. Tehtävässä on automaattinen arvostelu.
Mikä tässä on väärin? Lopputulos kuitenkin oikein.. Yritetty uusiksi, mutta ei vaan ymmärrä. :-)
Testattavan funktion täytyy olla julkinen, ts. public
-sana puuttuu. Jos näkyvyysmäärettä ei kirjoiteta, funktion näkyvyydeksi tulee private
. -AJL
Painoitko Aja ja sitten Test? -AJL
—En painanut Test erikseen, mutta meni näköjään läpi kun painoin.. Ehkä tuo test painallus olisi hyvä olla tuossa tehtävän annossa.. Kiitos!
—Tehtävä 7
Et tarvitse Visual Studiota/C#:ia tässä tehtävässä.
Olkoon meillä 4 x 4 matriisi, siis 2-ulotteinen taulukko (voit ajatella ruudukkona), jossa on 16 alkiota. Tässä hakasulut kuvaavat vain matriisin reunoja, ei mitään sen "syvällisempää".
[ 1 0 1 1 ]
[ 0 1 1 0 ]
[ 1 0 0 0 ]
[ 1 0 0 1 ]
Ykköset kuvaavat tässä "sopuleita", ja nollat ovat tyhjiä paikkoja.
Lisäksi olkoon seuraavanlainen algoritmi:
Jos ruudussa on sopuli (eli alkion arvo on 1)
* Jos sillä on naapureita (ykkösiä) yksi tai
nolla kappaletta, se kuolee yksinäisyyteen
(muuttuu nollaksi).
* Jos sillä on neljä tai enemmän naapureita,
se kuolee ylikansoitukseen (muuttuu nollaksi).
* Sellainen, jolla on täsmälleen kaksi tai kolme
naapuria, selviää hengissä.
Jos ruutu on tyhjä (eli arvo on 0)
* Jos on täsmälleen kolme naapuria, ruutu "herää
eloon" (muuttuu ykköseksi).
Tee yllä olevalle matriisille kolme seuraavaa generaatiota, eli käy jokainen alkio läpi yllä annettua algoritmia käyttäen. Naapureita ovat sekä pysty-, vaaka- että "vinot" naapurit.
Tee tehtävä kahdella eri tavalla: 1. Niin, että aina teet uuden tyhjän taulukon ja siihen vastinpaikkaan kuuluvan alkion arvon katsot edellisestä taulukosta em. säännöillä. 2. Kopioit edellisen taulukon ja lähdet kopiota muuttamaan "laskemalla" arvot kopiotaulukosta itsestään. Alkiot käsitellään vasemmalta oikealle, ylhäältä alas.
Tuleeko eri tavoilla tehtynä eri tulos? Miksi?
*Palauta vastaus, joka sisältää alkuperäisen taulukon lisäksi kumpaankin eri tapaan kolme uutta samankokoista taulukkoa. Kirjoita taulukot allekkain.
TDD1
- (0.5 p.) Lataa ja asenna ComTest. Voit palauttaa vastauksen kun ko. sivulla oleva esimerkkitesti (Example Test) menee läpi. Kirjoita vastaukseen hieman kommenttia sitiä, kuinka asennus onnistui.
En tajua miksi ComTest antaa aina saman ongelman “CS0234”. Se valittaa tuosta namespacesta jokaisen koodin kohdalla, paitsi testikoodissa. Voi olla hyvin mahdollista, että en vain osaa käyttää tuota oikein, mutta olisiko vinkkejä tähän:D?
VL: Hyvin vaikea sanoa kun sulla ei tässä kohtiole mitään koodia mihin olet tämän kommentin jättnäyt. Tuossa LakeYhteen-kohdassahan näyttää toimivan ihan hyvin. Tosin nykyisin sitä luokan nimeä ei siihen kutsun eteen kannata kirjoittaa vaikka saakin kirjoittaa.
—Minulla ComTest on toiminut kyllä jo aiemmin, mutta tuo Example Test aiheutti pitkän listan erroreita. Googletin virhekoodia ja löysin ratkaisuksi laittaa raksin ruutuun “Create a project directory within the solution directory” uuttaa projektia luodessa Visual Studiossa. Tämän jälkeen Example Test meni läpi.
—Sain toimimaan kun laitoin rastin uutta projektia luodessa “place solution and project in the same directory”! Kiitos
—- (0.5 p.) Täydennä seuraavaan funktioon ComTest-testit, missä toinen laskettavista luvuista on negatiivinen, sekä ainakin yksi sellainen testi, missä tulos on negatiivinen. Paikka, mihin testit kirjoitetaan on tässä kommentoitu TODO-sanalla. Kirjoita myös ympärille luokka, sekä luokan pääohjelma omatoimisesti. Pääohjelma voi olla "tyhjä", eli sen ei tarvitse tehdä mitään. Palauta tehtäväkenttään koko luokka.
Toteuta myös itse funktio ja täydennä puuttuvat sanat, jotka on alla xxx
:llä. Aja testit ja totea että ne menevät läpi.
/// <summary>Lasketaan yhteen kaksi lukua</summary>
/// <param name="luku1">ensimmäinen yhteenlaskettava</param>
/// <param name="luku2">toinen yhteenlaskettava</param>
/// <returns>lukujen summa</returns>
/// <example>
/// <pre name="test">
/// Laskut.LaskeYhteen(2, 3) ~~~ 5;
/// Laskut.LaskeYhteen(2.4, 0) ~~~ 2.4;
/// // TODO: testi jossa toinen on negatiivinen ja tulos positiivinen
/// // TODO: testi jossa toinen on positiivinen ja tulos negatiivinen
/// </pre>
/// </example>
public static xxx LaskeYhteen(xxx luku1, xxx luku2)
{
// toteuta funktio
}
Huomaa: Liukulukuja (eli double
, float
tai decimal
-lukuja) 'ei saa' verrata ComTestissa kolmella yhtäsuuruusmerkillä (===
), vaan ''niitä täytyy verrata kolmella matomerkillä ~~~
''.
Syy, miksi reaalilukuja ei voi (muutamia poikkeuksia lukuunottamatta) verrata ComTestissä ===
-merkinnällä, eikä tavallisessa koodissa ==
-vertailuoperaattorilla, on, että tietokoneella voidaan tarkasti ilmoittaa ainoastaan 2-potenssien summia (ks. binäärilukujen perusteet?)
Esimerkiksi luku 0.1 ei ole 2-potenssien summa, joten tietokoneen näkökulmasta se onkin tietokoneen näkökulmasta jotain himpun verran yli 0.1 (ks. http://bit.ly/1589Imk).
Luku 0.75 sen sijaan onkin 2-potenssien summa (ks. http://bit.ly/zn6R9Y)...
\(1*2^{-1} + 1*2^{-2}\)
...joten tietokoneen näkökulmasta se on tasan 0.75.
Aihetta käsitellään vielä luennoilla ja demoissa, mutta tässä vaiheessa on tärkeintä muistaa:
- jos funktion paluuarvo
double
, niin vertailu tehdään ComTestissa~~~
-merkinnällä - "normaalissa" koodissa ollaan varovaisia
double
-lukujen vertailuun==
-operaattorilla, koska yleensä se menee pieleen
Tehtävästä saa pisteet (0.5 p.) kun testit menevät läpi.
Ville 1
Tee Ville-tehtävät: 4.5, 4.6, 5.1-5.5, 9.1, 9.2, 9.3.
Huom: Lue tarkasti kysymykset (montako kertaa, montako tulostetaan). Villen mallissa loppusulkuun }
mennään kun silmukka loppuu.
TDD2
Jos tarkistat vähintään kahden funktion toiminnan Comtestillä, saat merkitä tästä tehtävästä yhden pisteen. Huom: Tehtävän TDD1 testeistä ei saa tässä enää pisteitä :-)
Kirjoita vastauslaatikkoon mihin tehtävään teit Comtest-testit. Voit kirjoittaa myös ajatuksia miltä testaaminen tuntui
Taulukon testaaminen Comtestilla:
/// int[] luvut = {1,3,6};
/// String.Join(luvut, " ") === "1 3 6";
Jos haluat viedä testiin taulukon ilman, että luot apumuuttujaa, niin tee seuraavasti.
/// SuurinJaPienin.Pienin(new int[]{1, 2 ,3}) === 1;
Valitettavasti 2-ulotteiselle taulukolle ei ole vastaavaa Join
-funktiota, vaan sellaisen joutuu tekemään itse (Voit copy-pastettaa tämän tai tehdä oman.)
StringBuilderin arvon testaaminen pitää suorittaa ToString()
-metodin avulla
/// StringBuilder j1 = new StringBuilder("123");
/// Jonoja.LisaaAlkuunJaLoppuun(j1, "XX");
/// j1.ToString() === "XX 123 XX";
TDD-pohja
Jos ComTest ei toimi koneellasi, voit Copy/Pasteta ohjelmia alla olevaan laatikkoon ja testata siinä.
B1
Tee konsolisovellus-peli, jossa käyttäjän pitää arvata ohjelman arpoma kokonaisluku. Ohjelman tulee kysyä lukua kunnes käyttäjä arvaa oikean luvun, ja kullakin kerralla antaa sopiva ohjeteksti. Alla mallituloste.
TODO: Tim ei käsittele syötettä joten tätä ei voi kokeilla Timissä.
Aseta itsellesi pisteet Custom Points -toiminnolla.
Arvaa luku väliltä 1-100 > 27
Liian pieni!
Arvaa luku väliltä 1-100 > 73
Liian pieni!
Arvaa luku väliltä 1-100 > 89
Liian iso!
Arvaa luku väliltä 1-100 > 82
Liian iso!
Arvaa luku väliltä 1-100 > 78
Liian iso!
Arvaa luku väliltä 1-100 > 76
Liian pieni!
Arvaa luku väliltä 1-100 > 77
Oikein! :)
Visual Studiossa kaikki menee hyvin ja TIMkin hyväksyy, mutta onkohan jotain pielessä, kun “rullaa” tulostusta ikuisesti TIMin puolella?
Oikea luku pitää arpoa, ei asettaa kiinteästi. -AJL
—toimiii visual studiossa niinkuin kuuluu mutta ei timissä? missä vika?
tätä ei voi kokeilla Timissä. -AJL
—B2
M: 12. Merkkijonot. Tee funktio MuutaKirjaimet
, jota voi kutsua esimerkiksi seuraavasti:
string jono = "Kalle tykkää jätskistä.";
string tulos = MuutaKirjaimet(jono, 'k', 'g');
Funktio ottaa kolme parametria: (1) merkkijonon, (2) korvattavan merkin, ja (3) merkki jolla korvataan.
Funktio palauttaa uuden merkkijonon, jossa on vaihdettu annetut merkit (toinen parametri) jälkimmäiseksi merkiksi (kolmas parametri).
Funktion tulee käsitellä sekä isot että pienet kirjaimet huolimatta siitä onko argumenttina annettu suuraakkosia vai pienaakkosia. Esimerkiksi yllä oleva kutsu ottaisi vastaan jonon "Kalle tykkää jätskistä." ja palauttaisi jonon "Galle tyggää jätsgistä."
Tässä esimerkki, miten kyseistä funktiota voitaisiin käyttää.
Toistan mitä sanot, mutta en osaa sanoa kirjainta g.
Anna teksti > Kalle tykkää jätskistä.
Sanoit siis : Galle tyggää jätsgistä.
Tehtävässä saa sen ajamisesta 0.2 p. + testien läpäisemisestä + 0.7 p. + dokumentaatiosta 0.1 p.
Ratkaisussa ei saa käyttää valmiita merkkijonon käsittelyyn liittyviä metodeja, kuten String.Replace.
B3
Ota Demo 4 guru-tehtävän pallopelin mallivastaus.
(Saat halutessasi myös koko demo4:n mallivastauskansion zipattuna tästä linkistä.)
Katso Jypelin ohjeista miten lisätään pistelaskuri ja sille tapahtuma kun tulee tarpeeksi pisteitä.
Lisää pallopeliin laskuri jonka arvo kasvaa aina kun saat "metsästettyä" pallon puolen välin yläpuolella. Kun 10 palloa on saatu poksautettua, lisää tähän joku onnittelu (vaikka MessageDisplay-oliolla).
Jos et halua käyttää kuvia, kommentoi koodista pois kuviin liittyvät asiat tai laita omia kuvia tilalle.
G1-2 (2 p.)
Tee konsoliohjelma, joka tulostaa vaiheittain tehtävän 7 generaatioita.
Testaamisen helpottamiseksi voit käyttää valmista funktiota, joka palauttaa matriisin merkkijonona.
G3
- Mitä eroa on seuraavilla taulukoilla?
- Miksi C#:ssa on kaksi eri tapaa ilmaista moniulotteisia taulukoita?
int[,] a = new int[3, 2];
int[][] b = new int[3][];
G4 (1 p.)
Tee tehtävä 6 käyttäen C#:n LINQ:lla tai lambdoilla. Vinkki (jos tarvit :)): Saat muutettua Where
:n palauttaman IEnumerable
:n taulukoksi käyttäjällä ToArray
-metodia.
Tehtävässä saa sen ajamisesta ilman virheitä 1.0 p.
Huomautus: Aiemmin tehtävässä mainittiin tehtävä 5:stä. Jos teit sen niin, niin voit antaa itsellesi pisteen.
G5 (1 p.)
Tehtävänantoa tarkennettu 11.2. klo 22:00.
Tee void-funktio SuurempiJaParillinenIndeksi
, joka ottaa kaksi parametria: int[]-taulukon (luvut) ja yhden int-luvun (raja). Funktion tulee tulostaa ne luvut, jotka ovat suurempia kuin raja
ja jotka ovat parillisissa indekseissä.
Esimerkiksi kutsu
int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
SuurempiJaParillinenIndeksi(luvut, 4);
tulostaisi
12 5 7
Arviointi: Tehtävässä saa pisteitä virheittä ajamisesta 0.1 p + oikeasta tulostuksesa 0.8 p ja dokumentaation katsomisesta 0.1 p.
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.