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.

Yleisiä vinkkejä tämän kerran tehtäviin

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

Avaa palautelomake klikkaamalla tästä

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.

# tehtava_tulostus_sataan

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.

# tehtava_tulostus_parittomat_sataan

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.

# tehtava_tulostus_hep

Mikäköhän tässä nyt mukamas on eri tavalla kuin esimerkissä? Nevermind, huomasin virheeni.

Sinulla vitosella jaolliset luvut tulostuvat kahdesti -DZ

29 Sep 25 (edited 29 Sep 25)

T3. Positiiviset ja negatiiviset (1 p.)

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

  1. "Positiivisia!", jos lukujoukossa oli enemmän positiivisia lukuja kuin negatiivisia,
  2. "Negatiivisia!", jos lukujoukossa oli enemmän negatiivisia kuin positiivisia, tai
  3. "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.

Ohjeita ja vinekkjä tehtävän tekemiseen

# tehtava_positiiviset_ja_negatiiviset

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

28 Nov 25

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.

Kun olet valmis, avaa varsinainen tehtävä tästä

# tulosta-rajaa-ylittavat

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:

public static void Main()
{
   int[] luvut = { 12, 3, 5, 9, 7, 1, 4, 9 };
   TulostaYli(luvut, 4);
}

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.

# tehtava_tulosta_ylittavat
# summaa-rajaa-ylittavat

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.

# tehtava_summa_ylittavat

T7. Ehtolausekkeita (1 p.)

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!

# tehtava_ehtolausekkeita_1
# tehtava_ehtolausekkeita_2
# tehtava_ehtolausekkeita_3
# tehtava_ehtolausekkeita_4
# tehtava_ehtolausekkeita_5
# tehtava_ehtolausekkeita_6
# tehtava_ehtolausekkeita_7
# tehtava_ehtolausekkeita_8
# moniulotteiset-taulukot

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

[ 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).

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.

# tehtava_moniulotteiset_taulukot

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.

# tehtava_laske_yhteen_tdd

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.

Vinkkejä ComTestin käyttöön

# tehtava_testaa_aliohjelma

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.

# visu_ville

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.

# bonus_kertotaulu_for

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.

# bonus_kertotaulu_while

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.

# bonus_kertotaulu_do_while

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.

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.

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.

Oljenkorsi 1

Oljenkorsi 2

Oljenkorsi 3

# bonus_muuttuva_jono

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:

string jono = "Kalle tykkää jätskistä.";
string tulos = MuutaKirjaimet(jono, 'k', 'g');

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.

# bonus_muuta_kirjaimet

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

25 Nov 25 (edited 27 Nov 25)

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.

# bonus_pallopeli_pistelaskuri

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.

Random r = new Random();
int arvottu = r.Next(1, 101);

Käyttäjän antaman syötteen voi muuttaa luvuksi seuraavasti.

string syote = Console.ReadLine();
int arvaus = int.Parse(syote);

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.

# bonus_luvun_arvaus
# guru_moniulotteiset_taulukot_koodaus

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.

# guru_moniulotteiset_taulukot_koodaus

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.

# guru_linq_ja_lambdat

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

01 Oct 25 (edited 02 Oct 25)
# guru_tulosta_suurempi_ja_parillinen_indeksi

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