Harjoitustehtävät 11

Harjoitustentti

Tämän harjoitustehtäväkerta on rakennettu mukailemaan tentin rakennetta.

Tentissä jokainen tehtävä on (tavallisesti) kuuden pisteen arvoisia. Tässä harjoitustehtäväkerrassa tehtävät pisteytetään kuitenkin "normaalisti" kuten aiemmillakin viikoilla.

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 Riderissa korjata mahdolliset virheet, ja palauttaa korjatun vastauksen TIMiin.

Muista, että myös oikeassa tentissä saat käyttää kaikki verkosta saatavat materiaalit, mukaan lukien kurssikirja ja luentodiat.

Oikeassa tentissä ei ole visu-, bonus- tai gurutehtäviä.

T0. Palaute tästä osasta (0,5 p.)

Auta meitä parantamaan tätä kurssia antamalla palautetta tästä kurssin osiosta.

Huom: Vastaa tähän vasta, kun olet valmis tämän harjoitustehtäväkerran tehtävien kanssa

Avaa palautelomake klikkaamalla tästä

T1-2*. Toiseksi suurin (2 p.)

Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.

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.
Funktio ei myöskään saa muuttaa alkuperäistä taulukkoa.

Mitä huomionarvoisia erikoistapauksia voi olla? Määrittele miten ne käsitellään.

Esimerkki:

  • Parametrina taulukko: 3, 1, -7, 9, 15, 8
  • Funktio palauttaa arvon 9

Palautus: Palautuslaatikkoon palautetaan pelkkä funktio, ei class- eikä Main-koodia.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 piste, puoliksi oikein 1 piste jne. Ota arvioinnissasi myös huomioon, kuinka hyvin seurasit kurssin ohjelmointikäytänteitä.

# tehtava_toiseksi_suurin

T3. Monivalintakysymykset (1 p.)

Vastaa alla oleviin kysymyksiin.

Arviointi: Pisteitä saa oikeista vastauksista. Yhteenlaskettu maksimipistemäärä on 1 p. Kysymyskohtaiset pisteet näkyvät kysymysten yhteydessä. Monivalintakysymyksissä vain yksi vastausyritys/kysymys!

# tehtava_monivalintakysymykset_1
# tehtava_monivalintakysymykset_2
# tehtava_monivalintakysymykset_3
# tehtava_monivalintakysymykset_4
# tehtava_monivalintakysymykset_5
# tehtava_monivalintakysymykset_6

T4. Bussipysäkit (1 p.)

Jos haluat tehdä tehtävän Riderissa: Komentorivitehtävien tekeminen Riderissa.

Bussi liikkuu kaupungissa ja pysäkin kohdalla ottaa kyytiin ja pudottaa matkustajia pois.

Tee ohjelma, jossa on funktio Matkustajia. Funktiolla on seuraavat 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.

Esimerkki kuinka voit luoda listan pysäkeistä:

List<int[]> pysakit = new List<int[]>();
pysakit.Add([5, 4]);
pysakit.Add([3, 2]);

Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0,5 pistettä jne. Ota arvioinnissasi myös huomioon, kuinka hyvin seurasit kurssin ohjelmointikäytänteitä.

# tehtava_bussipysakit

Miksi koodi ei toimi?

Tehtävänannon mukaan on palautettava koko ohjelma, mukaan lukien myös using-määreet. Virheteksti antaa saman vinkin: "The type or namespace name 'List<>' could not be found (are you missing a using directive or an assembly reference?)" -DZ

24 Nov 25 (edited 25 Nov 25)

T5. Funktiokutsu (1 p.)

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 arvotyypeillä (bool, char, int, double) ja viitetyypeillä?

Palautus: Palauta kirjallinen vastauksesi alla olevaan laatikkoon.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0,5 pistettä jne.

# tehtava_funktiokutsu_selitys

T6. Aliohjelman toteutus (1 p.)

Kirjoita aliohjelma Poista(jono, kirjain), jolle seuraavat aliohjelman ComTest-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.

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";

Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-1. Jos teit tehtävän mielestäsi täysin oikein, 1 piste, puoliksi oikein 0,5 pistettä jne. Ota arvioinnissasi myös huomioon, kuinka hyvin seurasit kurssin ohjelmointikäytänteitä.

# tehtava_poista_merkki

T7. Teoriatehtäviä (1 p.)

Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-0,125 jokaiseen osatehtävään. Osatehtävien yhteenlaskettu pistemäärä on 1 p.

a) Mitä silmukkarakenteita C#-kielessä on ja mitkä ovat niiden keskeiset erot? Mainitse vähintään kolme erilaista rakennetta.

# tehtava_teoria_1

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

0100 0101      0011 1111     1000 0001
# tehtava_teoria_2

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

# tehtava_teoria_3

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

# tehtava_teoria_4

e) Pohdi, missä mielessä List on parempi kuin tavallinen taulukko? Entä missä mielessä huonompi?

# tehtava_teoria_5

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

# tehtava_teoria_6

g) Paljonko on lauseke 34/7 C#:ssa? Entä paljonko on 34%7 C#:ssa.

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ä.

# tehtava_teoria_7

h) Mitä tarkoittaa automaattinen roskienkeruu?

# tehtava_teoria_8

V1. ViLLE (1 p.)

Tee ViLLE-tehtävät: 10.1, 10.2.

Muista: Villen käyttöohje

# visu_ville

B1. Tutkimus-/loppukysely (1 p.)

Vastaa kurssin tutkimus-/loppukyselyyn.

Voit vastata kyselyyn, vaikka et ole vastannut kurssin alun esitietokyselyyn.

# bonus_jalkikysely

B2-4. Advent of Code (3 p.)

Tee vuoden 2023 ensimmäinen Advent of Code -tehtävä.

  • Voit halutessasi ratkaista myös lisätehtävän, jonka saa ratkaisemalla alkutehtävä. Lisätehtävän avaaminen edellyttää kirjautumista Advent of Code -sivulle.
  • Ohjelman tulee lukea syöte tiedostosta. Oman syötetiedoston saat kirjautumalla sisään Advent of Code -sivulle ja perustehtävän ratkaisemista. Jos et halua kirjautua sisään, voit sen sijaan käyttää tätä mallisyötetiedostoa: syote.txt.
  • Voit tarkistaa, edustaako merkki numero esimerkiksi Char.IsDigit-aliohjelmalla.

Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma. Huom: TIMin palautuslaatikossa on valmiiksi tiedosto syote.txt, joka sisältää mallisyötetiedoston.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 piste jne.

Jos ratkaisit myös lisätehtävän, anna itsellesi 1 bonuspiste.

Vinkki: perustehtävän ja lisätehtävän mallitulokset mallisyötteellä (Avaa klikkaamalla)

# bonus_aoc_2023_day1

G1-3. Euler problem 206 (3 p.)

Ratkaise Euler problem 206.

Laskun pitää mennä alle minuuttiin. Yksi lisäpiste jos lasku menee "erittäin nopeasti" (luokkaa millisekunteja omalla tietokoneella).

Huom: TIMissa ohjelmat käännetään aina ilman optimointia, jotta mahdolliset virheviestit olisivat selkeämpiä. Tämä kuitenkin tarkoittaa, että koodin ajaminen TIMissa on aina väistämättä hitaampaa kuin se todellisuudessa voisi olla.

Riderissa voi kääntää ja ajaa ohjelman Release-tilassa painamalla Suorita-painikkeen vieressä olevasta Build whole solution painikkeen ("Vasara-ikoni") vieressä olevasta alasvetopainikkeesta ja valitsemalla Release-konfiguraatio.

Palautus: Palautuslaatikkoon palautetaan koko ohjelma, mukaan lukien luokka ja pääohjelma.

Arviointi: Käytä Set custom points -toimintoa TIMissa. Tee itsearvio pistemäärästäsi ja syötä omat pisteesi väliltä 0-2. Jos teit tehtävän mielestäsi täysin oikein, 2 pistettä, puoliksi oikein 1 piste jne. Jos lasku menee nopeasti (luokkaa millisekunteja), anna itsellesi yksi piste lisää.

Vinkkejä tehtävän tekemiseen (Avaa klikkaamalla)

# guru_euler_206

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