avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
```
Demotilanne:
- Pisteet päivittyvät pienellä viiveellä.
- Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
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
Ohjelmointi 1, avoin 2023 / Demo 11
Tehtävät perustuvat luentoihin: 21 ja 22.
OPPIMISTAVOITTEET
Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.
Kyselyt
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.
Kysely 1. TIMin käytettävyys (1 p)
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.
Kysely 2. Mitä ohjelmointi on (1 p)
Vastaa kurssin jälkeisellä tiedolla kyselyyn: Mitä ohjelmointi on. Älä katso syksyn vastauksiasi ennen vastaamista, mutta vastaamisen jälkeen voit verrata syksyn vastauksiisi.
Mallitentti
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ä 1*. Taulukot
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 arvon15
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.
Testien testaaminen (1 p)
Seuraavissa testiajoissa oletetaan:
- jos taulukossa kaksi kauinta (eli yhtä kaukana nollasta), niin ensimmäinen niistä on kauempi
- jos ei riittävästi alkioita, palautetaan
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.
Tehtävä 2. Nimet
Pääohjelman taulukossa on nimiä, jotka ovat käänteisessä järjestyksesä.
- Tee ensin aliohjelma
Kaanna
, joka palauttaa nimet takaisin niiden oikeaan järjestykseen. - Tee sitten aliohjelma
Siirra
, joka siirtää nyt oikeinpäin kääntyneen sukunimen koko nimen loppuun.
Ohjelman tulee toimia seuraavasti:
- taulukon nimet:
ukA akknA, epeS isuS, ikkiM iriiH
- Ensin aliohjelma
Kaanna
kääntää nimien kirjainjärjestyksen - Sitten aliohjelma
Siirra
siirtää sukunimen koko nimen loppuun - Lopuksi pääohjelma tulostaa:
1) 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.
Mallivastauksen testit ovat väärin, ei anna pisteitä.
VL: Mallivastauksen testit kirjoitettu uudelleen, samoin mallivastausta korjattu. Kielletty osa valmiista funktioista. Testit pitää kirjoittaa itse.
—Tehtävä 3. Aliohjelmakutsu
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.
Tehtävä 4. Korvaa
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"
Tehtävä 5. Teoriakysymyksiä
Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä.
Tehtävä 6*. Piirtäminen
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 kuvanNew $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 viitemuuttujastanimi
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 2new 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.
Lisätehtävät
Seuraavat lisätehtävät (Ville, B ja PP) eivät kuulu "tenttiin".
Ville
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();
B1. Salakirjoitus kuvaan
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.
PP
PP1
- Tee for-silmukka joka tulostaa seuraavaa:
0
3
6
9
12
15
- Täydennä aliohjelma TaytaTaulukko siten, että ohjelma tulostaa seuraavaa:
Taulukon paikassa 0 on luku 1
Taulukon paikassa 1 on luku 3
Taulukon paikassa 2 on luku 5
...
Taulukon paikassa 9 on luku 19
- Tee aliohjelma
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'
PP2
- Täydennä aliohjelma LahinLuku niin, että sille kirjoitetut testit voidaan ajaa virheettä. Testausta.cs
- Täydennä pääohjelma niin, että käytät apunasi kommenteissa mainittuja aliohjelmakutsuja. Tehtävässä ei tarvitse itse luoda yhtään aliohjelmaa. Aliohjelmia.cs
- Tee aliohjelma joka vastaanottaa merkkijonon ja lisää siihen merkkijonon " on hauskaa". (Käytä StringBuilder-luokkaa)
- Täydennä muuttujatyypit oikeiksi. Muuttujia.cs
Omaa tuotantoa
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
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.