wiki:s2011/demot/demo11
Last modified 6 years ago Last modified on 2011-11-21 16:06:09

Demot » Demo 11, 21.11.2011

Mallitentti

Tentissä ei tarvitse ihan tarkkaan ulkoa muistaa mitä .NET-frameworkin aliohjelmia on käytettävissä. Jos tarvitset jotakin valmista luokkaa, aliohjelmaa tai metodia, kuvaile mitä kuvittelet sen tekevän ja millaisilla parametreillä. Ohjelmatehtävät pitää dokumentoida, kuten on opetettu. Oikeassa tentissä keräile tehtäviä niin, että niiden maksimipistemäärä on 24 pistettä. (Demoja varten laske kuitenkin tehtävien pisteet kuten ennenkuin, eli 1p/tehtävä.) Tentissä voi olla rajoitettu, kuinka monta tehtävää enintään saa tehdä. Tässä voisi vaatimuksena olla että ainakin toinen tehtävistä 1-2 tai 5 pitää olla valittujen joukossa.

Korpissa on kentät "Mallitentin tehtävien tekemiseen kulunut aika". Täytä siihen tehtävittäin kauanko sinulta meni. Tämä on avuksi oikean tentin suunnittelua varten. Oikeassa tentissä aikaa on 4 tuntia.

Muista, että tentti tehdään kynällä ja paperilla. Yksi A4-kokoinen molemmin puolin täytetty lunttilappu saa olla mukana. Nettiä tai tietokoneita ei voi käyttää. Tämän mallitentin tarkoitus on siis simuloida tenttitilannetta, joten älä aluksi käytä näissä tehtävissä tietokonetta muuhun kuin vastauksen kirjoittamiseen aluksi. Tehtävissä kirjoittamista on kuitenkin sen verran vähän että palautusta varten tehtävien kirjoittaminen lopuksi koneelle on nopeaa. Kun olet tehtävät tehnyt, ota Visual Studio ja muokkaa ohjelmavastaukset toimiviksi ohjelmiksi ja palauta Tehtäviin 1-2,3,5 ne .cs-tiedostot. HUOM: Mikäli palautetuissa ohjelmissa ei ole kommentteja ja kunnollisia muuttujien nimiä, pudotetaan ko tehtävän pistemäärä 0:ksi.

PP, Ville ja Bonustehtävät eivät ole mukana "mallitentin ajanlaskussa".

PP

PP1

  1. Tee for-silmukka joka tulostaa seuraavaa:
    0
    3
    6
    9
    12
    ...
    177
    
  2. Muistele viimekertaista PP-tehtävää jossa täydennettiin aliohjelma TaytaTaulukko. (PP-tehtävä 2A) Lataa itsellesi Taulukointia.cs ja liitä se projektiin. Täydennä aliohjelma TaytaTaulukko siten, että ohjelma tulostaa seuraavaa:
    Taulukon paikassa 0 on luku 1
    Taulukon paikassa 1 on luku 3
    Taulukon paikassa 2 on luku 5
    ...
    Taulukon paikassa 21 on luku 43
    
  3. Tee aliohjelma joka vastaanottaa kaksi parametria: merkkijonon ja kokonaisluvun. Aliohjelma palauttaa merkkijonosta merkin, jonka paikka merkkijonossa on annettu kokonaisluku. Aliohjelma kutsu voisi näyttää tältä:
    PalautaKirjain("kissa istuu puussa", 8); // Palauttaa 't'
    
  4. Palokkajärvellä asuu jälleen kaksi joutsenparia. Yhdelle parille syntyy vuodessa neljä poikasta. Kukin poikasista löytää itselleen seuraavana vuonna parin Palokkajärven joutsenista (tosin oikeasti eri järvellä kun samalle järvelle ei mahdu montaa paria) ja jokainen uusi pari (ja myös edelliset parit) saa seuraavana vuonna neljä poikasta. Tämä jatkuu jokaiselle sukupolvelle. Valitettavasti nämä joutsenet eivät viihdy Palokassa ja muuttavat viiden elinvuoden jälkeen talvella pois. Aluksi siis järvellä on neljä joutsenta. Syksyllä järvellä on 12 joutsenta. Seuraavana keväänä samat 12 ja syksyllä järvellä on 36 joutsenta. Tee ohjelma, joka tulostaa kuinka monta joutsenta on syksyllä kunakin vuonna 10 vuoden ajan. Mallitulostus:
     1. Keväänä 4 joutsenta
     1. syksynä 12 joutsenta
     2. syksynä 36 joutsenta
    ...
     5. syksynä 972 joutsenta
     6. Keväällä 968 joutsenta
     6. syksynä 2904 joutsenta
     7. keväällä 2896 joutsenta
    ...
    

PP2

Tässä tehtävässä on useampi kohta, jossa täytyy ladata jokin tiedosto ja tehdä siihen muutoksia tai täydennyksiä. Jos haluat käyttää Visual Studiota tehtävän ratkaisemiseen, tee ensin uusi projekti (Console Application) ja lataa tehtävän tiedosto projektin hakemistoon. Tämän jälkeen voit lisätä tiedoston projektiisi klikkaamalla projektin nimeä Visual Studiossa hiiren oikealla näppäimellä, valitse Add->Existing Item.. ja valitse lataamasi tiedosto.

  1. Lataa itsellesi Testausta.cs ja täydennä aliohjelma LahinLuku niin, että sille kirjoitetut testit voidaan ajaa virheettä.
  2. Lataa itsellesi Aliohjelmia.cs ja täydennä pääohjelma niin, että käytät apunasi kommenteissa mainittuja aliohjelmakutsuja. Tehtävässä ei tarvitse itse luoda yhtään aliohjelmaa.
  3. Tee aliohjelma joka vastaanottaa merkkijonon ja lisää siihen merkkijonon " on hauskaa". (Käytä StringBuilder-luokkaa) Tee pääohjelmasta seuraavanlainen:
    public static void Main(string[] args)
    {
        StringBuilder muuttuvaJono = LisaaMerkkijonoon("Koodaus");
        Console.WriteLine(muuttuvaJono.ToString());
        Console.ReadKey();
    }
    
  4. Lataa itsellesi Muuttujia.cs ja täydennä pääohjelmaan muuttujatyypit oikeiksi.

V1

Tee Ville-tehtävät: 10.1, 10.2. (Ville-tehtäviä ei oteta lukuun tenttipisteissä, ne ovat vain tässä lisäharjoituksen vuoksi.)

Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.

Tehtävä 1-2

Tee ohjelma: Pääohjelma kutsuu aliohjelmaa (funktiota), joka etsii ja palauttaa parametrina viedyn kokonaislukutaulukon toiseksi suurimman alkion. Aliohjelma EI saa järjestää taulukkoa. Mitä huomionarvoisia erikoistapauksia voi olla? Määrittele miten ne käsitellään.

  • Esimerkiksi taulukko: 3 1 -7 9 15 8
  • Aliohjelma palauttaa arvon 9 (ei tulosta)
  • ja tulostaa:
    Taulukon 3 1 -7 9 15 8 toiseksi suurin alkio on 9
    

Taulukon tulostaminen hoidetaan omalla aliohjelmalla joka pitää myös tehdä (laita nimeksi vaikka TulostaTaulukko, silloin aliohjelma saa tulostaa). Ohjelmassa saa käyttää vain pääohjelman paikallisia muuttujia, aliohjelman parametrimuuttujia ja aliohjelmien paikallisia muuttujia. (12 p)

Tehtävä 3

Ohjelma lukee riveittäin käyttäjän antamaa nimitietoa muodossa

Ekaetunimi Tokaetunimi Kolmasetunimi Sukunimi

Sukunimi on aina mukana, etunimiä annetaan vähintään yksi, enintään kolme. Syöttö lopetetaan antamalla pelkkä Enter, jolloin ohjelma tulostaa nimet aakkostettuna muodossa

Sukunimi E.T.K.

Esimerkki:

Anna nimiä muodossa Etunimet Sukunimi, 
yksi nimi rivilleen, pelkkä Enter lopettaa. 

> Kaarle Kustaa Korkki
> Seppo Pentti Ville Kinnunen
> Åke Aarnio
> Ulla-Maija Wikholm-Seppänen
> [Enter]
 
Annoit nimet:
Aarnio Å.
Kinnunen S.P.V.
Korkki K.K.
Wikholm-Seppänen U.

Käyttäjältä voit lukea merkkijonon

 string jono;
 jono = Console.ReadLine();

(6 p)

Tehtävä 4

Kerro omin sanoin ja esimerkein mitä tapahtuu aliohjelmakutsun yhteydessä. Käsittele funktiomaista aliohjelmaa, jossa on ainakin muutama parametri. Milloin mikäkin muuttuja syntyy ja milloin häviää. Mikä ero on aliohjelmakutsun kannalta perusmuuttujilla (bool, char, int, double) ja oliomuuttujilla. (6 p)

Tehtävä 5

Kirjoita aliohjelma Poista(jono, kirjain), jolle seuraavat aliohjelman testitapaukset toimisivat. Tyypit joudut miettimään itse. Samoin miten <- käytännössä toteutetaan. Kirjoita aliohjelmalle myös pieni pääohjelma, jossa aliohjelman toimintaa testataan. (6 p.)

TYYPPI jono  <-  "kissa istuu puussa"; // alustetaan jono
Poista(jono, ' ') === 2; jono.ToString() === "kissaistuupuussa";
Poista(jono, 'u') === 4; jono.ToString() === "kissaistpssa";
Poista(jono, 'k') === 1; jono.ToString() === "issaistpssa";
Poista(jono, 'a') === 2; jono.ToString() === "issistpss";
Poista(jono, 's') === 5; jono.ToString() === "iitp";
Poista(jono, 'x') === 0; jono.ToString() === "iitp";

Tehtävä 6

Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä (kerää max. 6 p edestä osatehtäviä):

a) Miten C#-ohjelma käännetään ja ajetaan komentoriviltä? Entä jos ohjelma tarvitsee jonkin kirjaston avukseen? (2 p)

b) Laske (laskutoimitukset mukaan) seuraavien binäärilukujen arvo 10-järjestelmän lukuna. Mitä oletuksia teit? (2 p)

0100 0101      0011 1111     1000 0001

c) Oletetaan 8-bittisille negatiivisille kokonaisluvuille 2-komplementtiesitys. Mikä olisi luvun miinus viisi (-5) bittiesitys tällaisessa järjestelmässä. (1 p)

d) Binäärinen desimaaliluku 1001.1110 10-järjestelmän lukuna. (1 p)

e) Pohdi missä mielessä List on parempi kuin tavallinen taulukko. Missä mielessä huonompi? (2 p)

f) Mikä ero on String ja StringBuilder -luokilla? (1 p)

g) Paljonko on 34/7 C#:ssa. Paljonko on 34%7 C#:ssa. (1 p)

h) Mitä tarkoittaa että olio "muuttuu roskaksi"? (1 p)

B1.

Tee ohjelma, joka kysyy käyttäjän nimen ja sitten ”salakirjoittaa” tämän valokuvaan niin, että jostakin kohti alkaen kuvaan sijoitetaan jotenkin RGB-arvojen tilalle nimestä tulevia ASCII-koodeja.