```

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 8

Tehtävät perustuvat luentoihin: 15 ja 16.

OPPIMISTAVOITTEET

Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.

# Oppimistavoitteet

Demoista

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.

# 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, eli ota tuo Download Jeliot JAR. Pura .zip jonnekin ja

  • Windows: käynnistä syntynyt Jeliot.bat.

  • Mac: Komentoriviltä:

    java -jar /Users/vesal/Downloads/Jeliot3/jeliot.jar

    mukaellen sitä, mihin tuo jeliot.jar on mennyt. Toimii myös Win ja Linux.

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

Tauno 1

Katso ensin mallivastaus Demo 7:n Tauno 1 -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.

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

# tauno1a
# tauno1b
# valintakoe

Sarja G. Karkausvuosi (3.5 p)

Ohjeet sarjatehtävien tekoon

Jos yhtään vaikeuksia, aloita: harjoitustehtävällä.


Tässä sarjassa käsitellään karkausvuosia ja tehdään niihin sekä päivämääriin perustuvia ohjelmia.

Karkausvuosia ovat vuosiluvut, jotka ovat jaollisia neljällä. Poikkeuksena ovat kuitenkin täydet vuosisadat. Niistä vain ne lasketaan karkausvuosiksi, joiden alkuosa on jaollinen neljällä seuraavasti:

1900 EI OLE karkausvuosi, sillä 19 ei ole jaollinen 4:llä.
2000 ON karkausvuosi, sillä 20 on jaollinen neljällä (20 / 4 = 5).

Tehtävät

Tehtävä 1*. Kuukauden pituudet

Lue ensin: 16. Toistorakenteet.

Jos yhtään vaikeuksia, aloita harjoitustehtävällä.

Kuukausien pituudet vaihtelevat lyhyiden ja pitkien välillä. Tehtävänäsi olisi tehdä ohjelma, joka osaa eritellä lyhyet ja pitkät kuukaudet toisistaan niin, että <= 30 pituiset kuukaudet ovat lyhyitä ja muut pitkiä. Erottelu voidaan tehdä mm. ehtolauseilla, mutta myös taulukoilla.

a) If-lauseella

Lue ensin: 13. Ehtolauseet.

Tee aliohjelma OnkoPitka(kk), joka palauttaa totuusarvon siitä, onko tutkittava kuukausi pitkä vai ei. Toteuta käyttäen if-lausetta.

# kuukaudet1

b) Switch-rakenteella

Lue ensin: 13.8 switch-rakenne.

Toteuta sama, mutta nyt käyttäen switch-rakennetta.

# kuukaudet2

c) Taulukolla

Lue ensin: 15. Taulukot (erityisesti 15.4 Arvosana kirjalliseksi).

Toteuta sama vielä käyttäen taulukkoa.

Vinkki! Et tarvitse silmukoita.

# kuukaudet3

Sarja H. Listat (4 p)

Ohjeet sarjatehtävien tekoon

Lue ensin: 23.2 Listat.

Tässä sarjassa käsitellään dynaamista rakennetta List ja harjoitellaan sen käyttämistä. Lähdetään liikkeelle kuitenkin tutusta ja turvallisesta taulukosta.

Tehtävät

Sarja C. Lämpötilaseuranta matriisissa (2 p)

TODO opettajille: Miksi kirjaimet eivät mene järjestyksessä? -AJL

Mitä kirjaimia tarkoitat? EDIT: Ahaa tarkoitat sarjatehätiven kirjainkoodeja. Se johtuu siitä, että osa aiemmin alkaneista tehtävistä jatkuu myöhemmissä demoissa. Mutta samalla joskus alkaa uusia. -JE

Selkeyden vuoksi ehdottaisin, että jokaisen tehtävän nimi alkaisi sanalla "Tehtävä", sitten numero, ja sen perään mahdollinen sarjan nimi ja mahdollinen osa. Esimerkkejä (ei todellisia):

  • Demo 5
    • Tehtävä 1 [huomautus: ei erityistä nimeä]
    • Tehtävä 2: Listat, osa 5 [huomautus: jatkoa demosta 4, jota ei näy tässä]
    • Tehtävä 3: Listat, osa 6
    • Tehtävä 4: Käyttäjältä kysyminen, osa 1
  • Demo 6
    • Tehtävä 1 [huomautus: ei erityistä nimeä]
    • Tehtävä 2: Käyttäjältä kysyminen, osa 2 [huomautus: jatkoa demosta 5]
    • Tehtävä 3: Listat, osa 7 [huomautus: jatkoa demosta 5]
    • Tehtävä 4: Listat, osa 8

Tehtävät, jotka eivät varsinaisesti liity mihinkään sarjaan, eivät minun mielestäni tarvitse nimeä, koska ne voivat sekoittua nimettyihin sarjatehtäviin. Tällaista uudelleennimeämistä puoltaisi se että nykyisellään kategorioita ja hierarkioita on paljon, mielestäni liikaa, ja kokonaiskuva siitä että mikä liittyy mihinkin ja minkä arvoinen mikäkin tehtävä on voi hämärtyä.

  • AJL
01 Jun 23 (edited 13 Jun 23)

Ohjeet sarjatehtävien tekoon

Lue ensin: 15.5 Moniulotteiset taulukot ja 16.6 Sisäkkäiset silmukat.

...jatkoa aiempaan (Demo 6). Osassa 5 tehtiin ohjelma Paivia, jonka avulla laskettiin mittaushetkien välistä etäisyyttä päivissä.

Lämpöseuranta matriisina:

    double[,] lammotKK =
        { { 16.4, 14.3, 15.6, 17.2, 18.3, 16.6, 14.7 },   // iy=0  (viikko 1)
          { 15.2, 13.0, 13.5, 16.7, 12.9, 16.1, 14.8 },   // iy=1  (viikko 2)
          { 13.3, 15.2, 15.0, 12.1, 11.7, 11.1, 15.0 },   // iy=2  (viikko 3)
          { 11.3, 10.1, 11.9, 13.7, 12.0, 10.4, 13.1 } }; // iy=3  (viikko 4)
         // ix=0  ix=1  ix=2  ix=3  ix=4  ix=5  ix=6

Tehtävät

Sarja D. Käyttäjältä kysyminen (2 p)

Ohjeet sarjatehtävien tekoon

...jatkoa aiempaan (Demo 7). Osassa 5 aliohjelma KysySyote muokattiin kysymään käyttäjältä useita sanoja, jotka palautettiin merkkijonotaulukkona Erottele ohjelman avulla.

Tehtävät

# viitteidenpiirto

Tehtävä 2*. 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ä. Tutusta tarvittaessa alla oleviin ohjeisiin. Luennoilla on jo harjoiteltu piirtämistä (mm luento 11 - viitteet). **

# empty_vars

Ohje piirto-ohjelman käyttöön

Itse piirtotehtävä

# listaelaimista
# viitteetkuva1

B1. Erilaiset kirjaimet

Lue ensin: 27. ASCII-koodi.

Demoissa 7 aloitetussa sarjassa F tutkittiin merkkien ja kirjainten eroja. Tässä tehtävässä jatketaan tuon idean työstämistä vielä pidemmälle ASCII-koodien avulla.

a) Kirjaimia

Tee funktio EriKirjaimia, joka palauttaa lukumäärän siitä, kuinka monta eri kirjainta (ei merkkiä, esim. 'a' ja 'A' ovat samoja kirjaimia, mutta eri merkkejä) merkkijonossa on.

Vinkki! Hyödynnä toteutuksessa ASCII-koodeja. Kuten kaikilla merkeillä, myös jokaisella kirjaimella on oma ASCII-koodinsa.

# eriKirjaimet

b) Kirjaimia & muita merkkejä

Lue ensin: Tuple.

Tee funktio KirjaimiaJaMerkkeja, joka palauttaa tiedon sekä eri kirjainten että muiden merkkien (eli ei-kirjainten) lukumäärästä merkkijonossa.

Vinkki! Tarvitset tuple -muuttujaa palauttaaksesi useamman kuin yhden muuttujan arvon samasta funktiosta.

# kirjaimetJaMerkit

B2. Ääniä peliin

Ota demojen 7 mallivastaus tehtävään Pyrstötähdet V ja aja se ensin sellaisenaan.

Muuta ohjelmaa sitten niin, että osuma tähteen ei olekaan räjähdyksen aiheuttava "törmäys", vaan ennemminkin jonkin järkevämmän äänitehosteen (voit tehdä myös oman) aiheuttava "keräys". Eli korvaa tuo räjähdys äänitehosteella.

Kokeile että toimii.

Esimerkkikuva pelistä
Esimerkkikuva pelistä


Pelissä käytetyt kuvat:


Huom! Muista laittaa ohjelmassa käytetyt äänet ja kuvat Content -kansioon ja tarkistaa, että sen asetukset Visual Studiossa ovat kunnossa.

# aaniapeliin

B3. Moodi

Lue ensin: 15. Taulukot ja 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

G1. Pyrstötähdet VI

Ota demojen 7 mallivastaus tehtävään Pyrstötähdet V ja aja se ensin sellaisenaan.

Muuta ohjelmaa niin, että pelissä on mukana myös ruudulla näkyvä ajastin, joka laskee pelin suoritukseen kuluvaa aikaa. Voitto-onnittelujen yhteydessä näytetään pisteiden keräämiseen kulunut aika.

Voitto-onnittelujen jälkeen (esim. 5 sekuntia) peli alkaa alusta, jolloin tähdet piirretään uudelleen satunnaisesti ja pelaaja lähtee jälleen keskeltä liikkeelle. Pisteet ja ajastin nollataan alkamaan myös alusta.

Kokeile että toimii.

Esimerkkikuva pelistä
Esimerkkikuva pelistä


Vinkki! Kannattaa tehdä esim. aliohjelma AloitaPeli, joka sisältää pelin nollaamiseen ja aloittamiseen tarvittavat komennot. Sitä voidaan sitten kutsua pääohjelmasta Begin ja myöhemmin uudelleen, kun peli halutaan "resetoida".

Pelissä käytetyt kuvat:

# pyrstotahdet

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

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

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.