Sinun UserID: 0
Ilmoittaudu missä ryhmässä (live/zoom/video) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)
Please
to interact with this component. Please
to interact with this component. Please
to interact with this component. Please
to interact with this component. Please
to interact with this component.
Alla demotilanteesi.
- Pisteet eivät päivity tähän automaattisesti, vaan aina pienellä viiveellä.
- Värit: Punainen: Minimit ei täyty. Vihreä: vähintään 5p joista 2p tähtitehtävistä.
Ohjelmointi 1, s 2023 / Demo 11
Jos haluat harjoitella vastaavilla tehtävillä, joihin saat myös mallivastaukset, niin katso:
HUOM! Joka kerta on saatava vähintään 2p tähtitehtävistä! Alle 5p tehneillä on huono ennuste loppukurssissa.
Demot palautetaan viimeistään ma 20.11 klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä. Alla mainitut mallivastaukset näkyvät vasta kun demojen palautustilaisuudet on pidetty.
- huomaa että Answer-linkistä pääset katsomaan muiden vastauksia kun palautusaika on ummessa
- mallivastaukset
- muiden vastaukset
Oppimistavoitteet
Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.
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 (tai zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen palautustilaisuuteen osallistuminen 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. Tästä annettava 0.25 näkyy Pisteet-sivun demokerran summassa. Kirjoita pelkkä luku esim tyyliin 13.5
Ajankäyttösi tällä viikolla:
Please
Kun tehtävien vastaukset on julkistettu (esim demopalautuksissa), pitää jokaisen korjata omat vastauksensa niin, että ainakin Tauno ja perustehtävät 1-6 tuottavat vähintään 1p kukin. Eli demon palautuksen jälkeen pitää demosivun näyttää vähintään 7 p.
Siis esim. ennen demo 2 tehtävien aloittamista pitää demoista 1 tulla vähintään mainittu pistemäärä.
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 23 Lisää em. videosivulle vähintään 3-linkkiä ja kirjoita alla olevaan laatikkoon, mitkä linkit lisäsit. Joka demokerralle voi merkitä aina vähintään 3:sta linkistä yhden demotehtävän.
Mielipide demosivun uudistuksesta
Kyselyt
Alla kolme kyselyä (avaa + -merkistä). 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 TIMin käytettävyydestä (1p)
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.
Mitä ohjelmointi on - kysely (1p)
Vastaa kurssin jälkeisellä tiedolla kyselyyn: Mitä ohjelmointi on. Älä katso syksyn vastauksiasi ennen vastaamista, mutta vastaamisen jälkeen voit verrata syksyn vastauksiisi.
Yliopiston virallinen kurssikysely (1p)
Tämän sähköposti ei ole vielä tullut, yritän pyytää digipalveluilta että se saataisiin liikkeelle viimeistään ti 14.11.2023 Onko linkki tullut?
Vastaa yliopiston teettämään viralliseen kurssikyselyyn (tästä olisi pitänyt tulla teille henkilökohtainen sähköposti 10.11.2022). Mikäli postia ei ole tullut, tutki vielä roskaposti ja mainokset (erityisesti hotmail-käyttäjät ja gmail-käyttäjät).
.
Tähän vastaaminen on sikäli tärkeää, että meitä arvioidaan sekä opettajina että yksikköinä (vain?) näiden perusteella :-(
Mallitentti
Tämä demo on pääasiassa mallitentti.
Tehtävien perässä olevat pisteet (6p jne.) tarkoittavat pisteitä "leikki"tentissä. Demopisteet lasketaan ja näytetään kuten ennenkin eli pääosin 1p/tehtävä.
Muista testit, kommentit ja hyvät ohjelmointikäytännöt myös niin "leikki"tentissä kuin oikeassakin.
Pääohjelma kutsuu aliohjelmaa (funktiota) EtsiToiseksiSuurin
, joka etsii ja palauttaa parametrina viedyn kokonaislukutaulukon toiseksi suurimman alkion. Jos taulukossa ei ole riittävästi alkioita, palautetaan int.MinValue
. Aliohjelma EI saa järjestää taulukkoa. Eikä käyttää muitakaan valmiita funktioita taulukon käsittelyyn.
Ennen aliohjelman kirjoittamista kirjoita EtsiToiseksiSuurin
-funktiolle testit.
Toiseksi suurimmalle on selkeästi kaksi eri vaihtoehtoa:
Ajattele toiseksi suurin seuraavasti: jos olisi kilpailu ja kilpailijoille tulokset, niin kuka olisi voittaja ja kuka toinen (mahdollisesti samalla tuloksella). Eli joukon
{3,2,8,5,8}
suurin on8
ja toiseksi suurin on myös8
. Sama voidaan tulkita niinkin, että aineisto ensin järjestetään (tässä tehtävässä ei saanut järjestää) ja sitten otetaan sen aineistoin toiseksi viimeinen luku, eli esimerkissä järjestetty aineisto olisi{2,3,5,8,8}
.Tämä ei ole ainoa tulkinta, toki tulkinta voisi olla sellainenkin, missä etsitään ensin joukon erilaiset alkiot ja niistä siten suurin ja toiseksi suurin. Tällä tulkinnalla edellisen aineiston suurin olisi
8
ja toiseksi suurin5
.
Myöhemmin olevat testien testit olettavat tuon 1. tulkinnan.
Tämän jälkeen taulukko ja sen toiseksi suurin alkio tulostetaan. Taulukon tulostaminen hoidetaan omalla aliohjelmalla TulostaTaulukko
. Tulostavia aliohjelmia ei tarvitse testata tällä kurssilla. (12 p)
Halutessaan helpoin tapa testata niitä on suunnitella ne testattaviksi, eli jakaa aliohjelman kahteen osaan: Funktioon joka tuottaa tarvittavan tulosteen merkkijonona (joka ei tulosta mitään tietenkään, mutta on funktiona helppo testata) ja tulostavaan aliohjelmaan, joka kutsuu tuota funktiota. Tulostava osa jää edelleen testaamatta, mutta jos se on vain yksi WriteLine
, niin sen voisi olettaa toimivan. Tästä on esimerkki ComTestien esimerkki-sivulla.
Esimerkki:
taulukko:
3 1 -7 9 15 8
funktio
EtsiToiseksiSuurin
palauttaa arvon 9 (ei tulosta), jonka jälkeen aliohjelmaTulostaTaulukko
tulostaa täsmälleen seuraavasti:Taulukon 3 1 -7 9 15 8 toiseksi suurin alkio on 9
peräkkäisille riveille.
Tulostuksen pitää olla TÄSMÄLLEEN mallin kaltainen kustakin "testistä".
Muista että kynä ja paperia on kovaa valuuttaa algoritmia ja ehtoja mietittäessä! Tai pelaa kaverin kanssa korttia niin että kaveri antaa yksitellen kortteja ja sinun pitää milloin tahansa olla valmis vastaamaan että mikä oli toiseksi suurin kortti. Mitä muistiinpanoja pitää minimissään tehdä?
Vinkki: Kaksi silmukkaa vain vaikeuttaa asioita tässä tapauksessa, yhdellä pärjää mainiosti!
Mikä on output tässä yhteydessä? Miten siitä saa nuo puuttuvat pisteet?
VL: Mieti itse mikä esim tuon viimeisen vastaus on.
—Miten nou output pisteet saa?
VL: kun tulostus on täsmälleen kuten mallissa. Ota malli ja sun eka rivi ja vertaa niitä huolella.
—Tuloksen eka rivi ja malli ovat täsmälleen samat. Outputin piste puuttuu edelleen. Mitä pitäisi tehdä seuraavaksi?
VL: ylimääräisiä rivinvaihtoja, perkkäisille riveille. Korostan vielä tehtävään tuon...
—Output-pisteitä ei tule, vaikka tulosteet ovat mallin mukaiset ja peräkkäisillä riveillä. Mitä en huomaa?
VL: Kaikilla riveillä ei ole oikein laskettu 2. suurinta.
—Vinkki: Jos algoritmi ei ole kristallin kirkas, harjoittele Taunolla ja/tai kynällä ja paperilla.
Yleisiä virheitä:
- turhan monimutkaisia
- testeistä puuttuu
- tyhjä taulukko
- yhden alkion taulukko
- taulukossa suurinta lukua monta kpl
- sisennykset
- mystiset vakiot kuten 0, -1, -9999 jne...
- foreach:issä i ei oo hyvä alkion nimi
- ei tarvii kahta silmukkaa
- kommentit
- mitä tekee
- erikoistapaukset (tosin voi löytyä testeistä)
- paramaterit
- paluuarvon
Testien testaaminen (1 p)
Huom! Tätä ei lasketa tähtipisteisiin.
Seuraavissa testiajoissa oletetaan:
- jos taulukossa kaksi suurinta (eli yhtäsuurta suurinta), niin toinen niistä on 2. suurin
- jos ei riittävästi alkioita, palautetaan
int.MinValue
Yhdestä testistä tulostuu "Ekaa ei huomioitu: pitäisi tulla Failed, tuli: Passed. Pisteitä: 0" Mitä tuo "Ekaa ei huomioitu" tarkoittaa?
VL: et ole huomioinut tilannetta, että mitä ikinä tehdään voisi olla ekassa paikassa.
—Mitäköhän tässä pitäisi lähteä korjaamaan: "Oikea koodi: pitäisi tulla Passed, tuli: Failed. Pisteitä: -20"
VL: Sun testit eivät hyväksy täysin toimivaa funktiota.
—Tarvitsen lisätietoa kohdista "ekaa/viimeistä ei huomioitu". Kryptinen/tautologinen ilmaisu ei autismini puitteissa riittänyt asian käsittämiseen: tiedän että asia liittyy jotenkin siihen, mitä (mitä mitä?) huomioidaan ekana tai vikana. Helpointa olisi nähdä virhecase.
VL: Se lukee tuolla edellisessä kommentissa: Sinun testisi eivät huomioi tilannetta, jossa etsittävä asia löytyy taulukon 1. tai viimeisestä paikasta. Eli jos funktio on sillä tavalla rikki, että 1. paikassa oleva jätetään käymättä läpi, niin testisi silti toteaa funktion olevan kunnossa.
—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 tuloksen tulee joukko rivejä tyyliin:
Vakiofunktio 4: pitäisi tulla Failure, tuli: Success. Pisteitä: 0
Tulkinta:
Vakiofunktio 4: testiä on ajettu sellaista funktiota vastaan, joka
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ä muodossa
Ekaetunimi Tokaetunimi Kolmasetunimi Sukunimi
Sukunimi on aina mukana, etunimiä on vähintään yksi, enintään kolme. Tee aliohjelma TulostaNimet
joka tulostaa nimet aakkosjärjestyksessä sukunimen mukaan (järjestämiseen saa käyttää C#:in valmiita työkaluja), muodossa
Sukunimi E.T.K.
Ohjelma siis tulostaa:
Taulukko sisältää nimet:
Kaarle Kustaa Korkki
Seppo Pentti Ville Kinnunen
Åke Aarnio
Ulla-Maija Wikholm-Seppänen
Nimet tulostettuna oikeassa muodossa ja aakkosjärjestyksessä:
Aarnio Å.
Kinnunen S.P.V.
Korkki K.K.
Wikholm-Seppänen U.
(6p)
Mistä löytyvät ohjeet void-aliohjelmien testaamiselle?
VL: Kurssinmenusta, Työkalut ja ComTest käyttöesimerkkejä. StringBuilderin kohdalla on yksi idea ja toisaalla tulostamisen kohdalla riippuen käyttötarpeesta.
—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. (6 p)
Kirjoita aliohjelma Poista(jono, kirjain)
, jolle seuraavat aliohjelman testitapaukset toimisivat. Tyypit joudut miettimään itse. Samoin miten <- käytännössä toteutetaan. Kirjoita aliohjelmalle testit ja pieni pääohjelma, jossa aliohjelman toimintaa testataan. Ei saa käyttää valmista Replace
tai RemoveAll
. (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";
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, Omaa tuotantoa) 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();
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
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
Laskin
Kirjoita haluamasi lasku tekstialueeseen ja paina Laske
. Voi kirjoittaa useitakin laskuja samalla kertaa eri riveille tai muokata edellistä laskuja ja laskea uudelleen. Laskin näyttä kunkin suorittamansa rivin tuloksen. Varsinaisessa laskimessa (alempana) on lisäksi painikkeita valmiina.
Laskin irrotetaan omaksi kelluvaksi ikkunaksi painikeella.
Käänteinen nuoli sulkee kelluvan ikkunan.
Kelluva ikkuna pienenee oikean yläreunan -
painikkeella ja suurenee takaisin ruutupainikkeella. Avatun ikkunan kokoa saa säädettyä oikeasta ja alareunasta.
Tenttiin voi johonkin muuhunkin komponenttiin tulla kellutus.
Vaikka laskinta ei periaatteessa tarvitsisi tentissä, mutta jos tarvitseekin, mistä löytyisi selitteet noille eri lyhenteille? Kaikki eivät vaikuta tutuille, kuten deg, rad, sqrt, ln ja miten näitä kuuluisi käyttää
VL: Lisäsin niihin selityksen joka näkyy kun kursorin vie päälle. Mutta varmasti tuollaisia ei tarvita tentissä.
—These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.