Demo 11
Huomaa, että viikko 12 (21.3. - 28.3.) on JY:ssa opetuksen pääsiäistauko, joten mitään demo- tai pääteohjausryhmiä ei järjestetä kyseisen ajanjakson aikana. Demo 11:n pääteohjaukset järjestetään normaalisti viikolla 13, torstaina 31.3. - perjantaina 1.4.
PP7, Perjantai 1.4.
PP-tehtävät (näistä saa pisteitä vain käymällä perjantain PP-ryhmässä. Tulevan perjantain PP-tehtävät jaetaan perjantaina.) Mitä ovat PP-tehtävät?
Harjoitustentti
Tehtävien perässä olevat pisteet (6 p. jne.) tarkoittavat pisteitä "harjoitustentissä". Tätä demokertaa silmällä pitäen laskentatapa kuten ennenkin, eli 1 pistettä / tehtävä (tai 2 pistettä tehtävässä 1-2).
Kurssilla opitut dokumentointi- ja ohjelmointikäytänteet koskevat tätä harjoitustenttiä kuin myös oikeatakin 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ä.
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)
Tarkoitetaanko tässä sitä että tuo EtsiToiseksiSuurin-funktio tulostaa myös tuon pätkän? Vai että se tehdään erillisellä aliohjelmalla? Hieman epäselvä ohjeistus
—TulostaTaulukko tulostaa taulukon alkiot (ei muuta), ja ToiseksiSuurin palauttaa luvun (ei tulosta mitään). Kaikki muu tulostaminen tapahtuu Main-pääohjelmassa.
—Tämä vielä hieman epäselvä. Käsittääkseni Main-pääohjelma ei tulosta mitään? Mistä tuo "Taulukon ........ toiseksi suurin alkio on ...." teksti pitäisi tulostaa?
—Tarkoitin että Console.WriteLine-lauseita saa olla vain Mainissa, ja sitten TulostaTaulukko-aliohjelmassa.
—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 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ä 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ää 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
Eikö kahden koepisteen tehtävistä pitäisi tulla 1.0/3 ja yhden pisteen 1.0/6 pistettä, jos koepisteitä saa kerätä korkeintaan 6.
—Kyllä. Kiitos huomiosta. Nyt korjattu. /AJL
—Kahden pisteen tehtävät ok, mutta yhden pisteen tehtävistä saa edelleen 0.125 eikä 0.1667
—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 lauseke 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
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 :-).
Onko tehtävästä saatavissa 0-2 vai 0-3 pistettä? Aikaa tehtävän laskemiseen läppärillä menee ~ 240 ms.
—Kolme enintään. Nyt korjattu. /AJL
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.