wiki:k2015/demot/demo11
Last modified 16 months ago Last modified on 2016-01-15 12:16:01

Demot » Demo 11, 7.4.2015

Demojen palautustilaisuus ja deadline tiistaina 7.4. kello 10:15.

Huomaa, että viikko 14 (30. maaliskuuta - 6. huhtikuuta) on JY:ssa opetuksen pääsiäistauko, joten mitään demo- tai ryhmäohjausryhmiä ei järjestetä.

PP

PP-tehtävät (näistä saa pisteitä vain käymällä PP-ryhmässä)

Mallitentti

Tentissä ei tarvitse ihan tarkkaan ulkoa muistaa mitä .NET-frameworkin aliohjelmia on käytettävissä. Jos tarvitset jotakin valmista luokkaa, aliohjelmaa (tai metodia / funktiota), kuvaile mitä ajattelet sen tekevän ja millaisilla parametreillä. Ohjelmatehtävät pitää dokumentoida XML-tägien avulla, kuten kurssilla on opetettu. Oikeassa tentissä max-pistemäärä per tehtävä on 6 ja koko tentissä max-pistemäärä 24. Tätä demokertaa silmällä pitäen laskentatapa kuten ennenkin, eli 1 p / tehtävä. Huomaa, että tentissä voi olla rajoitettu, kuinka monta tehtävää enintään saa tehdä. Tässä voisi vaatimuksena olla että ainakin toinen tehtävistä 1 tai 2 pitää olla valittujen joukossa, ja lisäksi 5 on jokaisen tehtävä.

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.

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. Toki voit vastauksesi kirjoittaa tietokoneella, mutta kirjoita ne Muistioon / Notepadiin tai johonkin muuhun editoriin mutta ei Visual Studioon tai muuhun IDE:en joka antaa vinkkejä.

Varsinaista kirjoittamista tulee olemaan kuitenkin vähän, joten niin näissä demotehtävissä kuin varsinaisessa tentissäkin tekstin tuottamisen määrän näkökulmasta kenelläkään ei pitäisi olla ongelmia.

Kun olet tehtävät tehnyt, ota Visual Studio ja muokkaa ohjelmavastaukset toimiviksi ohjelmiksi ja palauta Tehtäviin 1-2, 3, 5 cs-tiedostot.

HUOM: Mikäli palautetuissa ohjelmissa ei ole kommentteja ja kunnollisia muuttujien nimiä, siitä rokotetaan.

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

Tehtävä 1-2

Tee ohjelma: Pääohjelma kutsuu funktiota, joka ottaa parametrina kokonaislukutaulukon. Funktio etsii ja palauttaa tuon taulukon toiseksi suurimman alkion. Funktio 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
  • Funktio 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)

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.

B1-3

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. Vinkki: Jypelin metodit Image.GetDataUInt(), Image.SetData() ja Color.PackRGB() ovat avuksi.

G1-2

Euler problem 206. Laskun pitää mennä alle minuuttiin. Yksi lisäpiste jos lasku menee "erittäin nopeasti" (luokkaa millisekunteja.) En takaa että saan itse menemään tuota super-nopeasti :-).