Sinun UserID: 0
```
Ilmoittaudu missä ryhmässä (zoom) 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ä.
Please
Viikko |
35 25.8. |
36 1.9. |
37 8.9. |
38 15.9. |
39 22.9. |
40 29.9. |
41 6.10. |
42 13.10. |
43 20.10. |
44 27.10. |
45 3.11. |
46 10.11. |
47 17.11. |
48 24.11. |
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 | ||
Tärkeät |
ti: bonus pe: HT1 |
Väli- kysely |
pe: Debug- näyte |
ti: bonus pe: HT2 |
ti: bonus pe: HT3 |
Tentti pe: 2.12 |
||||||||
dh | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | % | |
Demot |
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
Ohjelmointi 1, s 2022 / Demo 9
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 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.
- 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.
Palautus
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ä.
Ajankäyttösi tällä viikolla (0.25p)
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 (=zoom) 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. Tästä annettava 0.25 näkyy Pisteet-sivun demokerran summassa. Kirjoita pelkkä luku esim tyyliin 13.5
Ajankäyttösi tällä viikolla: Plugin numericfield error: Task id refers to another document, but you do not have access to that document.
Edellisten demojen vastausten korjaaminen E1 (pakollinen)
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ä.
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
- millainen vastauksesi oli verrattuna malliin/demojen palautuksessa käsiteltyyn tehtävään
- olisiko vastauksessasi pitänyt olla jotakin enemmän/vähemmän
- jos et ollut tehtävää tehnyt, niin miksi?
- jos et ollut tehtävää tehnyt, niin mitä ymmärsit vastaavasta mallivastauksesta tai demojen palautuksessa käsitellystä vastauksesta
- osaisitko mallin nähtyäsi tehdä vastaavan tehtävän? Miten?
Lisää tarvittavat otsikkorivit lopuille tehtäville samaan tyyliin kuin alla on tehty.
Video 1
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 22 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.
TDD-pohja
Tässä voit testata ohjelmiasi jos ComTest ei toimi koneellasi
TÄRKEÄÄ: Tentistä
Demo 11 on mallitentti, harjoittele sen tehtäviä milloin ehdit, niin näet mitä vielä pitäisi tsempata. Tenttiin ilmoittaudutaan ruksilla aikaan TIMIssä, kunhan saan sivun valmiiksi. Ilmoitan siitä sitten tarkemmin.
Tauno ja Tehtävä 1 ovat tyypillisiä tenttitehtäviä, joten ne kannattaa vääntää vaikkeivät ole tähtitehtäviksi merkittykään.
Ville 1
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.
Tauno (1p)
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
Muistakaa että kirjoitatte
if (
eikä
if(
Sama for
, while
jne.
TDD1
Tehtävät, joissa on Test-painike, tulee testata Comtestillä, jotta saa täydet pisteet.
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.
Pohjatiedostot varsinaisille tehtäville
- Tarvitaan tehtävissä 5,6-7,B1-3
Katso pohjatiedostojen ottamisesta Demo7 sivulta
Lue tarvittaessa (eli jos et ole vielä koskaan contenttia lisännyt) ohjeita kuvien ja äänien lisäämisestä: Sisällön tuominen peliin.
Macilla ja Linuxilla saattaa tulla (Tuleeko enää?) 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.
Tehtävä 1. Taulukon nousevat
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 funktio PisinNouseva
, jolle annetaan parametrina kokonaislukutaulukko ja se palauttaa kokonaisluvun. Funktio palauttaa pisimmän taulukosta löytyvän aidosti nousevan peräkkäisten termien osajonon pituuden. Aidosti nousevuus tarkoittaa tässä sitä, että seuraava alkion on aidosti suurempi kuin edellinen. 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ä.
Vinkki: Jos algoritmi ei ole kristallin kirkas, harjoittele Taunolla ja/tai kynällä ja paperilla.
Tehtävä 2*. Portaat ylös
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.
Tehtävä 3. Portaat ylös ja alas
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!
Tehtävä 4*. Pisimmän sanan poistaminen
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)
Vinkki PoistaSanat-aliohjelman testaamiseen: katso luentomonisteen mainitusta kohdasta miten listoja testataan.
Miksi testit ei toimi
VL: Liian vähän = -merkkejä
—miksi PoistaSanat tehtävässä lista käydessä läpi alusta loppuun, ajaminen jättää yhden kissan jäljelle, mutta käydessä lista läpi lopuista alkuun kaikki kissat poistetaan?
VL: piirräs kuva kynällä ja paperilla ja mieti :-)
—Tehtävä 5. Värien vaihtaminen
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:
- suoraan pikselin muuttaminen imagessa
- imagen tietojen kopionti Color-olio -taulukoksi
- imagen tietojen kopioin uint-taulukoksi (nopein)
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.
Ilmenee virhe ajettaessa: "poistaPunainen.cs(52,13): error CS0103: The name 'IsMouseVisible' does not exist in the current context" visual Studion puolella homma toimii kuten pitääkin, joskin gitissä olevassa koodista puuttuu myös pari riviä, joita tässä tarkistimen koodissa taas esiintyy. (50, 52)
Liittynee Microsoft Xna -Frameworkkiin?
VL: Vaihdoin Mouse.IsCursorVisible = true;
—Tehtävä 6-7. Palapeli
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.
Tehtävä 8*. Viitteiden piirtäminen
Ohjeita piirtämiseen demossa 8.
Tuo String.Join(" ", elaimet) tuolla WriteLinen sisällä ei siis vissiin luo uutta merkkijonoa? Tai ainakaan sitä ei ole tarkoitus piirtää..?
VL: kyllä se loisi uuden jonon, mutta kuva piti piirtää tilanteesta ennen tätä riviä. Mutta hyvä huomio. Jos niin tarkaksi mentäisiin, niin myös Miuku, Pluto ja Mauku olisivat kuvassa 2x
—Mikäli haluat (ei ole pakko) kikkailla sijaintien kanssa, voit käyttää komentoja tyyliin:
gn $3 tsx: -20
gn $2 tsx: 70
B1-3. Konvoluutio
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:
- Työaseman Jar-versio:
lataa levylle konvo.jar
käynnistä
konvo.jar
klikkaamalla tai sen hakemistosta komentoriviltä kirjoittamallajava -jar konvo.jar
Kokeiluversioissa 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.
Täydennä keskeneräinen Muunna-aliohjelma valmiiksi. Koita säilyttää alkuperäinen alpha-arvo kussakin pikselissä.
Sama ongelma kuin tehtävän viisi vieressä:
konvoluutio.cs(52,13): error CS0103: The name 'IsMouseVisible' does not exist in the current context
VL: Vaihdoin Mouse.IsCursorVisible = true;
—Toimiiko jypelin Color.GetRed ja muiden värien toiminnot ihan normaalisti näyttäisi valmiissa koodissa palauttavan kuvasta vihreän värin arvon ja GetBlue näyttäisi palauttavan aina arvon 255?
VL: GetData-metodissa on bugi, korjautuu huomenna
—B4. Taulukon sotkeminen
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.
B5-6. Hirsiapuun jakaumalaskuri
Lisää luennolla tehtyyn Hirsiauta.cs ominaisuus että se laskee mitkä ovat yleisimpiä kirjaimia jäljellä olevasta sanajoukosta ja tulostaa ne käyttäjälle avuksi. Pääohjelmaan on jo lisätty sopiva olio, sinun pitää vain toteuttaa vastaava luokka.
H1. Harjoitustyöhön joku viikon luentoihin liittyvä ominaisuus
Tehtävä H1 on vaihtoehto varsinaisille tehtäville, josta voi merkitä itselleen 1-2 p sen mukaan miten sen "vaikeus" suhteutuu muihin tehtäviin.
Lisää harjoitustyöhösi (se voi olla aluksi hyvinkin tyhjä "lumiukkopohja" jokin kurssiviikon aiheeseen liittyvä ominaisuus. Kommentoi koodiin selvästi missä "viikon" ominaisuutta on käytetty. Tällä viikolla esimerkiksi silmukat, taulukot ja 2-ulotteiset taulukot.
Jos harjoitustyöhön ei ominaisuutta saa lisättyä, voit tehdä myös pienen muun ohjelman, jossa harjoittelet ko. ominaisuuksia mikäli varsinaisista tehtävistä ei mieleistä vastaavaa harjoittelua löydy.
Mikäli teit toisenkin lisäyksen harjoitustyöhön, laita muutos seuraavaan laatikkoon.
G1-2. Lukujen esiintymät
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}
.
Esimerkki Haskell-kielellä tehtynä.
Pahasti pihalla
PP1
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
PP2-3
Lue vielä kerran monisteen luku 9. Aliohjelman paluuarvo. Katso siellä oleva video keskiarvon laskemisesta. Tee kaikki siellä olevat tehtävät ja katso videot mallivastauksista ja mieti mitä et osannut, korjaa ja mieti joko osaat. Kirjoita alle vaikeutesi ja oppimisesi.
Korvaavia tehtäviä jotka ovat ei-pelejä
Tehtävät 2, 3, 5 ja 6-7 vaativat Jypelin käyttöä. Tähän kerätään vaihtoehtoisia tehtäviä, joissa on sama oppimistavoite, mutta voidaan tehdä tekstuaalisena konsolisovelluksena. Tehtävät ovat ensisijaisesti tarkoitettu niille, jotka eivät halua tai eivät voi käyttää Jypeliä.
Tällä kertaa EI SAA tehdä molempia, eli pitää tehdä joko perustehtäviä 2, 3, 5, 6-7 tai näitä E2, E3 ja E5 tehtäviä.
Tehtävien pisteiden laskentaa etenemissivulle ei ole vielä tarkistettu.
Tehtävä E2*
Tämä tehtävä vastaa perustehtävää 2, mutta sen sijaan, että laatikot piirtyvät ruudulle, joutuu käyttämään mielikuvitustaan niiden hahmottamiseen. Tavoitteena on siis luoda aliohjelman PiirraLaatikko
avulla neliön muotoisista laatikoista ylöspäin nousevat portaat siten, että alemman laatikon oikea yläkulma koskettaa (ts. on samassa pisteessä) kuin ylemmän laatikon vasen alakulma. Käytä laatikon koon määrittämiseen vaalmiina annettua vakiota LAATIKON_KOKO
.
Oikea tuloste näyttää siis seuraavalta:
(0, 0), (40, 40)
(40, 40), (80, 80)
(80, 80), (120, 120)
Tehtävä E3
Tämä tehtävä vastaa perustehtävää 3. Tällä kertaa tavoitteena on luoda portaat siten, että kolme ensimmäistä askelta/laatikkoa nousevat ja kaksi seuraavaa laskevat. Käytä hyödyksi edellisessä tehtävässä toteuttamaasi aliohjelmaa PiirraLaatikko
. Sen lisäksi on toteutettava aliohjelma PiirraLaatikkoAlas
, joka tekee edelliseen laatikkoon nähden laskeutuvan askelman. PiirraLaatikkoAlas saa saa siis parametrinaan uuden neliön vasemman ylänurkan koordinaatin ja palauttaa piirtämänsä neliön oikean alanurkan koordinaatin.
Täysiin pisteisiin päästäkseen tulee toteuttaa vielä PiirraPortaat
, joka annetusta pisteestä lähtien tekee n määrän askelia ylös ja sen jälkeen m määrän laskeutuvia askeleita. Sama tulostus tulisi saada siis kutsumalla PiirraPortaat(new Vector(0, 0), 3, 2);
. Jätä tuloksen tulostus pääohjelman vastuulle. Jos et toteuta viimeksi mainittua aliohjelmaa, merkitse pisteiksesi 0.5.
Ohjelman oikea tuloste:
(0, 0), (40, 40)
(40, 40), (80, 80)
(80, 80), (120, 120)
(120, 40), (160, 80)
(160, 0), (200, 40)
Tehtävä E5
Tämä tehtävä korvaa perustehtävän 5.
Idea on täsmälleen sama kuin tehtävässä 5, mutta kuvan sijaan käsitellään kokonaislukutaulukkoa, joka voitaisiin muuttaa kuvaksi. Taulukkoon on siis tallennettu kuvan yksittäiset pikselit etumerkittöminä kokonaislukuina. Tavoitteena on toteuttaa aliohjelma SininenHarmaaksi
, joka muuttaa harmaasävyiseksi ne pikselit, jotka sisältävät raja-arvoa enemmän sinistä väriä. Esim. 0xff5f9faf
eli rgba(95, 159, 175, 255)
pikselin sinisen määrä on 175
, mikä ylittää raja-arvon, joten se on muunnettava harmaasävyiseksi. Harmaasävyisessä pikselissä jokaisen värin määrä on sama (esim. rgba(125, 125, 125, 255)
).
Tehtävässä 5 annettua esimerkkiä Kuva.cs voi soveltaa tässäkin tehtävässä. Paina 'Näytä koko koodi' nähdäksesi, mitä aliohjelmia on valmiiksi käytössäsi.
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 tehdä 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ä).
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.