```

Demotilanne:

  • Pisteet päivittyvät pienellä viiveellä.
  • Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
# aikajana

Error in expanding macros: 'luentoaiheet' is undefined

# fields

Ohjelmointi 1, k 2024 / 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.

# Oppimistavoitteet

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.

# kyselyTIM

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

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.

# kyselyOhj

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.

TODO opettajille: KauinNollasta on outo nimi. Nimi voisi olla "SuurinItseisarvo", koska siitähän on kyse.

(Ilmeisesti KauimmanPaikka on tässä jäänyt vahingossa tekstiin?) -AJL

Check -JE

13 Jun 23 (edited 13 Jun 23)

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.

# taulukot
# testtest

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
# taunotests
# shell

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.


Huom! Etunimiä voi olla useampikin kuin yksi.

# taulukot2

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.

# Aliohjelmakutsu

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"
# korvaa

Tehtävä 5. Teoriakysymyksiä

Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä.

# teoria1
# teoria2
# teoria3
# teoria4
# teoria5
# teoria6
# teoria7
# teoria8
# teoria9
# teoria10
# piirtaminen

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

# piirtaminencs

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.

# kettu

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.

# viitteet9-1a
# viitteet9-2a
# viitteet9-3a
# viitteet9-4
# viitteet9-5
# viitteet9-6
# viitteet9-7
# viitteet9-8

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

Villen käyttöohjeet

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(); 
# ville

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.

# v4
# salakirjoitus

PP

PP1

  1. Tee for-silmukka joka tulostaa seuraavaa:
0
3
6
9
12
15
# pp1for
  1. 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
# taulukointia
  1. 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'
# paikka

PP2

  1. Täydennä aliohjelma LahinLuku niin, että sille kirjoitetut testit voidaan ajaa virheettä. Testausta.cs
# pp21
  1. 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
# pp22
  1. Tee aliohjelma joka vastaanottaa merkkijonon ja lisää siihen merkkijonon " on hauskaa". (Käytä StringBuilder-luokkaa)
# pp23
  1. Täydennä muuttujatyypit oikeiksi. Muuttujia.cs
# pp24

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

# oma1
# oma2
# tableForm_table

Please to interact with this component.

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