Demo 11
Palauta viimeistään tiistaina 6.4. klo 10.00. (Huomaa poikkeuksellinen aika.)
Läpikäynti tiistaina 6.4. klo 10.15.
PP6, perjantai 26.3.
PP6-tehtävät. Näistä saa pisteitä vain käymällä PP-ryhmässä Teamsin PP-kanavalla perjantaisin klo 14:15-16:00.
Harjoitustentti
Tentissä jokainen tehtävä on (tavallisesti) kuuden pisteen arvoisia. Tässä demossa tehtävät pisteytetään kuitenkin "normaalisti" muiden demotehtävien tavoin.
Kurssilla opitut dokumentointi- ja ohjelmointikäytänteet koskevat tätä harjoitustenttiä kuin myös varsinaista tenttiä. Dokumentaation puuttumisesta tai ohjelmointikäytänteiden noudattamatta jättämisestä sakotetaan.
Tämän harjoitustentin tarkoitus on simuloida tenttitilannetta, joten aluksi on hyödyllistä kirjoittaa vastaukset kynällä ja paperilla. Tallenna sitten paperille kirjoitettu vastaus TIMiin juuri niin kuin sen paperille kirjoitit. Tämän jälkeen voit sitten tehdä tehtävän loppuun Visual Studiossa korjata mahdolliset virheet, ja palauttaa korjatun vastauksen TIMiin.
Oikeassa tentissä ei ole Ville-, PP- tai Gurutehtäviä.
Ajankäyttösi tällä viikolla
Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.
Demokerran päätteeksi 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, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit.
Tehtävä 1-2*
Aseta pisteesi Set Custom Points -toiminnolla väliltä 0 -- 2.
Tee funktio ToiseksiSuurin
, joka ottaa parametrina kokonaislukutaulukon. Funktio etsii ja palauttaa tuon taulukon toiseksi suurimman alkion. Tässä toiseksi suurimmalla alkiolla tarkoitetaan järjestyksessä toista alkiota, mikäli taulukon alkiot järjestettäisiin laskevaan suuruusjärjestykseen, esimerkiksi taulukon [3, 7, 1, 7] toiseksi suurin olisi 7. Funktio EI kuitenkaan saa järjestää taulukkoa. Mitä huomionarvoisia erikoistapauksia voi olla? Määrittele miten ne käsitellään.
Pääohjelma on kirjoitettu valmiiksi, mutta se on piilossa.
Esimerkki:
- Parametrina taulukko:
3, 1, -7, 9, 15, 8
- Funktio palauttaa arvon
9
Onko timissä joku ongelma. Antaa pelkästään Compile error?
VL: kokeileppa aluksi Visual Studiossa, jostakin syytä tässä tehtävässä ei näy virheilmoituksia jos kääntäminen ei onnistu. Mutta toimiva ohjelma kyllä toimii.
Koodin pääohjelma on piilotettu?
—Tehtävä 3
Vastaa alla oleviin kysymyksiin. Huomaa, että näissä kysymyksissä on vain yksi vastausyritys. Kuhunkin kysymykseen on tasan yksi oikea vastaus.
Funktio, jonka toiminta perustuu ongelman ratkaisemiseen palauttamalla se yhden tai useamman samanlaisen ongelman ratkaisemiseen. Mitä tämä tarkoittaa suomeksi?
—Ymmärrettävämmin voisi sanoa, että funktio, joka tarvitsee itseään ongelman ratkaisemiseen tai ohjelman suorittamiseksi
—Tehtävä 4
Tee myös using
-lauseet, luokka ja pääohjelma omatoimisesti tähän tehtävään. Pääohjelman voit jättää tyhjäksi tai sitten laittaa sinne yhden ao. funktion kutsun.
Bussi liikkuu kaupungissa ja pysäkin kohdalla ottaa kyytiin ja pudottaa matkustajia pois.
Tee funktio Matkustajia
, jolla on parametrit
int matkustajiaAluksi
, joka kertoo kuinka monta matkustajaa bussissa on ennen kuin yhdelläkään pysäkillä on käyty,
List<int[]> pysakit
, joka on lista bussipysäkeistä. Kukin pysäkki on kokonaislukutaulukko (int[]
), jonka ensimmäinen alkio kertoo kuinka monta matkustajaa tulee kyytiin, ja toinen alkio kertoo kuinka monta matkustajaa poistuu bussista.
Funktio palauttaa kuinka monta matkustajaa bussissa on, kun kaikki pysäkit on käyty läpi. Huomaa, että bussissa olevien matkustajien määrä ei saa missään vaiheessa mennä alle nollan. Myöskään paluuarvo ei saa olla nollaa pienempi.
Laita pisteesi Set Custom points -toiminnolla.
Täytyykö ohjelma saada pysähtymään (kaatumaan), jos matkustajien määrä menee alle nollan, vai riittääkö aliohjelman keskeyttäminen tekemälläni tavalla?
Ohjelman kaatumista on aina syytä välttää. Sinun toteutuksesi on siltä osin hyvä, vaikka ilman tulostamistakin pärjäisi. -JuhoK
—Tehtävä 5
Kerro omin sanoin ja esimerkein, mitä tapahtuu funktiokutsun yhteydessä? Käsittele funktiota, jossa on kaksi parametria. Milloin mikäkin muuttuja syntyy ja milloin häviää? Mikä ero on funktiokutsun kannalta perusmuuttujilla (bool, char, int, double
) ja oliomuuttujilla. (6 p)
Tehtävä 6
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";
Luokan nimi on ilmeisesti poista, jolloin Poista-niminen aliohjelma ei ole mahdollinen
Tässä luokka tulee kirjoittaa itse, mutta on totta että luokan ja funktion nimet eivät voi olla samat. -AJL
—Tehtävä 7
Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä (kerää enintään 6 pisteen 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.)
Mites näissä nää pisteet oikein menee? Suluissa sanotaan 1 p., mutta mulla näyttää 0.167 / 0.167 tai 0.333/0.333
[Tentissä kukin tehtävä on (tavallisesti) kuuden pisteen arvoinen, tehtävä voi jakautua pienempiin kysymyksiin (kuten tässä tehtävässä a, b, c jne.).
Tässä demossa tehtävät pisteytetään kuitenkin “normaalisti” muiden demotehtävien tavoin. Eli suluissa oleva pistemäärä on sellainen joka tyypillisesti tällaisesta kysymyksestä annettaisiin. -AJL]{.answer}
—d) Binäärinen desimaaliluku 1001.1110
10-järjestelmän lukuna. (1 p.)
e) Pohdi, missä mielessä List
on parempi kuin tavallinen taulukko? Entä missä mielessä huonompi? (2 p.)
f) Mikä ero on String
ja StringBuilder
-luokilla? (1 p.)
g) Paljonko on lauseke 34/7
C#:ssa? Entä paljonko on 34%7
C#:ssa. (1 p.)
Tämä kohta sisältää kaksi kysymystä. Vastauksesi tulee koostua kahdesta rivistä, joista ensimmäisen kysymyksen vastaus on yksi luku ensimmäisellä rivillä, ja toisen kysymyksen vastaus on yksi luku toisella rivillä.
h) Mitä tarkoittaa olion "muuttuminen 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
B1-3
Tee ohjelma, joka kysyy käyttäjän nimen, minkä jälkeen ohjelma "salakirjoittaa" nimen 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 :-)
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.