avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
```
Demotilanne:
Please
Osa-alue |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
12 |
12 |
Luennot | 1&2 | 3&4 | 5&6 | 7&8 | 9&10 | 11&12 | 13&14 | 15&16 | 17&18 | 19&20 | 21&22 | 23&24 | |||
Deadlinet |
HT1 (suu- nnitelma) |
Väli- kysely |
Debug- näyte |
HT2 (50%) |
Tentti- ilmo |
HT3 (100%) |
Tentti | ||||||||
Ohjaus | 1 | 2 | 3 | 4 | 5 | ||||||||||
Demo | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | d% | |
Pisteet |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
|
Korjattu |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
||||
Tunnit |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please
Tehtävät perustuvat luentoihin: 21 ja 22.
Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.
Alla kolme kyselyä. Kustakin saa + 1p demokertymään, mutta kunkin kerran ei-tenttiä vaihtoehdon 5p pitää kerätä tästä demosta niin, että siinä on ainakin 4p muuta kuin näitä kyselyjä. Kaikki kyselypisteet silti toki otetaan summaan huomioon.
Mikäli et vastannut vielä Demon 10:n yhteydessä alla olevaan vastaa nyt. Muista seurata onko edellisen kerran kysymykseesi/palautteesi vastattu.
HUOMAA LUKEA HUOLELLA MIHIN PALAUTE LAITETAAN!!!
Huomaa että kurssin asioihin, eli TIMiin kirjoitettuun sisältöön, liittyvät ehdotukset tulee laittaa joko kurssin keskusteluun tai palautteeseen. Esim: voisiko kaikki demot näkyä yhdellä sivulla - on kurssin kehitysehdotus, ei TIMin.
Kerro TIMin parannusehdotuksia. Ei ole pakko keksiä mitään uutta, voit olla samaa tai eri mieltä jonkin olemassa olevan kanssa. Eli mene sivulle TIMin parannusehdotuksia.
Sitten kun olet antanut palautteen, niin muista seurata miten siihen on vastattu! Palautteesta saa laittaa vain 0.5 p ja palautteen vastaukseen vastaamisesta toisen 0.5 p. Jos edellisdemossa on tuo jälkimmäinen 0.5 p jäänyt puuttumaan, voit hoitaa sen nyt.
Muista että et koskaan käytä palautteissa Miksi
-sanaa. Mieti myös miten antamasi palaute on suhteessa muihin käyttämiisi järjestelmiin ja mikä on teknisesti kallista/haastavaa toteuttaa ja kuinka oleellinen on toivomuksesi suhteessa n. 1000 toivomuksen listaan :-) Eli "Olisi kivaa" - "Toimii väärin ja korjattava välittömästi" akselilla on iso jatkumo.
Kirjoita alle lyhyesti mistä kerroit ja erityisesti jos sinulla on konkreettisia parannusehdotuksia.
Vastaa kurssin jälkeisellä tiedolla kyselyyn: Mitä ohjelmointi on. Älä katso syksyn vastauksiasi ennen vastaamista, mutta vastaamisen jälkeen voit verrata syksyn vastauksiisi.
Tämä demo on kurssin tenttiä varten harjoittava leikkitentti.
Muista testit, kommentit ja hyvät ohjelmointikäytännöt niin tässä leikkitentissä kuin oikeassakin.
Tehtävänäsi on kirjoittaa funktio SuurinItseisarvo
ja aliohjelma TulostaTaulukko
.
Ohjelman toiminta on seuraava: Pääohjelma kutsuu funktiota SuurinItseisarvo
, joka etsii ja palauttaa parametrina viedyn kokonaislukutaulukon alkion, jonka arvo on kauimpana nollasta. Jos taulukossa ei ole riittävästi alkioita, palautetaan int.MinValue
, ja jos taulukossa on useampi yhtä kaukana nollasta oleva arvoa, palautetaan niistä aina suurin.
Tämän jälkeen taulukko ja sen nollasta kauin alkio tulostetaan aliohjelmalla TulostaTaulukko
, jota ei tarvitse testata.
Ohjelman tulee toimia seuraavasti:
taulukon arvot: 3 1 -7 9 15 -8
Ensin funktio SuurinItseisarvo
palauttaa arvon 15
Seuraavaksi aliohjelma TulostaTaulukko
tulostaa merkistä merkkiin:
Taulukon [3, 1, -7, 9, 15, 8] nollasta kauin arvo: 15.
Pääohjelman kunkin "testin" pitää vastata TÄSMÄLLEEN mallissa esitettyä tulostusfromaattia.
Huom! Aliohjelma EI saa järjestää taulukkoa, eikä käyttää muitakaan valmiita funktioita taulukon käsittelyyn.
Vinkki! Kirjoita funktiolle SuurinItseisarvo
testit ennen varsinaisen funktion tekoa.
Seuraavissa testiajoissa oletetaan:
int.MinValue
Testien testaamiseksi paina yllä olevaa Tarkista testit
-painiketta. Tässä testejäsi ajetaan joukkoa valmiiksi kirjoitettuja funktiota vastaan. Yksi funktiosta on täysin määritelmänmukaisesti toimiva ja siihen liittyvien testien pitäisi aina mennä läpi. Muut ovat erilaisia "viallisia" funtkioita, joissa oleva vika pitäisi testeillä huomata, eli testien pitäisi paluttaa niistä Failure
.
Ajon tulokseksi tulee joukko rivejä tyyliin:
Vakiofunktio 4: pitäisi tulla Failure, tuli: Success. Pisteitä: 0
Tulkitse tuota seuraavasti:
Vakiofunktio 4: testiä on ajettu sellaista funktiota vastaan, jonka
toteutus on aina return 4;. Yksikään testeistä ei huomaa
että tällainen funktio ei ole oikein.
pitäisi tulla Failure: eli testien ajamisen olisi pitänyt tuottaa
epäonnistuminen
tuli: Success mutta testien ajaminen tuotti tuloksen että
testit menisivät läpi
Pisteitä: 0 onnistumisen määrä tällä testifunktiolla
Eli yksittäisen funktion testaaminen on onnistunut silloin, kun pitäisi tulla
ja tuli
jälkeiset tekstit ovat samat.
Pääohjelman taulukossa on nimiä, jotka ovat käänteisessä järjestyksesä.
Kaanna
, joka palauttaa nimet takaisin niiden oikeaan järjestykseen.Siirra
, joka siirtää nyt oikeinpäin kääntyneen sukunimen koko nimen loppuun.
Ohjelman tulee toimia seuraavasti:
ukA akknA, epeS isuS, ikkiM iriiH
Kaanna
kääntää nimien kirjainjärjestyksenSiirra
siirtää sukunimen koko nimen loppuun1) Taulukon alkuperäiset jonot: ukA akknA, epeS isuS, ikkiM iriiH.
2) Merkkien järjestys käännetty: Ankka Aku, Susi Sepe, Hiiri Mikki.
3) Etu- ja sukunimet vaihdettu: Aku Ankka, Sepe Susi, Mikki Hiiri.
Vastauksessa EI SAA käyttää valmiita Reverse
tms funktioita. Ainoat sallitut valmiit funktiot ovat Split
ja IndexOf
ja string
tai StringBuilder
-luokan muodostajat.
Funktioiden testit pitää kirjoittaa itse. Hyvässä vastauksessa olisi vielä kummastakin funktiosta ensin versio yksittäiselle merkkijonolle, jolloin testaaminen ja debuggaaminen on helpompaa.
Huom! Etunimiä voi olla useampikin kuin yksi.
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.
Kirjoita aliohjelma Korvaa(jono, merkki, merkkijono)
, jolle seuraavat aliohjelman testitapaukset toimisivat. Tyypit joudut miettimään itse. Samoin miten <- käytännössä toteutetaan. Kirjoita pieni testipääohjelma ja käytä annettuja mallitestejä aliohjelman Korvaa
varsinaiseen testaamiseen.
TYYPPI jono <- "Pizza, pasta ja paella"; // alustetaan jono
Korvaa(jono, 'l', "n") === 2; jono.ToString() === "Pizza, pasta ja paenna"
Korvaa(jono, 's', "kas") === 1; jono.ToString() === "Pizza, pakasta ja paenna"
Korvaa(jono, 'P', "Ib") === 1; jono.ToString() === "Ibizza, pakasta ja paenna"
Korvaa(jono, 'p', "") === 2; jono.ToString() === "Ibizza, akasta ja aenna"
Korvaa(jono, 'x', "sos") === 0; jono.ToString() === "Ibizza, akasta ja aenna"
Korvaa(jono, 'a', "ui") === 7; jono.ToString() === "Ibizzui, uikuistui jui uiennui"
Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä.
Seuraavassa on pala ohjelmasta, jossa on lista Object-tyyppisistä olioista. Object on tyyppi, joka voi olla mikä tahansa tietotyyppi C#:issa. Object listaan voidaan tallentaa niin merkkijonoja, StringBuildereitä kuin taulukoitakin. Ja paljon muutakin jos tarvitaan. Object-listan käsitte on sikäli hankalaa, että kun kohdalla oleva olio voi olla mitä tahansa, niin ei tiedetä miten sitä käsitellään. Siksi on valmiiksi tehty aliohjelma Tulosta
, joka osaa tulostaa Object
-listan. Eli tästä ongelmasta ei tarvitse välittää.
Ohjelmassa on tulostettu lista kunkin operaation jälkeen. Tehtävänä on piirtää kuva jokaisesta kohdasta, jossa on kutsu Tulosta()
. Kolme ensimmäistä vaihetta on piirretty sinulle valmiiksi omiin vastauslaatikoihinsa.
Voit niistä olevista kuvista kopioida asioita uusia vastauskuvia varten.
Pikkuinen 0 tai 1 alkukuvissa listan vasemmassa yläkulmassa kuvastaa listan alkioiden määrää (Count
). Muista päivittää myös sitä.
Tehtävä on pitkä, mutta kopioimalla edellisen vaiheen ei seuraava vaihe tarvitse paljoa muutoksia.
Vinkki! Vaiheen 4 oliot[1]
nuolen tulee osoittaa samaan paikkaan kuin luvut
-viitemuuttuja (nuoli samaan paikkaan). Liian monella se nuoli osoittaa luvut
-viitemuuttujaan, johon sen ei kuulu osoittaa.
Tässä tehtävässä ei ole tarkoitus tehdä "roskien keruuta" (Garpage Collection), eli nyt ei "uusiokäytetä" kekomuistiin (Heap) tulleita alueita.
Tämä harjoitustehtävä antaa vielä palautetta vääristä, mutta oikeassa tentissä alkupään vaiheet antavat palautetta, mutta palaute vähenee loppua kohti ja lopussa pitää itse tietää onko vastaus oikein vai ei. Välttämättä joka vaiheessa ei tentissä näytetä edes pisteitä ettei voi kokeilemalla saada oikeata vastausta.
Ohjeita piirtämiseen:
Ref nimi
= luo uuden viitemuuttujan kuvan
New $nro Sisältö
= luo uuden kekomuistissa olevan olion kuvan, jolla on nimenä $nro
ja sisältönä mainittu sisältö. Sisältö voi olla lainausmerkeissä tai ilman lainausmerkkejä.
nimi -> $nro
= laitetaan viitemuuttujasta nimi
viitenuoli kekoon luotuun olioon nimeltä $nro
new List $nro R4
= luo listan kuvan, jossa on viitteitä (Reference) 4 kpl.
$1.count = 2
= asettaa listan $1
lukumäärälaskurin arvoksi 2
new Array *$3 V3 2 3 4
= tekee taulukon jossa arvoja (Value) 3 kpl ja arvot perässä.
Ref oliot -> new List *$1 R4
= lyhenne lauseille:
Ref oliot
new List *$1 R4
oliot -> $1
Lisää infoa piirtämisestä löytyy vars.js käyttöohjeesta.
Seuraavat lisätehtävät (Ville, B ja PP) eivät kuulu "tenttiin".
Tee Ville-tehtävät: 10.1, 10.2., 11.1-11.2, 11.3-11.4
Voit ottaa pohjaksi Visual Studioon tiedoston: Robots.cs ja kirjoittaa koodin siinä ja sitten kopioida sen Villeen. Samasta tiedostosta voit lukea myös robotin "käyttöohjeita".
Koodi voi olla esim:
rc.withdraw();
for (int i=0; i<3; i++) rc.down();
rc.grab();
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.
0
3
6
9
12
15
Taulukon paikassa 0 on luku 1
Taulukon paikassa 1 on luku 3
Taulukon paikassa 2 on luku 5
...
Taulukon paikassa 9 on luku 19
PalautaKirjain
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'
Näihin tehtäviin voit palauttaa jonkin oman kurssin tämän hetken oppimistavoitteita vastaavia tehtäviä. Ei kuitenkaan enää jos vastaavat tehtävät on tehty edellä olevissa tehtävissä.
Nämä on tarkoitettu lähinnä niille, joilla ei ole mahdollisuutta tehdä varsinaisia tehtäviä ajallaan esimerkiksi kertausharjoitusten tai sairauden takia. Yleensä jos tulee ajoissa ennakoitavia esteitä, pitäisi perustehtäviä tehdä etukäteen.
Nämä arvostellaan manuaalisesti ja opiskelijan pitää ottaa yhteyttä kurssin opettajiin kun toivoo näitä arvosteltavan. Jos tehtävä on liian lähellä mallivastauksia, ei sitä arvostella tai voidaan pyytää muuttamaan vastaustaan erilaiseksi. Samoin jos tehtävä ei liity viikon oppimistavoitteisiin (vertaa esim tähtitehtävät). Luonnollisesti nuo kaksi ohjelmaa eivät saa olla samanlaisia. Laita ohjelman kommentteihin mitä perustehtäviä nämä korvaisivat ja mikä olisi oma peruste millekin pistemäärälle (se voi olla enemmänkin kuin 1p/tehtävä).
Please