Harjoitustehtävät 5
Osaamistavoitteet
Tämän harjoituksen päätteeksi
- ymmärrät mihin taulukkoa voi käyttää ja osaat tehdä taulukon,
- ymmärrät silmukkarakenteiden (
while,for,do-while) toimintaperiaatteet, - algoritminen ajattelusi kehittyy.
- Tehtäviä kannattaa tehdä Riderissa, jolloin niitä voi debugata samalla ja etsiä mahdollisia virheitä siitä, miksi silmukka tms. ei toimi. Kun vastauksia kopioi Riderista TIMiin, kannattaa olla huolellinen että kopioi nimenomaan sen osan, mikä TIMiin pitäisi kirjoittaa. Mikäli tehtävässä näkyy
Näytä koko koodi-linkki, niin sitä klikkaamalla näet mitä koodia tehtävään on jo valmiiksi täytetty. - Tehtävien nimeämisestä: Anna
.cs-tiedostoille kuvaavat nimet. Esim.G1.cson huono. Opetellaan käyttämään nimiä, jotka toimisivat oikeassakin ohjelmassa.Pallopeli.cson 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 merkkijonoa "Animaatio:".
- Tässä harjoituksessa 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:
T0. Palaute tästä osasta (0,5 p.)
Auta meitä parantamaan tätä kurssia antamalla palautetta tästä kurssin osiosta.
Huom: Vastaa tähän vasta, kun olet valmis tämän harjoitustehtäväkerran tehtävien kanssa
Vastaa alla oleviin kohtiin tämän kurssin osasa käsiteltyjen materiaalien ja tehtävien (luennot, esimerkit, kurssimoniste, harjoitustehtävät) perusteella.
Saat 0,25 pistettä vastaamalla kaikkiin alla oleviin väittämiin.
Kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla käyttämäsi aika: lähiopetukseen osallistuminen, oppimateriaalin lukeminen, harjoitustehtävien tekeminen, luentovideon katsominen, tehtävien purkutilaisuuteen osallistuminen ja niin edelleen.
T1*. Tulostusta silmukalla (1 p.)
Lue ensin monisteesta: 16. Toistorakenteet (silmukat).
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät 1.1 ja 1.2. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä 1.1
Tee ohjelma, joka tulostaa silmukkaa käyttäen luvut 0-100, jokainen luku omalle rivilleen. Tulosteessa ei saa olla mitään muuta. (0,5 p.)
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.
Arviointi: Tehtävässä on automaattinen arvostelu. Jos vastaus kääntyy ja siinä on käytetty silmukkaa, 0,2 p. Oikeasta tulostuksesta lisäksi 0,3 p.
Tehtävä 1.2
Tee ohjelma, joka tulostaa silmukkaa käyttäen parittomat luvut 1, 3, 5, ..., 99, jokainen luku omalle rivilleen. Tulosteessa ei saa olla mitään muuta. (0,5 p.)
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.
Arviointi: Tehtävässä on automaattinen arvostelu. Jos vastaus kääntyy ja siinä on käytetty silmukkaa, 0,2 p. Oikeasta tulostuksesta lisäksi 0,3 p.
T2. Hep! (1 p.)
Lue ensin monisteesta: 16. Toistorakenteet (silmukat).
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee ohjelma, joka tulostaa silmukkaa käyttäen luvut 1-100, ja jos luku on jaollinen 5:llä, tulosta luvun perään teksti "Hep!" .
Ohjelman tulosteen tulisi näyttää täältä:
1
2
3
4
5 Hep!
6
7
8
9
10 Hep!
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.
Arviointi: Tehtävässä on automaattinen arvostelu. Jos vastaus kääntyy ja siinä on käytetty silmukkaa, 0,4 p. Jos tulostus on oikein, eli se täsmää täysin yllä olevan esimerkin kanssa (rivinvaihdot ja välilyönnit), 0,6 p.
Mikäköhän tässä nyt mukamas on eri tavalla kuin esimerkissä? Nevermind, huomasin virheeni.
Sinulla vitosella jaolliset luvut tulostuvat kahdesti -DZ
—T3. Positiiviset ja negatiiviset (1 p.)
Lue ensin monisteesta: 16. Toistorakenteet (silmukat), 15. Taulukot.
Katso esimerkki: Silmukat.cs, esimerkki 3 (hallittu ikuinen silmukka)
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee aliohjelma PosiNega. Aliohjelma ottaa parametrina kokonaislukutaulukon. Aliohjelma lukee taulukkoa niin pitkästi kunnes vastaan tulee luku 0 tai taulukko päättyy. Sitten funktio tulostaa (huomaa tarkka sanamuoto ja huutomerkki) joko
- "Positiivisia!", jos lukujoukossa oli enemmän positiivisia lukuja kuin negatiivisia,
- "Negatiivisia!", jos lukujoukossa oli enemmän negatiivisia kuin positiivisia, tai
- "Yhtä monta!", jos positiivisten ja negatiivisten lukujen määrät olivat samat.
Huomaa, että emme vertaa lukujen summaa, vaan pelkästään positiivisten ja negatiivisten lukujen lukumääriä.
Aliohjelma ei palauta mitään, joten sen palautustyyppi on void.
Alla vielä esimerkkejä aliohjelman toiminnasta:
// Esimerkki 1:
// Taulukossa on kaksi positiivista lukua (2, 7) ja yksi negatiivinen
// luku (-35), joten positiivisia lukuja on enemmän kuin negatiivisia.
PosiNega([2, -35, 7, 0]); // Komentoriville tulostuu "Positiivisia!"
// Esimerkki 2:
// Ennen lukua 0 ei ole mitään lukuja, joten negatiivisia ja positiivisa
// on ikään kuin yhtä monta.
PosiNega([0]); // Komentoriville tulostuu "Yhtä monta!"
// Esimerkki 3:
// Vain ennen lukua 0 olevat luvut otetaan laskuihin mukaan.
// Tässä negatiivisia on kaksi kappaletta, positiivisia nolla.
PosiNega([-3, -10, 0, 5, 1, 3, 10]); // Komentoriville tulostuu "Negatiivisia!"Ohjelman pitää kuitenkin toimia myös muilla kuin esimerkeissä esitetyillä taulukoilla.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Tehtävässä on automaattinen arviointi. Oikein toimista aliohjelmasta annetaan 1 p.
Tehtävässä 3 vastauskentässä ei näy mitään valmista koodia, vaan se sanoo vain, että "File not found: https://gitlab.juy.fi/api..."
—T4. Debuggaus (1 p.)
Lue ensin: 10.2 Debuggaus sekä lisäsivu debuggauksesta.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tässä tehtävässä harjoitellaan debuggausta Riderissa. Tehtävän voi tehdä myös muissa ympäristöissä (esim. Visual Studio), mutta joudut soveltamaan ja esimerkiksi etsimään oikeat näkymät itse.
Tee ConsoleMain-projekti nimeltä Debuggaus. Poista pohjakoodi kokonaan ja liitä sinne seuraava sisältö.
namespace Debuggaus;
public class Debuggaus
{
public static void Main(string[] args)
{
double kolmionKanta = 5;
double kolmionKorkeus = 7;
double kolmionAla;
kolmionAla = KolmionAla(kolmionKanta, kolmionKorkeus);
System.Console.WriteLine(kolmionAla);
System.Console.WriteLine("Valmis");
}
public static double KolmionAla(double kanta, double korkeus)
{
double a = kanta * korkeus / 2;
return a;
}
}Nyt namespace Debuggaus;-rivin pitäisi olla rivillä 1 ja viimeisen aaltosulun rivillä 21. Mikäli rivinumerot eivät täsmää, kokeile copy-pastettaa koodi uudestaan.
Debuggauksen oletusnäppäinoikotiet on lueteltu täällä. Katso omat näppäinoikotiesi oman ohjelmasi valikoista tai säädä niitä Riderista kohdassa Settings Keymap
Configure keymap.
T5*. Tulosta rajaa ylittävät luvut (1 p.)
Lue ensin monisteesta: 15. Taulukot, 16. Toistorakenteet.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Toteuta aliohjelma TulostaYli(taulukko, raja), joka tulostaa parametrina annetusta int-tyyppisestä kokonaislukutaulukosta 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. Myös viimeisen luvun perässä saa olla välilyönti.
Esimerkki aliohjelman toiminnasta:
Yllä oleva pääohjelman ajamisen seurauksena komentoriviin tulostuisi:
12 5 9 7 9
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Tehtävässä on automaattinen arvostelu. Tehtävässä saa sen ajamisesta 0,4 p. ja oikeasta tulostuksesta 0,6 p.
T6. Summaa rajaa ylittävät luvut (1 p.)
Lue ensin monisteesta: 15. Taulukot, 16. Toistorakenteet.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Toteuta funktio SummaYli(taulukko, raja), joka ottaa parametrina int-tyyppisen kokonaislukutaulukon sekä raja-arvon, ja palauttaa summan niistä luvuista, jotka ylittävät raja-arvon.
Esimerkki aliohjelman toiminnasta:
public static void Main()
{
int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
int summa = SummaYli(luvut, 4);
Console.WriteLine("Yli 4 olevien lukujen summa on: " + summa);
}Yllä olevan pääohjelman ajamisen seurauksena komentoriviin tulostuisi:
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 -linkki palautuslaatikossa).
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja -painikkeella 0,4 p; onnistuneesti ajetuista testeista Aja opettajan kirjoittamat testit -painikkeella 0,6 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
T7. Ehtolausekkeita (1 p.)
Lue ensin monisteesta: 13.3. Vertailuoperaattorit, 13.6. Loogiset operaattorit.
Alla on C#-kielisiä ehtolausekkeita (eli lausekkeet, joiden tuloksena on jokin totuusarvo, eli true tai false). Vastaa kysymyksiin 7.1–7.8.
Arviointi: Pisteitä saa oikeista vastauksista. Yhteenlaskettu maksimipistemäärä on 1 p. Kysymyskohtaiset pisteet näkyvät kysymysten yhteydessä. Kysymyksissä vain yksi vastausyritys/kysymys!
T8. Moniulotteiset taulukot (1 p.)
Lue ensin monisteesta: 15.5. Moniulotteiset taulukot
Olkoon meillä 4 x 4 matriisi, eli 2-ulotteinen taulukko (voit ajatella ruudukkona), jossa on neljä riviä ja jokaisella rivillä 4 alkiota (yhteensä 16 alkiota). Tässä hakasulut kuvaavat vain matriisin reunoja, ei mitään sen "syvällisempää".
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).
Huomautus: Naapureita ovat sekä pysty-, vaaka- että
"vinot" naapurit.
Tee yllä olevalle matriisille kolme seuraavaa generaatiota, eli käy jokainen alkio läpi yllä annettua algoritmia käyttäen.
Eli sovellat algoritmia taulukkoon, ja kun olet käynyt taulukon läpi, niin se "generaatio" on valmis. Sitten teet uuden generaation, johon tulee sopulit sitten siten että ne perustuvat siihen juuri äsken luotuun taulukkoon.
Palautus: Palauta palautuslaatikkoon kolme ensimmäistä generaatiota. Käytä samaa matriisiesitystä kuin on tehtävän alussa mainittu. Sinun ei tarvitse toteuttaa algoritmia C#:ssa; riittää, että suoritat algoritmin käsin ja kirjaat ylös lopputuloksen.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
T9. Tee ja testaa aliohjelma (1 p.)
Lue ensin monisttesta: 11. Testaaminen.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Täydennä seuraavaan aliohjelmaan 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 aliohjelma 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">
/// LaskeYhteen(2, 3) ~~~ 5;
/// 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ä ~~~.
Aihetta käsitellään vielä luennoilla ja harjoituksissa, 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
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma. Dokumentaation ja dokumentaatiotestien on oltava mukana. Palautuslaatikkoon
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
T10. Testaa kaksi aliohjelmaa (1 p.)
Lue ensin monisttesta: 11. Testaaminen
Tarkista vähintään kahden tämän harjoituskerrassa tehdyn aliohjelman toimintaa automaattisella testillä ComTest-työkalua käyttäen.
Huomaa, että ohjelmia, joissa on pelkkä Main-pääohjelma, ei voida tämän kurssin tiedoilla testata, kuten ei myöskään Jypeli-pelejä. Siksi testaamista tehdään harjoitustehtävissä vain static-aliohjelmille, jotka palauttavat jonkun arvon. Tässä harjoitustehtäväkerrassa sellaisia on tehtävissä T5, T6, T7 ja T8.
On suositeltavaa käyttää ComTest-työkalua Riderin kautta. Pääset eteenpäin seuraavilla ohjeilla:
Palautus: Kerro, minkä tehtävän ja minkä aliohjelman/aliohjelmien toiminnan testasit.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
Taulukon testaaminen Comtestilla:
Jos haluat viedä testiin taulukon ilman, että luot apumuuttujaa, niin tee seuraavasti.
Katso miten 2-ulotteista taulukkoa voidaan testata täältä.
StringBuilderin arvon testaaminen pitää suorittaa ToString()-metodin avulla
V1. ViLLE (1 p.)
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.
B1. Erilaisia silmukoita (1 p.)
Lue ensin monisteesta: 16. Toistorakenteet.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee alatehtävät B1.1-B1.3. Alatehtävien yhteenlaskettu pistemäärä on 1 p.
Tehtävä B1.1
Tee aliohjelma TulostaKertotauluFor(n), joka tulostaa luvun n kertotaulun (lukujen 1 10 tulo luvun
n kanssa) for-silmukalla. (0,3 p.)
Esimerkiksi kutsu TulostaKertotauluFor(3) tulostaisi:
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
Aliohjelman ei tarvitse palauttaa mitään, eli se on void-aliohjelma.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0.3. Jos teit tehtävän mielestäsi täysin oikein, 0.3 pistettä, puoliksi oikein 0.15 pistettä jne.
Tehtävä B1.2
Tee aliohjelma TulostaKertotauluWhile(n, m), joka tulostaa luvun n kertotaulun lukuun m saakka. Toteutus pitää tehdä while-silmukalla. (0,3 p.)
Esimerkiksi kutsu TulostaKertotauluWhile(3, 5) tulostaisi
1 * 3 = 3
2 * 3 = 6
3 * 3 = 9
4 * 3 = 12
5 * 3 = 15
Aliohjelman ei tarvitse palauttaa mitään, eli se on void-aliohjelma.
Kutsumalla TulostaKertotauluWhile(3, 0) ei siis saa tulostua mitään.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0.3. Jos teit tehtävän mielestäsi täysin oikein, 0.3 pistettä, puoliksi oikein 0.15 pistettä jne.
Tehtävä B1.3
Tee aliohjelma TulostaKertotauluDoWhile(n, m), joka toimii kuten Tehtävässä B1.2 kuvattu TulostaKertotauluWhile-aliohjelma, mutta käyttäen do-while-silmukkaa. (0,4 p.)
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0.4. Jos teit tehtävän mielestäsi täysin oikein, 0.4 pistettä, puoliksi oikein 0.2 pistettä jne.
B2. Muokattavat merkkijonot (1 p.)
Lue ensin monisteesta: 12.4 Muokattavat merkkijonot: StringBuilder.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Pääohjelmassa (annettu alla valmiiksi) kutsutaan LisaaAlkuunJaLoppuun-nimistä aliohjelmaa. Toteuta kyseinen aliohjelma. Aliohjelman paluuarvon tyyppi on void.
Vinkki: Katso StringBuilderin dokumentaatiosta miten voit lisätä tekstiä jonon keskelle ja miten loppuun.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja -painikkeella 0,5 p; onnistuneesti ajetuista testeista Aja opettajan kirjoittamat testit -painikkeella 0,5 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
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.
B3. Muuta kirjaimet (1 p.)
Lue ensin monisteesta: 12. Merkkijonot sekä 12.4 Muokattavat merkkijonot: StringBuilder.
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee aliohjelma MuutaKirjaimet, jota voi kutsua esimerkiksi seuraavasti:
Aliohjelma ottaa kolme parametria: (1) merkkijonon, (2) korvattavan merkin, ja (3) merkki jolla korvataan.
Aliohjelma palauttaa uuden merkkijonon, jossa on vaihdettu annetut merkit (toinen parametri) jälkimmäiseksi merkiksi (kolmas parametri).
Aliohjelman 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ä aliohjelmaa voitaisiin käyttää.
Toistan mitä sanot, mutta en osaa sanoa kirjainta g.
Anna teksti > Kalle tykkää jätskistä.
Sanoit siis : Galle tyggää jätsgistä.
Ratkaisussa ei saa käyttää valmiita merkkijonon käsittelyyn liittyviä metodeja, kuten String.Replace.
Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma, dokumentaatiot ja testit ovat jo TIM-versiossa valmiiksi mukana.
Arviointi: Koodin ajamisesta Aja -painikkeella 0,3 p; onnistuneesti ajetuista testeista Aja opettajan kirjoittamat testit -painikkeella 0,7 p. Testit on kirjoitettu ennalta ja sisällytetty tehtävään.
B4. Pistelaskuri pallopeliin (1 p.)
Jos haluat tehdä tehtävän Riderissa: Jypeli-tehtävien tekeminen Riderissa.
Jatketaan Harjoitustehtävien 4 Tehtävän G1 (Pallot räjähtää) edistämistä. Ota pohjaksi tehtävän mallivastaus menemällä tehtävän palautuslaatikon kohdalle ja painamalla laatikon yläpuolella olevaa Näytä mallivastaus -painiketta. Voit myös ottaa pohjaksi oman version, jos olet palauttanut kyseisen tehtävän.
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).
Tarvitseeko tähän tehtävään tehdä kaikki nuo aiemmat HT4 jne. tehtävät vai riittääkö pelkkä vastaus?
Ei tarvitse, voit napata mallivastauksen Harjoitustehtävien 4 tehtävän G1. Avoimen opiskelija joutuu tallentamaan edes jonkun tyhjän vastauksen, jotta voi avata mallivastauksen. -DZ
—Palautus: Palautuslaatikkoon palautetaan peliluokan sisältö, eli Begin- ja muut aliohjelmat. Peliluokka on TIM-versiossa valmiiksi mukana (ks. Näytä koko koodi -linkki palautuslaatikossa).
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
B5. Arvauspeli (1 p.)
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee konsolisovellus-peli (ConsoleMain-projekti Riderissa), jossa käyttäjän pitää arvata ohjelman arpoma kokonaisluku.
Esimerkiksi väliltä 1-100 oleva kokonaisluku voidaan arpoa seuraavasti. Huomaa erityisesti, että Next-kutsussa on tarkoituksella luku 101. Se tarkoittaa, että kyseinen luku ei enää kuulu arvottavien lukujen joukkoon.
Käyttäjän antaman syötteen voi muuttaa luvuksi seuraavasti.
HUOM! Ohjelma kaatuu jos syöte ei ole luku. Oletetaan tässä kuitenkin, että käyttäjä antaa pelkkiä kokonaislukuja.
Ohjelman tulee kysyä lukua kunnes käyttäjä arvaa oikean luvun, ja kullakin kerralla antaa sopiva ohjeteksti. Alla mallituloste.
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! :)
TIM ei tässä tehtävässä käsittele syötettä joten tätä ei voi kokeilla TIMissä.
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
G1-2. Moniulotteiset taulukot C#:lla (2 p.)
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee konsoliohjelma, joka laskee ja tulostaa Tehtävässä T8 pyydetyt kolme ensimmäistä generaatiota käyttäen tehtävässä mainittua algoritmia. Toisin sanoin, toteutua algoritmi C#:lla ja laske sillä kolme ensimmäistä generaatiota Tehtävässä T8 mainitulle matriisille.
Testaamisen helpottamiseksi voit käyttää valmista funktiota, joka palauttaa matriisin merkkijonona.
Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 piste jne.
G3. LINQ ja lambdat (1 p.)
Lue ensin monisteesta: 23.3. Anonyymit funktiot (lambda-lausekkeet).
Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.
Tee Tehtävä T5 ja Tehtävä T6 käyttäen C#:n LINQ:lla ja/tai lambda-lausekkeilla.
Saat muutettua Where:n palauttaman IEnumerable:n taulukoksi käyttämällä ToArray-metodia.
Palautus: Palautuslaatikkoon palautetaan ohjelmaluokan sisältö, eli Main- ja muut mahdolliset tekemäsi aliohjelmat. Luokka on TIM-versiossa valmiiksi mukana (ks. Näytä koko koodi -linkki palautuslaatikossa).
Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0.5 pistettä jne.
G4. Tulosta rajaa ylittävien lukujen indeksi (1 p.)
Tee aliohjelma SuurempiJaParillinenIndeksi, joka ottaa kaksi parametria: int-taulukon (luvut) ja yhden int-luvun (raja).
Aliohjelman tulee tulostaa ne luvut, jotka ovat suurempia kuin raja ja jotka ovat parillisissa indekseissä. Aliohjelman ei tarvitse palauttaa mitään, vaan se on void-aliohjelma.
Esimerkki aliohjelman toiminnasta:
int[] luvut = { 8, 0, -2, 6, 3, 3, 10, -7 };
SuurempiJaParillinenIndeksi(luvut, 4); // Tulostaa "8 6 10"Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia. Pääohjelma on jo TIM-versiossa valmiiksi mukana.
Arviointi: Tehtävässä on automaattinen arvostelu. Jos vastaus kääntyy ja toimii, 0,1 p. Jos tulostus on oikein, 0,9 p.
Esimerkissä on alaraja 4 ja varsinaisessa tehtävässä alaraja 5, onko tämä tarkotuksella vai vahingossa? On vähän hämäävää.
Muutin tehtävänannossa olevan esimerkin, jospa tämä auttaisi. Varsinaisessa tehtävässä on sitten toisenlainen esimerkki; koodarin vastuulla on tarkistaa että ohjelma toimii yleisesti kaikissa tapauksissa. -DZ
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.