Sinun UserID: 0

Palautus viimeistään: ma 6.11 klo 11:00
Katso luennot-sivulta luennot 17 ja 18.

Ilmoittaudu missä ryhmässä (live/zoom/video) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)

  • Please to interact with this component.

    Ma 14-16
  • Please to interact with this component.

    Ma 16-18 (iltaryhmä lopetettu)
  • Please to interact with this component.

    Ma 14-16 Zoomista
  • Please to interact with this component.

    Ma 16-18 Zoomista (iltaryhmä lopetettu)
  • Please to interact with this component.

    Katson demonpalautuksen videolta

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 9

Ohjeet ja palautusten video

Oppimistavoitteet

Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.

# Oppimistavoitteet

Ajankäyttösi tällä viikolla (0.25p) 

Edellisten demojen vastausten korjaaminen E1 (pakollinen)

Video 1 (1 p) 

TDD-pohja

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.

# villev1
# tauno1

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.

Tehtävänanto hieman harhaanjohtava. Suurin osa ajasta meni selvittää "Suljetulla välillä" olevian lukujen merkityksen.

VL: Nopeastippa muun osan teit :-) Kirjoitin Googleen "suljettu väli" ja klikkasin Wikipedian (yleensä varmin) linkkiä. Meni vajaa 10 sek. Joku voisi aloittaa kurssin keskusteluun aiheen: "Minkä verran yläkoulun terminologiaa kurssilla saa olettaa". Lukiomatematiikastahan kurssilla ei tarvita mitään.

05 Nov 23 (edited 05 Nov 23)

Virheilmoitusten tulkitseminen

# tauno

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.

# pohja

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

# v1
# pisinOsajono

Miksi saan tästä vai 0,6/1 vaikka koodi toimii, sen pystyy ajamaan eikä testatessa tule virheitä? Dokumentit katsottu ja koko koodi avattu.

JK: Koodi ei toimi vielä oikein. Esim pääohjelmassa olevalla mallitaulukolla funktio palauttaa 6 vaikka sen pitäisi palauttaa 4. Samoin testeissä kannattaa miettiä mitä funktion kuuluu palauttaa silloin jos taulukossa on vain yksi alkio tai kaikki alkiot ovat samoja.

06 Nov 23 (edited 06 Nov 23)

Oljenkorsi 1: harjoittele

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 koordinaattina. 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: Mallikuva

# v2

Aloita tehtävä piirtämällä ruutupaperille haluttu kuva. Laske kuvaan (x,y) koordinaatit ainakin kunkin neliön vasempaan alanurkkaan ja oikeaan ylänurkkaan sekä kunkin neliön keskelle. Käytä laskuissa neliön sivunpituutena lukua 80, mutta aliohjelmassa tämä on s.

Oljenkorsi 1

Oljenkorsi 2

# portaatylos

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.

Mallikuva
Mallikuva

HUOM! LAATIKON_KOKO on määritelty luokan vakioksi ja sitä tulee käyttää tehtävässä.

Ennen koodaamista jatka edellisen tehtävän paperille piirtämääsi kuvaa ja merkitse siihen nyt alas menevien portaiden osalta vasempien ylänurkkien ja oikeiden alanurkkien koordinaatit.

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);
        }
# v3

HUOM! Anna itsellesi vain 0.5 p jos et tehnyt PiirraPortaat aliohjelmaa!

# portaatylosjaalas

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.

# v4
# poistapisin

Yleisiä virheitä, katso onko sinulla

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 :-)

Huomatus väritiedon ottamisesta

# v5
# poistaPunainen

nämä linkit eivät toimi tehtävässä sivulla lukee 404. ainoastaan wikipedia linkki aukeaa

VL: no eipä noita tässä tarvitakkaan, tuo tehtävässä oleva Jypeli-Ohje-linkki riittää.

04 Nov 23 (edited 04 Nov 23)

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

Oljenkorsi 1

# v67
# LuoKuvat
# LisaaPalatRuutuun

Tehtävä 8*. Viitteiden piirtäminen

Ohjeita piirtämiseen demossa 8.

# listaelaimista

Mikäli haluat (ei ole pakko) kikkailla sijaintien kanssa, voit käyttää komentoja tyyliin:

gn $3 tsx: -20
gn $2 tsx: 70
# viitteetkuvad9t8a

Eikö tämä virheilmoitus ole virheellinen? "Määrälaskurilla $1.count eri arvo 2 != 2;" #- Mitä minä en nyt tajua?

VL: tämä ei ole c# missä lauseet päättyvät puolipisteeseen. Siksi merkkijono ”2” on eri kuin merkkijono ”2;”

Kiitos!

31 Oct 23 (edited 01 Nov 23)

Tehtävänanto olisi ollut selkeämpi, jos sen olisi jakanut kahteen osaan, eli yksi muutettava koodi per tehtävä. Nyt jäi epäselväksi, mitä rivejä kakkoskohdassa toteutetaan.

VL: Siellä luki näköjään 2x, että muuta ensimmäinen kuva. Mutta en muuten ihan saa kiinni miksi olisi epäselvää mitä toiseen kuvaan tulee. Kunakin ajanhetkenä ohjelman muuttujilla on tietty tila (josta kuva piirretään). Kakkoskohtaan piirretään kuva sellaisena kun ohjelman tila on kommentin //Kuva 2 kohdalla. Eli pitää piirtää kuva tuosta ajanhetkestä. Mitä rivejä piirtokieltä siihen tarvitaankin, jää piirtäjän huoleksi. Jokaisen ohjelmarivin jälkeen ohjelman tila voi olla muuttunut, eli joka rivistä voitaisiin piirtää uusi kuva. Teidän pitää ajatella tätä enemmän niin, että kuva piirrettäisiin kynällä ja paperilla (kuten ennen vanhaan :-) ja sitten siitä tehdään kopio tähän. Animaatiotehtävässä yritetään kuva tehdä eläväksi niin, että ne kaikki kuvat voidaan selata noilla nuolilla.

03 Nov 23 (edited 03 Nov 23)
# viitteetkuvad9t8b
# viitteetkuvad9t8c
# konvo

B1-3. Konvoluutio

Sisätulo on kahden matriisin vastinalkioiden tulon summa.

# sisa1

Konvoluutio lasketaan seuraavasti:

  • Liu'uta painomatriisia kuvan päällä kunkin sen "pikselin" kohdalle. Eli ohjelmassa suorita seuraavat laskut jokaisen indeksin (iy, ix) kohdalla:
    • laske vastaavasta kohdasta kuvan (=pikselimatriisin) ja maskin sisätulo
    • jaa sisätulo painomatriisin kertoimien summalla
    • laita saatu luku (välillä 0-255) uuden kuvan vastaavaksi pikseliksi (vrt. Game of life)
  • reunapikselit ovat aina ongelma ja niiden käsittelylle ei ole yksikäsitteistä sääntöä. Voit itse päättää mikä olisi järkevä ksäittely reunoille (yksi välttävä vaihtoehto on kuvitella reunnan vieressä olevan nollia, toinen on että reunaan viereen kuvitellaan lähimmän pikselin arvo jne, tai jopa jätää reunat käsittelemättä, jolloin uuden kuvan reunoille tulee mustaa).
  • värikuvassa (RGB) lasku suoritetaan kullekin väriarvolle (punainen, vihreä, sininen) erikseen.

Konvoluution avulla voidaan kuvalle tehdä maskimatriisista riippuen erilaisia tarpeellisia muunnoksia. Esimerkiksi reunaviivojen korostusta, terävöintiä tai pehmennystä.

Voit kokeille konvoluutiota Java-kurssilla aikanaan tehdyllä ohjelmalla:

  • vaatii että koneessa on Java asennettuna ja käynnistyy komentoriviltä

  • lataa levylle konvo.jar

  • käynnistä konvo.jar klikkaamalla (ei toimi aina kaikissa järjestelmissä oletuksena) tai sen hakemistosta komentoriviltä kirjoittamalla

      java -jar konvo.jar

Ohjelmalla voit kokeilla miten mikäkin matriisi vaikuttaa. Halutessasi voit kokeilla myös mitä vaikuttaa kuvien summaaminen (tai vähentäminen) tietyillä painoilla.

Demotehtävän mallipohjassa Kuva.cs on vastaava ohjelma, jossa on valmiina keskiarvosuodin (eli sumennus) 3x3 matriisilla.

Täydennä keskeneräinen Muunna-aliohjelma valmiiksi. Koita säilyttää alkuperäinen alpha-arvo kussakin pikselissä.

Tehtävässä pyydetään säilyttämään alpha-arvo ennallaan, mutta testeissä sen tulee olla reunoilla 0? (Lähinnä testi kuva2[2,1] === 0U;)

VL: Totta että testi riippuukin reunoille valitusta toteutustekniikasta. Mallissa reunat on laitettu kokonaan 0-arvoisiksi. Muutan testejä niin, ettei tuolla ole väliä koska reunan toteutus oli jätetty tekijän valittavaksi.

01 Nov 23 (edited 02 Nov 23)
# vB13
# konvoluutio

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.

# random

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.

Huom, videossa sanotaan väärin kohdassa 1:22:12: "Aina kun mä arvaan yhden kirjaimen" pitäisi olla "kun joku sana (rivi) tulostetaan" ja kirjaimen kohdalla pitäisi sanoa seuraavassa lauseessa "rivi".

# sanat
# Hirsiapu

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.

# harj1

Mikäli teit toisenkin lisäyksen harjoitustyöhön, laita muutos seuraavaan laatikkoon.

# harj2

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

# guru

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

# pp1

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.

# pp23
# eipeli

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:

Loppupiste: (120.0,120.0)
Laatikoiden vasemmat alakulmat ja oikeat yläkulmat:
(0, 0), (40, 40)
(40, 40), (80, 80)
(80, 80), (120, 120)
# portaatKonsolilla

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:

Loppupiste: (200.0,0.0)
Laatikoiden vasemmat alakulmat ja oikeat yläkulmat:
(0, 0), (40, 40)
(40, 40), (80, 80)
(80, 80), (120, 120)
(120, 40), (160, 80)
(160, 0), (200, 40)
# portaatYlosAlasKonsolilla

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.

# varienVaihtoKonsolilla

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

# oma1
# oma2

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