PP3

Mitä ovat PP-tehtävät?

PP-tehtävät on tarkoitettu niille, joilla edellisten demojen tekeminen on tuottanut hankaluuksia, tai muusta syystä demot ovat jääneet tekemättä. Nämä ovat siis kertaavia tehtäviä, joiden avulla palautetaan mieliin aikaisempia demoja uudesta näkökulmasta. PP-tehtävät eivät ole tarkoitettu niille, jotka ovat tehneet säännöllisesti 4 tai enemmän tehtäviä/kerta. PP-tehtävillä voi myös (enintään kaksi kertaa koko kurssin aikana) hyvittää sen tilanteen että aikaisemmalla demokerralla ei ole tehnyt tähtitehtäviä. Edelleen, PP-tehtävät lasketaan mukaan 40%:n sääntöön (siis sääntö joka sanoo että vähintään 27 pisteen edestä pitää olla tehty tehtäviä koko kurssilla).

PP-tehtäviä voivat palauttaa vain ne, ketkä osallistuvat erillisiin PP-ohjaustuokioihin. Ilmoittautumista ei tarvita, ilmaannu vain paikalle Teamsiin PP-kanavalle. Jos et ole PP-tuokioihin osallistunut, niin et voi saada PP-tehtävistä myöskään pisteitä. Tehtäviä voi tietysti tehdä vaikka ei ryhmään pääsisi mukaan.

Tee tehtävät aina Visual Studiossa. Tehtävän tehtyäsi liitä kirjoittamasi koodi TIM:iin ja paina Aja/Tallenna.

Kun olet tehnyt kaikki tehtävät pyydä ohjaaja tarkastamaan tekemäsi tehtävät. Näissä tehtävissä ei ole automaattista pistelaskua. Tehtävien tarkistuksen jälkeen voit laittaa oikean määrän pisteitä Set custom points-toimintoa käyttämällä.

Tee PP-tehtävät aina Visual Studiossa.

Jatka siitä mihin viime kerralla jäit.

Tehtävä 1 (1 p.)

Tässä tehtävässä tehdään ohjelma, joka laskee matkustusaikojen kestoja.

Tee funktio MatkanKestoTunteina, joka laskee, kuinka kauan jokin matka kestää annetulla matkan pituudella ja keskinopeudella, ja palauttaa tuon tiedon. Pääohjelma voisi näyttää tältä (voit copy-pastettaa tämän omaan ohjelmaasi Visual Studioon projektimallin pääohjelman tilalle).

public static void Main(string[] args)
{
    double matkanPituusKm = 124.5;
    double keskinopeusKmH = 120;

    double matkanKestoTunteina = MatkanKestoTunteina(matkanPituusKm , keskinopeusKmH);
    Console.WriteLine("Matka kestää " + matkanKestoTunteina + " tuntia");
    Console.ReadKey();
}

Sinun pitää tehdä siis funktio MatkanKestoTunteina, sekä sille dokumentaatio. Aloita tekemällä funktion esittelyrivi (se missä on public static jne.).

# matkanKestoTunteinaPP1T1

Tehtävä 2 (1 p.)

Tässä tehtävässä tehdään ohjelma, kysyy lukua ja ilmoittaa kuuluuko luku välille [-5, 5].

Luo uusi projekti samaan solutioniin edellisen tehtävän kanssa. Luo projekti käyttäen ConsoleMain pohjaa. Jos et osaa lisätä uutta projektia solutioniin, kysy ohjaajalta apua.

Ota tästä itsellesi pääohjelma:

    public static void Main(string[] args)
    {
        Console.Write("Anna luku > ");
        int luku = int.Parse(Console.ReadLine());

        bool sisapuolella = OnkoValilla(luku);

        if (sisapuolella)
        {
            Console.WriteLine("Luku " + luku + " on välin sisäpuolella.");
        }
        else
        {
            Console.WriteLine("Luku " + luku + " on välin ulkopuolella.");
        }
        Console.ReadKey();
    }

Aloita lisäämällä ohjelmaan funktio nimeltään OnkoValilla, joka ottaa parametrina yhden kokonaisluvun ja palauttaa tiedon siitä, onko annettu luku välillä [-5, 5].

Aja ohjelma ja testaa sen toimintaa eri luvuilla.

Kirjoita luomallesi funktiolle dokumentaatio.

# onkoValillaPP1T2

Tehtävä 3 (1 p.)

Tämä tehtävä on jatkoa edelliseen tehtävään, uutta projektia ei tarvitse luoda.

Tässä tehtävässä on tarkoitus tehdä funktiosta OnkoValilla kuormitettu versio, jolle voi luvun lisäksi itse antaa parametrina ala- ja ylärajan.

Jätä olemassa oleva OnkoValilla koodiisi ja tee sen lisäksi uusi OnkoValilla funktio, joka ottaakin kolme parametria. Tee tästä uudesta OnkoValilla funktiosta sellainen, että annetut parametrit toimivat ylä- ja alarajana -5:n ja 5:n sijaan.

Lisää pääohjelmassa olevaan funktiokutsuun kaksi parametria lisää, esimerkiksi näin:

bool sisapuolella = OnkoValilla(luku, 0, 50);

Testaa jälleen ohjelman toimintaa ja varmista, että ohjelma toimii oikein.

Funktiota voi nyt käyttää siten, että sille annetaan vain luku, jolloin rajojen oletetaan olevan -5 ja 5, tai sitä voi käyttää siten, että sille annetaan itse halutut rajat.

# kuormitettuPP1T3

Tehtävä 4 (1 p.)

Tee ohjelma, missä kysytään kolme sanaa käyttäjältä, ja tulostetaan pisin sana. Tee tämä projekti samaan solutioniin edellisen tehtävän kanssa.

Ota tästä valmiiksi tehty pääohjelma (tätä EI tarvitse muuttaa).

public static void Main(string[] args)
{
  Console.Write("Anna 1. sana > ");
  String sana1 = Console.ReadLine();
  Console.Write("Anna 2. sana > ");
  String sana2 = Console.ReadLine();
  Console.Write("Anna 3. sana > ");
  String sana3 = Console.ReadLine();
  String pisin = Pisin(sana1, sana2, sana3);
  Console.WriteLine("Kiitos vastauksistasi! Pisin sana on \"" + pisin + "\".");
  Console.ReadKey();
}

Sinun pitää tehdä funktio Pisin, sekä sille dokumentaatio. Aloita tekemällä funktion esittelyrivi (se missä on public static jne.).

Valmis ohjelma tulostaa konsoliin esimerkiksi tällaista. ([ret] tarkoittaa Enter-näppäimen painallusta, eikä se kuulu varsinaiseen merkkijonoon.)

Anna 1. sana > Koira[ret]
Anna 2. sana > Pekka[ret]
Anna 3. sana > Kalle-Petteri[ret]
Kiitos vastauksistasi! Pisin sana on "Kalle-Petteri".

Kannattaa myös kokeilla, että ohjelma toimii, vaikka pisin sana ei olisikaan juuri kolmantena syötetty.

Kopioi vastauksesi Visual Studiosta alla olevaan koodilaatikkoon ja kirjoita kolme merkkijonoa omille riveilleen tehtävälaatikon alapuolella olevaan input-laatikkoon. Paina lopuksi Aja, jotta vastauksesi tallentuu TIMiin.

# PP2PisinSana

Tehtävä 5 (1 p.)

Tee funktio LaskeSanat, jolle annetaan parametrina merkkijonotaulukko, sekä etsittävä merkkijono. Funktio laskee, kuinka monta etsittävää sanaa taulukosta löytyi.

Funktiota voisi kutsua näin (laita tämä pääohjelmaan):

string[] sanat = {"Omena", "Mandariini", "Appelsiini", "Omena", "Omena", "Päärynä"};
int montakoLoytyi = LaskeSanat(sanat, "Omena");
Console.WriteLine("Omena-sanoja löytyi " + montakoLoytyi);

Huomaa, että tehtävässä ei ole mitään koodia valmiina. Kirjoita siis itse luokka, pääohjelma sekä LaskeSanat-aliohjelma.

# PP2LaskeSanat

PP Tehtävä 6 (1 p.)

Voit tehdä kohdat a ja b samaan kooditiedostoon.

\((a)\) Tee ohjelma (aliohjelmia ei tässä tarvita), joka tulostaa parilliset luvut väliltä 0..100 (sekä nolla että sata kuuluvat väliin). (0.5 p.)

# PP2T6a

\((b)\) Tee ohjelma (jatka edellisen perään), joka tulostaa kaikki luvut väliltä 0..100, ja jos luku on jaollinen 4:llä, luvun perään tulostuu 'Jaollinen neljällä!' (0.5 p.)

# PP1T1B

Esimerkkitulostus

61
62
63
64 Jaollinen neljällä!
65
66
67
68 Jaollinen neljällä!
69
70

PP Tehtävä 7 (1 - 3.5 p.)

Tästä tehtävästä saat 1 - 3.5 pistettä.

\((a)\) Tee pääohjelmaan silmukka, joka tulostaa 30 lukua siten, että ensimmäinen luku on 1, toinen luku on 1, ja seuraavat luvut ovat aina kahden edellisen summa. Eli tulostuksen alku näyttäisi tältä 1 1 2 3 5 8. (1 p.)

# PP2T7A

\((b)\) Tee uusi projekti, ja siihen funktio nimeltä Fibonacci. Anna aliohjelmalle parametrina kokonaisluku. Aliohjelma luo ja täyttää taulukon Fibonaccin lukujonon luvuilla. Funktio palauttaa taulukon jossa Fibonaccin luvut ovat. Lopuksi laita keskeytyskohta (breakpoint) Main-pääohjelman viimeiselle riville ja katso että taulukkoon tuli oikeat luvut. (1.0 p.)

Alla pääohjelma.

public static void Main()
{
  int[] fiboLuvut = Fibonacci(10);
}

Taulukossa pitäisi nyt olla luvut

1	1	2	3	5	8	13	21	34	55	
# PP2T2B

\((c)\) Kirjoita yo. funktiolle Comtest-testit. Paluuarvona tulevan taulukon (alla luvut) voit testata esimerkiksi tehtävän alla olevan esimerkin tyylisesti (kirjoita tehtävän alapuolella oleva koodi funktion dokumentaation ComTest-osaan). (0.5 p.)

# PP2T2D

ComTest tehtävään 7 c

/// int[] luvut = Fibonacci(5);
/// String.Join(" ", luvut) === "1 1 2 3 5";

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