The page has been modified since the last reload. Refresh now?
There are {{ $ctrl.pendingUpdatesCount() }} pending paragraph updates.
HUOM! Joka kerta on saatava vähintään 2p tähtitehtävistä! Alle 5 p tehneillä on huono ennuste loppukursissa.
Demot palautetaan viimeistään maanantaina 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.
Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.
Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.
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 osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) 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.
Please
Please
Huomaa että useissa tehtävissä automaattiarvostelu ei ole likikään täydellinen ja vaikka automaatti antaisi täydet pisteet, se ei takaa että tehtävä olisi likikään oikein. Oikea vastaus on aina tarkistettava demonpalautuksesta (paikan päällä tai videoista).
Katso demonpalautusvideo ja kuvaile miten edellisen viikon demot sujuivat itsearviolomakkeeseen.
Kirjoita alla olevaan tekstilaatikkoon kunkin edellisen demokerran tehtävän kohdalle === katkoviivan alle
Lisää tarvittavat otsikkorivit lopuille tehtäville samaan tyyliin kuin alla on tehty.
Please
================================================== Tauno T1 ================================================== ================================================== Ville V1 ================================================== ================================================== T1 ================================================== ================================================== T2 ==================================================
Please
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 2018 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.
Please
Tässä voit testata ohjelmiasi jos ComTest ei toimi koneellasi
Please
Korpissa on kurssin sivulla ilmoitettu kurssin tentit. Käy ilmottautumassa konetenttiin ja lukemassa tarkemmat ohjeet tentin järjestelyistä tentti-sivulta. Ja erityisesti ruksi kurssin Korppi-sivulla, mihin aikaan voit tulla 29.11 tenttiin.
Tauno ja Tehtävä 1 ovat tyypillisiä tenttitehtäviä, joten ne kannattaa vääntää vaikkeivat ole tähtitehtäviksi merkittykään.
Tällä kertaa ei tule uusia Ville-tehtäviä. Jos sinulla on tekemättä silmukka- ja/tai taulukkotehtäviä (tai muita joita et aikaisemmin ymmärtänyt), tee niitä 5 kappaletta. Tästä Villeen Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.
Please
Tähän hyviä harjoittelutehtäviä ovat: Taulukot silmukalla, Etsiminen
Tee funktio, joka laskee kokonaislukutaulukosta suljetulla välillä 0-10 olevien lukujen keskiarvon. Jotta funktio olisi yleiskäyttöisempi, viedään sille parametrina myös tuo alaraja (esimerkissä 0) ja yläraja (esimerkissä 10). Mikäli keskiarvoa ei voi laskea, palautetaan arvo ala-1. Kirjoita myös testejä ainakin 5 kpl erilaisille taulukoille ja rajoille.
Aja-painikkeesta saatavien virheilmoitusten lukeminen:
1 piti: 33.429 -> 0.000 {12,0,42,14,99,12,55} 0 99
1 testiajo nr 1
piti: 33.429 tuloksen piti olla näin paljon
0.000 mutta ohjelma palautti 0
{12,0,42,14,99,12,55} ajossa käytetty taulukko
0 ajossa käytetty alaraja
99 ajossa käytetty yläraja
Please
//
public static double Keskiarvo(int[] taulukko, int ala, int yla)
{
// Täydennä aliohjelma valmiiksi
}
Tehtävät, joissa on Test-painike, tulee testata Comtestillä, jotta saa täydet pisteet. Mikäli ComTest ei toimi yliopiston mikroluokissa, tarkista että ComTest haetaan oikeasta paikasta: Valitse Visual Studiossa Tools -> ComTest -> Options. Esiin tulee ComTest Plugin Options. Tarkista, että Path to ComTest.jar executable kentässä on N:\bin\ComTest.jar ja olet yhdistänyt koneesi N-verkkolevyyn.
Eli tällä kertaa testit eivät ole bonusta vaan tehtävään kuuluva osa. Piirtotehtäviä (portaat yms) on hankala testata ja sitä ei tehdä tällä kurssilla.
Tarvitaan tehtävissä 5,6-7,B1-3
Kuva ja PalapeliLue tarvittaessa (eli jos et ole vielä koskaan contenttia lisännyt) ohjeita kuvien ja äänien lisäämisestä: Sisällön tuominen peliin.
Xamarinissa saattaa tulla virheilmoitus rivinvaihdoista (line endings). Valitse tässä tilanteessa: Convert all files to UNIX line endings
Mikäli Kuva tai Palapeli-tyypistä tulee virheilmoitus, niin lisää Ohjelma.cs-kooditiedostoon
using Demo9;
Kokeile ajaa eri ohjelmia. Palapelissä hiiren klikkaus siirtää palaa ja Kuva-ohjelmassa tulee erilaisia kuvia.
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Tähän muita hyviä harjoittelutehtäviä ovat: Taulukot silmukalla, Etsiminen
M: 15. Taulukot. Tee aliohjelma PisinNouseva, jolle annetaan parametrina kokonaislukutaulukko ja se palauttaa kokonaisluvun. Aliohjelma palauttaa pisimmän taulukosta löytyvän aidosti nousevan osajonon pituuden. Esimerkiksi jos taulukon alkiot ovat 2,3,4,1,2,0,1,2,5,5,7, niin palautetaan 4 (eli 0,1,2,5 muodostavat 4 lukua pitkän aidosti nousevan osajonon). Aloita tekemällä aliohjelman esittelyrivi ja tynkä. Testit kannattaa kirjoittaa ennen itse aliohjelman kirjoittamista (=TDD). Vinkkinä kannattaa katsoa Demo 8 Tauno-tehtävä sekä demonpalautusvideo sen käsittelystä.
Please
Tähän tehtävään voisi ottaa System.Collections.Generic käyttöön jotta voisi tehdä listoilla.
VL: miksi sotkea listat mukaan kun aineisto on taulukko? Muunnos maksaa…
Miksi tästä tulee vain 0.6 pistettä vaikka ajo ja testit onnistuu?
VL: eihän pääohjelman ajo onnistu :-) Mietippä paljonko pääohjelan taulukolla pitäisi palauttaa. Ja testithän ovat itse kirjoitettuja, joten se että ne onistuvat takaavat vasta sen, että noissa erikositapauksissa tulee sama tulos. Mutta voisi olla testejä j oista ei selviä.
Vinkki: Jos algoritmi ei ole kristallin kirkas, harjoittele Taunolla ja/tai kynällä ja paperilla.
Please
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Palataan hetkeksi kurssin alkupuolen laatikkotehtävään. Muuta ohjelmaa siten, että PiirraLaatikko-aliohjelmalle viedään Vector-olio kahden reaaliluvun sijaan. Tämä vektori toimii piirrettävän neliön vasemman alakulman koordinaattona. Aliohjelma piirtää neliön ja palauttaa sitten piirtämänsä neliön oikean yläkulman koordinaatin. Tämän jälkeen seuraavan Neliön piirtäminen on yksinkertaista, koska se voidaan aloittaa edellisen kutsun palauttamasta paikasta. Mieti, mitä tulee ???-merkittyihin kohtiin.
Kuva siitä, miltä toimiva ohjelma näyttää ruudulla: 
Jypelissä voi lisätä kaksi vektoria yhteen käyttämällä + merkkiä. Esimerkiksi
olio.Position = vector1 + new Vector(0,12);
Aliohjelma PiirraLaatikko ottaa laatikon vasemman alareunan koordinaatin ja palauttaa oikean yläreunan koordinaatin. Tästä kannattaa piirtää kuva paperille ja laskea auki, missä kohtaa neliön keskipiste on, kun vasen reuna on punaisen pallon päälle (parametrinä tuleva piste). Kuinka tästä tai alkuperäisestä koordinaatista lasketaan oikea yläkulma? Käytä neliön kokoa ilmaisevaa muuttujaa laskutoimituksissa.
Please
public override void Begin()
{
Level.Background.Color = Color.Black;
Vector piste = new Vector(0, 0);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
PhysicsObject pallo = new PhysicsObject(5, 5, Shape.Circle);
Add(pallo, 1);
pallo.Color = Color.Red;
Camera.ZoomToAllObjects(100);
}
///
/// Aliohjelma piirtää ruutuun yhden neliön, jonka
/// sivun pituus on 80 ja vasemman alakulman koordinaatti p.
///
/// Peli, johon neliö piirretään
/// Neliön vasemman alanurkan koordinaatti.
/// Neliön oikean ylänurkan koordinaatti
public static ??? PiirraLaatikko(???)
{
double s = LAATIKON_KOKO;
GameObject nelio = new GameObject(s, s, Shape.Rectangle);
nelio.Position = ???
peli.Add(nelio);
???
}
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Jatka edellistä tehtävää siten, että jos pääohjelmaa muutetaan seuraavasti:
public override void Begin()
{
Camera.ZoomToLevel();
Vector piste = new Vector(0, 0);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
piste -= new Vector(0,LAATIKON_KOKO);
piste = PiirraLaatikkoAlas(this,piste);
piste = PiirraLaatikkoAlas(this,piste);
}
niin ohjelma piirtää viisi neliötä, joista keskimmäinen on korkeimmalla. PiirraLaatikkoAlas saa parametrinaan uuden neliön vasemman ylänurkan koordinaatin ja palauttaa piirtämänsä neliön oikean alanurkan koordinaatin.

HUOM! LAATIKON_KOKO on määritelty luokan vakioksi ja sitä tulee käyttää tehtävässä.
Muokkaa vielä niin, että pääohjelmasta voidaan kutsua PiirraPortaat-aliohjelmaa, joka piirtää annetun määrän neliöitä ylöspäin ja sitten annetun määrän alaspäin. Sama kuva saataisiin siis kutsulla:
public override void Begin()
{
Level.BackgroundColor = Color.Black;
Vector piste = new Vector(0, 0);
PiirraPortaat(this, piste, 3, 2);
Camera.ZoomToAllObjects(100);
}
HUOM! Anna itsellesi vain 0.5 p jos et tehnyt PiirraPortaat aliohjelmaa!
Please
public override void Begin()
{
Level.Background.Color = Color.Black;
Vector piste = new Vector(0, 0);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
piste = PiirraLaatikko(this, piste);
piste -= new Vector(0,LAATIKON_KOKO);
piste = PiirraLaatikkoAlas(this,piste);
piste = PiirraLaatikkoAlas(this,piste);
PhysicsObject pallo = new PhysicsObject(5, 5, Shape.Circle);
Add(pallo, 1);
pallo.Color = Color.Red;
Camera.ZoomToAllObjects(100);
}
// TODO: Kopioi tähän edellisen tehtävän PiirraLaatikko
// TODO: Jatka tekemällä PiirraLaatikkoAlas
M: 23. Dynaamiset tietorakenteet. Pääohjelmassa on annettu lista sanoja. Tee testit ja aliohjelma, joka etsii listan pisimmän sanan. Pääohjelma tulostaa ensin listan kaikki sanat, pisimmän sanan ja poistaa sitten listasta KAIKKI tämän sanan esiintymät. Tee myös PoistaSanat (ei ole tarkoitus käyttää RemoveAll-metodia)
Please
Vinkki: Testaamista varten katso luentomonisteen mainitusta kohdasta miten listoja testataan.
Kuvan värien muuntelu: Lue ohje. Katso esimerkistä: Kuva.cs miten piirretään kuvia. Ota kuvaksi vaikka: vesa.png. Tutustu huolella aliohjelmiin Harmaasavy, HarmaasavyTaulukolla ja Punaiseksi. Tee näitä matkien aliohjelma PoistaPunainen, jolle viedään parametrina Image-kuva ja raja-arvo jota enemmän kuvassa pitää olla punaisen osuutta jotta vastaava piste muutetaan harmaasävyksi. Kutsu Begin-metodista aliohjelmaa niin, että muutetaan harmaasävyksi kaikki ne pisteet, joissa punaista väriä on enemmän kuin 150. Huom! Suoraan pelkkää punaisen määrää vertaamalla ei oikeasti kaikki punainen katoa, mutta se riittää tähän tehtävään. Saa keksiä myös paremman ehdon jos haluaa :-)
Huomaa että pohjatiedostossa on kolme esimerkkiä käsitellä kuvia:
Color ja uint -tapauksissa kummassakin itse väritieto otetaan eri tavalla. Color-olio osaa itse kertoa omista värikomponenteistaan (esim c.RedComponent) ja uint tapauksessa väritieto pitää pyytää Color-luokan staattiselta funktiolta (esim. Color.GetRed(c)). Vastaavasti kun tieto laitetaan takaisin taulukkoon, niin siitä on eri tapa Color-olioille ja uint-luvuille.
Eli kannattaa valita omiin vastauksiin joku noista tavoista ja pysyä huolellisesti koko ratkaisun ajan samassa tavassa.
Please
Täydennä Palapeli.cs-tiedostosta aliohjelmat: LuoKuvat ja LisaaPalatRuutuun toimiviksi niin, että saat toimivan palapeli-ohjelman. Kokeile lisätä Contenttiin jokin muukin kuva ja kokeile toimintaa sillä.
Ota kynää ja paperia ja mieti miten isomman kuvan palaset menevät listaan, jossa ne ovat peräkkäin. Kirjoita esim. 3x4 tapauksessa kaikkien palasten “indeksit”. Piirrä paperille myös kunkin kuvanpalan keskipisteen koordinaatti ja sen arvo alkupaikan suhteen palan leveyden ja korkeuden avulla lausuttuna.
Please
Please
Konvoluutio: Sisätulo on kahden matriisin vastinalkioiden tulon summa. Liu’uttamalla painomatriisia kuvan päällä ja laskemalla aina vastaavasta kohdasta sisätulo ja laittamalla se jaettuna painomatriisin summalla, voidaan kuvalle tehdä useita yleisesti tarpeen olevia muunnoksia kuten reunaviivojen korostusta, terävöintiä tai pehmennystä.
Kokeilua varten jompikumpi alla olevista:
lataa levylle konvo.jar
käynnistä konvo.jar klikkaamlla tai sen hakemistosta komentoriviltä kirjoittamalla
java -jar konvo.jarKokeiluversioissa voit kokeilla miten mikäkin matriisi vaikuttaa. Samalla voit kokeilla mitä vaikuttaa kuvien summaaminen tietyillä painoilla. Mallipohjassa Kuva.cs on vastaava ohjelma jossa on valmiina keskiarvosuodin 3x3 matriisilla. Sinun pitäisi täydentää keskeneräinen Muunna-aliohjelma valmiiksi.
Please
M: Satunnaisluvut. Etsi algoritmi kokonaislukutaulukon sekoittamiseksi ja toteuta algoritmi. Eli tee aliohjelma, joka ottaa vastaan int-taulukon ja sekoittaa TÄMÄN taulukon. Testaa algoritmiasi Console-sovellukset taulukolla, johon on esimerkiksi alustettu järjestyksessä luvut 1, 2, 3, …, 52. Palauta toimiva ohjelmakooditiedosto, jossa on hyvin kommentoituna, mitä algoritmissa tehdään. Huom: Tässä ei ole tarkoitus “keksiä” omaa algoritmia, vaan käyttää ideaa jostakin valmiista algoritmista sekoittamiseen. Hyvä algoritmi on esim: Fisher-Yates shuffle. Tästä on toteutus Jypelin RandomGen -luokan Shuffle-aliohjelmassa. Voit matkia esimerkiksi tätä. Jos matkit tätä, niin vaihda T:n tilalle int ja listan tilalle int-taulukko. Aliohjelman alkuun pitää lisätä nyt Random rand = new Random(); jotta rand-olio on olemassa, Jypelin esimerkissä se on olemassa koska se on RandomGen-luokan attribuutti.
Please
Kirjoita ohjelma tähän.
Tee ohjelma, joka saa jostakin taulukon (tai käyttää vakiotaulukkoa), jossa on kokonaislukuja. Taulukossa sama luku voi esiintyä useasti. Kirjoita aliohjelma, joka saa tuon taulukon parametrinaan ja palauttaa taulukon, jossa on taulukon alkiot kukin vain yhden kerran järjestettynä niiden esiintymiskertojen määrän mukaan nousevaan järjestykseen. Taulukosta {1, 2, 3, 34, 34, 2, 1, 34, 1, 1, 1} palautetaan {3, 2, 34, 1}.
Please
Kirjoita ohjelma tähän.
Esimerkki Haskell-kielellä tehtynä.
Tee ohjelma, jossa a) arvot kokonaislukuja listaan ja b) etsit halutun luvun esiintymien lukumäärän listassa. Aloita tekemällä aliohjelma, joka ottaa vastaan listan ja lisää siihen halutun määrän satunnaisia kokonaislukuja. Tämän jälkeen tee toinen aliohjelma, jonne viet parametreina käytettävän listan ja etsittävän alkion. Aliohjelma etsii (ja laskee), kuinka monta kertaa etsittävä alkio esiintyy listassa. Aliohjelma palauttaa löydettyjen alkioiden lukumäärän.
Vinkki: M:Dynaamiset tietorakenteet
Please
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.