Sinun UserID: 0

Palautus viimeistään: ma 30.10 klo 11:00
Katso luennot-sivulta luennot 15 ja 16.

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 8

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

Kokeeseen ilmottautuminen

HUOM! Syksyn 2023 ohjeita ei vielä päivitetty! Ilmoittautuminen tulee kuitenkin olemaan TIMissä.

Kysely 1 / Vaikeaa

Mikäli vastaisit jo demossa 6 tai 7 tehtävään Kysely 1, saat tästä pisteitä jos osallistut keskusteluun välikyselyn vastauksista on kerättyn synteesiin tuonne palaute-sivulle. Tarkoitus on että siellä jokainen voi osallistua lisää keskusteltuun ja jos löydettäisiin kipukohtiin jotakin yhteisiä lääkkeitä. Tässä tapauksessa kirjoita alle mitä laitoit keskusteluun.

Mikäli et vielä ole vastannut, vastaa kurssin välikyselyyn. Kopioi kyselystä kohta Analysoi omia vaikeuksiasi tai tarkenna edellisiä alla olevaan laatikkoon. Muista painaa return aina kun rivi tulee täyteen ettei tule yli 65 merkkiä pitkiä rivejä !

# kysely

Ville 1

Tee Ville-tehtävät: 6.5, 9.7 + kaksi sellaista joita et ole aiemmin ymmärtänyt kunnolla (jos kaikki ymmärretty, ei tätä ylim kahta tarvitse tehdä). Mitä 9.7:ssa on väärin C#:ia ajatellen? Muista: Villen käyttöohje.

Villessä tuli viesti 'Session expired' enkä päässyt kirjautumaan enää uudelleen.

VL: Kokeiles jos tyhjennät selaimen välimuistit.

26 Oct 23 (edited 26 Oct 23)

Toimii

26 Oct 23
# villev1

Jeliot 1

Mikäli et tehnyt tätä demossa 7 (jos teit, ei saa uudestaan ottaa näitä pisteitä!) saat vielä tehdä tämän. Vajaasta 30:stä tässä (syksy 2021) demossa 7 kokeilleelta on tullut palautetta että oli hyötyä!

Ota itsellesi Jeliot.jar, eli ota tuo ja käynnistä Jeliot.jar ohjeen mukaan,

Kun Jeliot on käynnissä Copy/Paste koodialueelle Kutsuminen.java (vertaa Kutsuminen.cs, jollet ole nähyny kutsunäytelmää, niin katso se samalla kun teet tätä). Nyt sinun on tarkoitus Jeliotilla katsella sama asia parametrin välityksestä, mikä oli kutsunäytelmässä. Kun koodi on koodialueella, paina Compile ja sen jälkeen lähde ajamaan ohjelmaa askel kerrallaan ja mieti ajtuksen kanssa mitä missäkin kohti tapahtuu. Vaikka esimerkkikoodi on Javaa, kaikki tapahtuu täsmälleen samalla tavalla C#:issa. Kerro mitä opit tästä ja/tai kutsunäytelmästä.

# jelliot

TDD1

Listojen luominen testejä varten onnistuu esim. luomalla ensin taulukko ja sen avulla muodostamalla lista:

///   Vector[] t = { new Vector(1,2),new Vector(3,4),
///                  new Vector(5,2),new Vector(5,5) };
///   List<Vector> luvut = new List<Vector>(t);

tai

///   List<Vector> luvut = new List<Vector>{ 
///                  new Vector(1,2),new Vector(3,4),
///                  new Vector(5,2),new Vector(5,5) };

Pohjatiedostot varsinaisille tehtäville

Pohjatiedostoja ei välttämättä tarvia muuta kuin G-tehtävissä. Ja T3 ja 4 jos haluaa tehdä oikealla AngryLegolla, mutta TIMin pohjilla voi samaa harjoitella rupuisemmalla ulkonäöllä.

Katso pohjatiedostojen ottamisesta Demo7 sivulta

Tauno 1

Katso ensin demojen 8 palautusvideo ja mallivastaus Demo 7:n Tauno-tehtävän käsittelystä. Tee Taunolla tehtävä, joka laskee pisimmän rajan ylittävien arvojen yhtenäisen osajonon pituuden taulukosta. Esimerkiksi taulukossa

7 9 8 3 10 12 11 14 5 8

on kolme yhtenäistä ehdon täyttävää osajonoa (osajono on siis tässä peräkkäisissä paikoissa olevien alkioiden jono)

7 9 8 
10 12 11 14 
8

joiden kaikkien arvot ylittävät raja-arvon 6. Näistä pisin on 4 pitkä. Oikeasti osajonoja ei tarvitse muodostaa, koska lasketaan vaan niiden pituuksia. Ja niistäkin riittää ylläpitää aina nykyisen ja tähän astisen parhaan pituutta.

Huom! "Simuloi" if lauseita tekemällä itsellesi joku apumuuttuja jota käytät "Taunon-laskukoneella" tyyliin

ifRajanYli = raja - t[i]

ja muuta sitten koodissa nämä oikeiksi if-lauseksi tyyliin

if ( raja < t[i] ) ... 

Eli tuo valmis ifRajanYli ei ole tarkoitettu laskuriksi, vaan muuttujaksi, jonka perusteella arvioidaan onko tutkittava luku rajan ylittävä. Koska Taunossa ei ole if-lauseita, näin saadaan "paikka" niihin kohti, missä vertailua pitää suorittaa. Itse tarvittavia laskureita varten tee uusia muuttujia.

Pitäisikö olla demojen 7 palautusvideo?

VL: entä nyt

25 Oct 23 (edited 31 Oct 23)

Mikäli haluat tehdä suoraan silmukan, niin tee ensin b-kohdan vastaus ja kopioi se tämän ohjelmakohtaan.

# v7

Huom. ennen kuin ajat ohjelman, kopioi koodi Taunosta ja poista tämän jälkeen rivi int raja = 50; ja lisää loppuun tarvittava return -rivi.

Oljenkorsi 1

# tauno1a
# tauno1b
# valintakoe

Tehtävä 1*. Karkausvuosi

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella. Täällä kerrotaan mm. jakojäännöksestä (%).

M: 13. Ehtolauseet. Tee funktio Karkausvuosi(int vuosi), joka palauttaa 'true' jos vuosi on karkausvuosi. Seuraavassa sana vuosisata tarkoittaa katkaistua kokonaislukua joka tulee kun vuosi jaetaan sadalla. Karkausvuosia ovat neljällä jaolliset vuodet, mutta ei täydet vuosisadat paitsi neljällä jaolliset vuosisadat (esim. 1900 ei ollut karkausvuosi, vaikka se on neljällä jaollinen, sillä 1900 on 19 sadalla jaettuna ja 19 ei ole jaollinen neljällä, mutta 20 on ja siksi 2000 on karkausvuosi).

Mieti kunnon testiohjelma / ComTest-testit.

# karkausvuosi
# vuodenajat

Tehtävä 2*. Vuodenajat (max 2p)

Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.

M: 13. Ehtolauseet, 13.8 switch-rakenne, 16. Toistorakenteet, 15. Taulukot. Kirjoita 3 erilaista funktiota Vuodenaika(int kk), joka palauttaa merkkijonona sen vuodenajan, joka parametrina vietynä kuukautena on. Yksi käyttää if-lausetta, toinen switch-lausetta ja kolmas taulukkoa.

# v2
# vuodenajatif
# vuodenajatSwitch

Luentomonisteessa sanotaan "Jokaisessa case-kohdassa sekä default-kohdassa on lauseiden jälkeen oltava lause, jolla hypätään pois switch-lohkosta." Mutta jos laitan esimerkin mukaan break-lauseen, niin Rider sanoo että code unreachable, ja koodi toimii hyvin ilman niitä? Eli pitääkö olla vai ei :)

VL: Pitää, mutta jos esim return on tuollainen lause. Rakenne:

 case 1: 
    return X;
    break;

tuottaa varmasti tuon varoituksen, koska tuohon break ei koskaan päästä koska jo lähdettiin pois.

24 Oct 23 (edited 24 Oct 23)

Seuraavaan katso idea: M: Arvosana kirjalliseksi, eli tavoite on että rajatarkistusten jälkeen itse ongelma ratkeaa ilman silmukoita ja ehtoja yhdellä lausekkeella.

# vuodenajatTaulukko

Tehtävä 3. Refaktorointi

Taas pitkä tehtävä, johon lyhyt vastaus (katso tehtävän luona oleva video). Tarkoitus on opetella muuttamaan toistuvaa koodia paremmaksi.

Tehtävän selitystä

Kirjoita myös LuoPallo2 -metodi yhdellä rivillä käyttäen mallina tuota LuoPallo-metodia. Tarkista että ohjelma edelleen toimii samalla tavalla. Eli yläorrella on kaksi Igoria ja yksi Symbian kännykkä ja kun Symbian häviää, se "liekittyy" Symbianin kuvilla. Lisäksi Symbian-kännykkä ei ole neliö orrella ollessaan, vaan laihempi (suorakulmio kuten alunperinkin).

# Refaktorointi

Tehtävä 4. Refaktorointi

Kuten edellisessä tehtävässä, myös rakenteiden luonnissa on toistoa (tässä ei tarvitse mitään delegaatteja tms "hankalaa"):

private PhysicsObject LuoSeina()
{
    SarkyvaRakenne seina = new SarkyvaRakenne(tileWidth, tileHeight);
    seina.Tag = "rakenne";
    seina.Kuvat = tiilenKuvat;
    return seina;
}


private PhysicsObject LuoKatto()
{
    SarkyvaRakenne katto = new SarkyvaRakenne(tileWidth * 1.5, tileHeight);
    katto.Tag = "rakenne";
    katto.Kuvat = katonKuvat;
    return katto;
}

Tee metodi LuoSarkyvaRakenne sopivilla parametreilla niin, että saat vaihdettua sekä LuoSeina että LuoKatto -metodit yhden rivin metodeiksi.

# v4
# Refaktorointi2

Tehtävä 5. Taulukko listaksi (helppo)

M: 23.2 Listat Vaihda taulukko listaksi. Tästä oli esimerkki luennon 15 lopussa. Ihan aluksi kokeile että Kuvaaja.cs toimii sellaisenaan. Jos otat mallivastuksen Kuvaaja.cs (alapuolella) etkä omaasi, niin joko

  1. Kommentoi pois KoordinaattiAnnettu-metodin sisäosa

tai

  1. tai ks. tehtävä 6 miten projektiin otetaan mukaan myös Taulukot.cs.

Sitten Kuvaaja.cs:ssä vaihda

private Vector[] pisteet;

tilalle

private List<Vector> pisteet;

ja tee kaikki muut tarvittavat muutokset, jotta ohjelma toimii täsmälleen kuten aikaisemminkin.

Kuvaaja.cs

Oljenkorsi 1

TIM antaa tästä pisteitä vaikka vastaus olisi väärin. Tarkista vastauksesi toimivuus Riderissa tms.

# taulukkoListaksi

Tehtävä 6. Kuukausien keskilämmöt

M: 23.2 Listat Ota aluksi Rideriin pohjaksi tehtävän 5 vastaus tai sitten demo 7 vastaus Kuvaaja.cs. Muuta koodia siten, että se alkaa tyhjällä koordinaatistolla ja aluksi kysytään käyttäjältä merkkijono, jossa olisi tarkoitus olla vuoden kuukausien keskilämpötiloja. Merkkijonosta pilkotaan demo 7:n vastauksella reaalilukutaulukko.

Tuota varten jompi kumpi seuraavista:

  1. lisää projektiisi (tallenna samaan projektiin kuin Kuvaaja.cs ja sitten lisää projektiin Add Existing Items) myös demo7 vastauksen demo7.cs
  2. kopioi sieltä ErotaLuvut-funktio ja muut tarvittavat funktiot omaan ohjelmaasi (silloin poista Demo7.Taulukot. alla olevasta esimerkistä).

Sitten piirretään kuva (lisätään palloja kuvaan, metodi LuoPisteet), siten että lukua vastaavat x-koordinaatit ovat 10,20,30 jne.

Eli jos käyttäjä antaa merkkijonon

-10 -12 5 7 14 18

niin piirretään vastaavasti pallukat paikkoihin

(10,-10)
(20,-12)
(30,5)
(40,7)
(50,14)
(60,18)

pallukoiden värit ovat niin, että yli 12 olevat pisteet ovat punaisella ja alle 0:n olevat pisteet sinisellä. Muut mustalla.

  1. Aluksi muuta alueen rajat:

     private const double x1 = -1;
     private const double x2 = 70;
     private const double y1 = -15;
     private const double y2 = 25;
  1. Poista pääohjelmasta:

     pisteet = ArvoPisteet(20, x1, y1, x2, y2);
     LuoPisteet(this, pisteet, pallonKoko);
  1. Lisää pääohjelman (Begin) loppuun

     KysyKoordinaatti();
  1. Muuta sopivasti metodin KysyKoordinaatti kysymystekstiä.
  1. Muuta metodi KoordinaattiAnnettu muotoon:

     private void KoordinaattiAnnettu(InputWindow ikkuna)
     {
         string vastaus = ikkuna.InputBox.Text;
         double x = 10;
         double[] d = Demo7.Taulukot.ErotaLuvut(vastaus);
         pisteet = new Vector[d.Length];  // Tämä jos teet taulukko-versiota  
         // pisteet = new List<Vector>(); // tämä jos teet List-versiota
         foreach (double luku in d)
         {
             pisteet.Add(new Vector(x,luku));
             x += 10;
         }
         LuoPisteet(this, pisteet, 0.3,0.0,12.0);
         kysymassa = false;
     }

Varsinaiseksi tehtäväksi jää tehdä tuo aliohjelma

 public static void LuoPisteet(PhysicsGame game, ??? pisteet, 
                              double r, double ala,double yla)

jossa ala ja yla ovat rajat sille, mitä piirretään milläkin värillä.

# v6

Jos teit muutokset esim. Riderissa siihen versioon, joka käyttää List-rakennetta, saat siitä virheitä alla olevassa koodissa ja 0 p. Vaihda siinä tapauksessa List tilalle IList.

# LuoPisteet
# viitteidenpiirto

Tehtävä 7*. Viitteiden piirtäminen

Tällainen tehtävä tulee olemaan tentissä yksi 5-6p tehtävä (tentti max 24p). Jokaisessa demossa ennen tenttiä tulee olemaan vastaava piirtotehtävä.

Piirtotehtävissä on tarkoitus muokata kuvaa, niin että se vastaa ohjelman tilannetta pyydettynä ajanhetkenä. Tutustu tarvittaessa alla oleviin ohjeisiin. Luennoilla on jo harjoiteltu piirtämistä (mm luento 11).

# empty_vars

Ohje piirto-ohjelman käyttöön

Itse piirtotehtävä

# listaelaimista

Onko tämä tarkoitus muistaa ulkoa vai tuleeko kokeeseen jonkinlainen kaava?

VL: Piirtotehtävien komennot on käytössä. Soveltaminen pitää osata.

28 Oct 23 (edited 28 Oct 23)
# viitteetkuva1

B1 Konvoluutio käsin (videon katsominen pakollista)

Vaikka tehtävä onkin vapaaehtoinen bonus-tehtävä, on siihen liittyvän videon katsominen pakollista, sillä tulevissa demoissa oletetaan että tiedetään mitä tarkoittaa kuvassa olevat väriarvot

Bittikuvat esitetään taulukkona, jossa on kutakin pikseliä vastaava kirkkaus numeroarvona 0-255. Esimerkiksi 7x7 harmaasävykuva jossa on mustalla pohjalla yksi valkoinen vinoristi:

----------------------------
255   0   0   0   0   0 255
  0 255   0   0   0 255   0
  0   0 255   0 255   0   0
  0   0   0 255   0   0   0
  0   0 255   0 255   0   0
  0 255   0   0   0 255   0
255   0   0   0   0   0 255
----------------------------

Kuvalle voidaan tehdä konvoluutio-muunnos sillä tavalla, että maskia, esim sumennus:

1  1  1
1  1  1
1  1  1

"liutetaan" jokaisen kuvapikselin kohdalle niin, että maskin keskipiste laitetaan vastaavan kuvapikselin kohdalle.

Kunkin "liutus"askeleen kohdalla otetaan kuvan väriarvo yksitellen jokaisen maskin pisteen kohdalta ja kerrotaan se maskin vastaavan pisteen arvolla ja nämä arvot summataan (eli lasketaan vastinosamatriisien sisätulo) sekä jaetaan maskin arvojen summalla ja laitetaan muunnetun (uuteen matriisin tulevan) kuvan uudeksi pisteeksi.

Esimerkiksi em. matriiseilla uuden kuvan paikassa (1,1) olevan pikselin kohdalta lasketuksi sisätuloksi (ks demo 7) tulisi:

 255*1 +   0*1 +   0*1 +
   0*1 + 255*1 +   0*1 +
   0*1 +   0*1 + 255*1    = 3*255 = 765

Tämä jaetaan vielä maskin arvojen summalla, eli 9, jolloin pisteen väriksi tulisi 765/9 = 85. Jos joudutaan käyttämään taulukon ulkopuolisia arvoja, niin arvona käytetään silloin 0:aa. Tässä tehtävässä jakajana käytetään aina 9. Myös muita tulkintoja on olemassa ja ne riippuvat tapauksesta.

Lisäinfoa katso Demo 9. B1-3. Konvoluutio.

Laske tuloskuvan jokaisen pikselin väriarvo.

# vb1

Katkaise kukin jakolaskun tulos kokonaisluvuksi ja kirjoita tulos matriisimuotoon vastaavan luvun päälle (eli samaan paikkaan, tilalle) niin, että lukujen paikka pysyy täsmälleen samana (oikealta tasattuina). Matriisiin kirjoitetaan nimenomaan lukuja, ei laskuja! TIM antaa pisteet vain jos on vastausalueessa yksi matriisi, luvut täsmälleen samoissa kohti eikä alussa eikä lopuissa yhtään tyhjiä rivejä.

# konvoluutiokasin

B2. Ääniä peliin

Muuta AngryLego-peliä niin, että putoava pää huutaa mennessään ja Symbian soittelee pudotessaan kännykän ääniä. Äänet saavat kuulua pitempäänkin, mutta tekemällä niistä noin 1-2 sekuntia pitkiä, ne eivät soi turhan kauaa. Pohjahakemistossa on valmiita ääniä jos et itse halua tehdä ääniä.

Saat tehdä tehtävän myös harjoitustyöllesi. Laita siinä tapauksessa muutosrivien lisäksi vielä linkki työsi GitLab-osoitteeseen.

Huom! Jos käyttää tapaa jota käytin HangryDogsissa, niin silloin pitää tällä hetkellä äänet laittaa pienen bugin takia Content/Content kansioon (kun oikea paikka olisi Content). Jos äänet lataa etukäteen, niin Content on oikea paikka.

# aaniapeliin

B3. Koordinaatiston pikkuviivat

Muuta Kuvaaja.cs:ssä olevaa Axis-luokkaa niin, että se piirtää 4 pikkuviivaa (=jakaa viiteen osaan) jokaisen isomman välin sekä x-akselilla että y-akselilla.

# pikkuviivat

B4. Moodi

M: 15. Taulukot, 16. Toistorakenteet. Tee funktioaliohjelma Moodi(luvut), joka etsii taulukon yleisimmän luvun. Jos eniten esiintyviä on yhtä monta, niin silloin ensimmäisenä näistä näistä löytynyt tulkitaan yleisimmäksi. Ennen ohjelmointia, mieti ensin kuinka itse ratkaisit tämän ongelman (eli mieti algoritmi). Et tarvitse aputaulukkoja välttämättä, vaan tehtävän voi ratkaista muutamalla apumuuttujalla. Moodi on yksi keskiluvuista. Toinen on keskiarvo. Kolmas keskiluvuista on mediaani, eli aineiston keskimmäinen alkio. Tätä ei vielä tarvitse tehdä. Mitä mediaanin laskemiseksi pitäisi ensin tehdä? Katso vaikka Wikipediasta keskiluku.

# vb4

Oljenkorsi 1

# moodi

B5-7. Konvoluutio ohjelmalla

Tee C#-ohjelma, joka laskee mille tahansa harmaasävykuvalle ja maskille konvoluution. Ks. B1. Matriisien testaamisessa voit käyttää hyväksi Demo6:n mallivastauksen Matriisit-luokan Jonoksi-funktioita.

# konvoluutiokoodilla

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. Hyppivät viholliset

Muuta AngryLego-peliä niin, että lego-vauvat hyppivät muutaman pikselin verran levottomina ylös/alas. Vinkki: tee vihollisista oma luokka ja tee sen Update-metodiin tarvittavat muutokset. Tarkista myös, että olion IsUpdated on true.

Saat tehdä tehtävän myös harjoitustyöllesi. Laita siinä tapauksessa muutosrivien lisäksi vielä linkki työsi svn-osoitteeseen.

# hyppivat

PP 1

Korjaa annettu luokka syntaktisesti oikeaksi, niin että ohjelman pystyy taas ajamaan. Seuraa tehtävän ohjeita ja pyri tunnistamaan oikeat osat luokasta, pääohjelmasta ja aliohjelmista. Kirjoita myös dokumentit kaikkiin aliohjelmiin.

# PP81

PP 2 a

Tee LaskeKaikkienMerkkienMaara-aliohjelma, joka laskee kaikkien string-taulukossa olevien jonojen pituudet yhteen ja palauttaa sen.

# PP82a2

PP 2 b

Jatka edellistä aliohjelmaa siten, että sille annetaan myös etsitty merkki parametrinä.

  • Ongelma kannattaa pilkkoa osiin!
    • Tee ensiksi aliohjelma LaskeMerkkienMaara(string jono, char etsitty).
    • Korvaa aiemmasta aliohjelmasta rivi, jossa kasvatat merkkien summaa, aliohjelmakutsulla LaskeMerkkienMaaraan.
    • Sinun ei pitäisi tarvita muuttaa aliohjelmaan kuin summaa kasvattavaa riviä ja annettuja parametrejä!

HUOM! Tehtävässä ei tarvitse laskea samaa merkkiä isona ja pienenä vaan pelkästään annetussa muodossa.

# PP82b

PP 3

Tee tehtävälistan alussa oleva Valintakoe-tehtävä.

# eipeli

Korvaavia tehtäviä jotka ovat ei-pelejä - TÄYDENTYMÄSSÄ

Tehtävät 3-6 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ä 3-6 tai näitä E3-E6 tehtäviä.

Tehtävien pisteiden laskentaa etenmissivulle ei ole vielä tarkistettu.

Tehtävä E3. Refaktorointi

Tämä tehtävä korvaa perustehtävän 3. Demopisteet tehtävästä on annettava itse.

Tehtävän koko koodissa on minimaalinen Jypelin leikkiversio, josta saadaan satunnaislukugeneraattori ja Vector-luokka. Tämä on tuttu jo demosta 7.

Rideria varten tehtävän koodin saa joko tiedostosta Pisteet.cs tai alla olevasta laatikosta kun valitsee ensin Näytä koko koodi ja sitten Copy. Jos tehtävän ottaa noin, saa sen Pastella takaisin vastaukseksi.

Pääohjelman näet kun valitset Näytä koko koodi.

Tehtävässä 3 on tarkoitus refaktoroida koodia eli poistaa koodista turhaa toisteisuutta. Tehtävät on kirjattu myös koodin kommentteihin.

Tehtävä 3:

Koodin pohjalla on Demo7:stä tuttu Pisteet. Koodiin on lisätty aliohjelmat TulostaTaulukosta1 ja TulostaTaulukosta2, sekä Mainiin lisätty aliohjelmien kutsut.

Tutki lisättyjä aliohjelmia, ja mieti, millä tavoin voisit yhdistää aliohjelmat niin, että koodista saisi toistoa vähemmäksi.

Kirjoita pohdintojesi pohjalta aliohjelma TulostaTaulukosta, joka tekee halutut asiat. Muokkaa TulostaTaulukosta1 ja TulostaTaulukosta2 niin, että niiden sisältö on yksi rivi.

# pisteettaulussaE

Tehtävä E4. Refaktorointi

Aiempaa ohjelmaa on nyt muutettu niin, että pisteet ovat nyt piste-olioita, joilla on muitakin tietoja, kuin pelkkä sijaintitieto vektorina. Piste-oliolle on mahdollista antaa tietoina:

  • vektori
  • väri
  • nimi

mutta kaikkia näitä ei tarvitse välttämättä antaa. Olio syntyy myös vajavaisin tiedoin. Oikeastaan muuta oliosta ei tarvitse tässä vaiheessa tietää.

Koodista löytyy aliohjelman LuoHienoPiste ja LuoPunainenPiste. Tehtävässä on tarkoituksena tarkastella noiden aliohjelmien toimintaa ja löytää niistä keskeiset, yhtenäväiset ja toisistaan eroavat piirteet. Tehtävänäsi on laatia aliohjelma LuoPiste, jonka avulla voi luoda hienoja pisteitä ja punaisia pisteitä. Kirjoitettuasi aliohjelman, muuta LuoHienoPiste ja LuoPunainenPiste yhden rivin aliohjelmiksi.

Tehtävässä ei ole automaattitarkistusta. Joudut siis itse antamaan pisteet. Varmista, että ohjelma toimii!

Ohjelman tulostaessa pisteen tietoja, tietojen täytyy tulostua edelleen muodossa:

Pisteen nimi: Punainen pallero | Pisteen väri : punainen | Pisteen vektori (0,0,20,0)

# pisteettaulussaE2

Tehtävä E5. Taulukko listaksi (helppo)

M: 23.2 Listat Vaihda taulukko listaksi. Tästä oli esimerkki luennon 15 lopussa. Eli Pisteet.cs:ssä vaihda

private Vector[] pisteet;

tilalle

private List<Vector> pisteet;

ja tee kaikki muut tarvittavat muutokset, jotta ohjelma toimii täsmälleen kuten aikaisemminkin.

# v8

Oljenkorsi 1

TIM antaa tästä pisteitä vaikka vastaus olisi väärin. Tarkista vastauksesi toimivuus Riderissa tms.

# taulukkoListaksiE

Tehtävä E6. Kuukausien keskilämmöt

M: 23.2 Listat Muuta taas edellisen demokerran Pisteet.cs:ää siten, että se alkaa tyhjällä listalla ja aluksi kysytään käyttäjältä merkkijono, jossa olisi tarkoitus olla vuoden kuukausien keskilämpötiloja. Merkkijonosta pilkotaan demo 7:n vastauksella reaalilukulista.

Saadut keskilämpötilat tulostetaan konsoliin yhdelle riville. Lukujen väliin on hyvä sijoittaa jokin erotinmerkki, esim. '|'.

Alkuperäisessä tehtävässä 6 piirretään palloja kuvaan siten, että kuvasta saa yhdellä silmäyksellä selvää, millaiselle lukualueelle vuoden kuukausien keskilämpötilat sijoittuvat (muodostavat kuvaajan). Vastaavan kaltaista tilastointia voi tehdä selvittämällä listassa olevista keskilämpötiloista, kuinka monena kuukautena keskilämpötila on esim. 0-5, 6-10, 11-15, 16-20 jne astetta. Laadi sopiva luokittelu, ja tulosta keskilämpötilojen tietoja luokitteluusi pohjautuen.

Esim.

-9 | -8 | -5 | 0 | 8 | 13 | 15 | 16 | 14 | 3 | -5 | -8

Kuukausien keskilämpötila oli -10 - 0 astetta 6 kuukautena 
Kuukausien keskilämpötila oli 1-10 astetta 2 kuukautena
Kuukausien keskilämpötila oli 11-20 astetta 4 kuukautena vuodessa

Tässä tehtävässä ei ole automaattitarkistinta. Tee tehtävä Riderilla ja katso, että ohjelma lukee syötteet oikein. TIMissä ajettaessa ohjelman tulee kääntyä ajettaessa. Merkitse itsellesi pisteet omatuntosi mukaan.

# lampotilatE6

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.