```

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 7

Tehtävät perustuvat luentoihin: 11 ja 12.

OPPIMISTAVOITTEET

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

# Oppimistavoitteet

Demoista

Kysely 1

Käy lukemassa mitä demo 6:sta kerättiin kurssin palautteeseen palaute-sivulta ja osallistu siellä keskusteluun.

Jos et vastannut demo 6:ssa, niin vastaa kurssin välikyselyyn (ei kesän kurssilla). 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ä. Tai paina wrap aina välillä. Jos kirjoitit jotakin uutta, jota ei ole palaute-sivulla käsitelty, niin kopioi vastauksesi tai osa siitä palaute-sivulle

Pisteen tästä tehtävästä saavat merkitä ne, jotka eivät käyttäneet sitä demo 6:n vastaavassa kohdassa.

# kysely

Ville 1

Muista että jos et tykkää Villestä, näitä ei ole pakko tehdä.

Tee Ville-tehtävät: 5.9-5.13,9.8 Villen käyttöohje

# villev1

Jeliot 1

Tämäkään ei ole pakollinen, mutta voi olla hyvä havainnollistus jollekin! Vajaasta 30:stä tässä (syksy 2018) demossa kokeilleelta on tullut palautetta että oli hyötyä!

Ota itsellesi Jeliot.jar, eli ota tuo .zip, pura jonnekin ja käynnistä syntynyt Jeliot.jar. Copy/Paste koodialueelle Kutsuminen.java (vertaa Kutsuminen.cs, jollet ole nähnyt 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 ajatuksen 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ä.

# v3
# jelliot

Tauno 1

# tauno71a

Kohdassa b toteuta a-kohdassa Taunolla tekemäsi koodin pohjalta funktioaliohjelma

MuutaYli(int[] t, int raja, int miksi)

joka muuttaa taulukosta kaikki annetun rajan ylittävät alkiot miksi-parametrissa annetuksi arvoksi ja joka palauttaa muutettujen alkioiden lukumäärän.

# tauno1b

Tauno 2

Matriisin sisätulo: kerrotaan kahden matriisin vastinalkiot keskenään ja lasketaan tulot yhteen. Tässä tehtävässä lasketaan maskimatriisin ja varsinaisen matriisin osamatriisin sisätulo. Alla olevassa kuvassa hvainnollistettu tilannetta, jossa varsinaisesta matriisista otetaan indeksin [2,1] ympärillä oleva maskin kokoinen osamatriisi.

Matriisi, kohdan [2,1] ympärillä oleva 3x3 osamatriisi merkitty vihreallä:

Maski:

Yllä olevan kuvan tapauksessa sisätulo olisi:

35*1 +  50*1 +  60*1 + 
50*1 +  90*1 + 102*0 + 
20*0 +  34*1 +  44*1     = 363
# Plugin1

Kun yllä olevassa kuvassa laitat maskin johonkin kohti, näet missä indekseissä olevat luvut kerrotaan keskenään ja summataan. Huomaa että maskin indeksit eivät riipu siitä, mihin kohti matriisissa se laitetaan.

Tätä tehtävää ei tehdä oikealla Taunolla, mutta periaatteessa samalla idealla. Ongelmana on tällä kertaa matriisin sisätulon laskeminen. Eli lyhyesti sanottuna otetaan kahden matriisin vastaavissa paikoissa olevat alkiot ja kerrotaan ne keskenään ja lasketaan näiden tulojen summa. Itse asiassa Sopulipelin ja sen harjoittelutehtävän naapurien määrän laskeminen olivat sisätuloja, joissa maski-matriisina olivat

1 1 1          0 1 0
1 0 1          1 0 1 
1 1 1          0 1 0
  1. Tee alla olevan aliohjelman tehtävä taunomaisesti, eli käyttäen vain vakionumeroita (lisättävä 6 riviä valmiiseen koodiin). Tehtävänä siis laskea mallimatriisin pisteen [2,1] ympärille tulevan 3x3 osamatriisin ja maskin sisätulo, eli kertoa vastinalkiot keskenään ja laskea tulot yhteen. Vrt. Demo 6 Tauno 2. Huom. Nyt "keskipiste" ei ole mikään erikoistapaus.

  2. Kohtaan Tauno 2.2 muuta vastauksesi niin, että käytät hyväksesi indeksejä ix, iy vakioiden sijaan niin, että minkä tahansa ei-reunassa olevan osamatriisin sisätulo voidaan laskea. Eli aloita vaihtamalla [2,1] tilalle [iy+0,ix+0] ja muihin vastaavasti.

  3. (Vapaaehtoinen) koita tehdä sama silmukalla

# Tauno72
# Tauno722

Oljenkorsi 1

# Tauno723

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

Ohjeet sarjatehtävien tekoon

Lue ensin: 16.3.1 Kysyminen käyttäjältä.

Tässä sarjassa opetellaan kysymään ja hyödytämään käyttäjän syötteitä. Tavoitteena on rakentaa monesta aliohjelmasta koostuva ohjelma, joka analysoi ja tulostaa tietoa annetuista syötteistä.

Tehtävät

Sarja E*. Merkkijonojen muodostaminen (2 p)

Ohjeet sarjatehtävien tekoon

Tässä sarjassa harjoitellaan yhdistämään ja muuttamaan muuttujien sisältöjä tulostamista varten selkeään ja esittämiskelpoiseen muotoon.


Huom! Vain osa sarjan tehtävistä on tähtitehtäviä. Ne kaikki on erikseen merkitty tähdellä.

Tehtävät

Sarja F*. Merkit ja kirjaimet (4 p)

Ohjeet sarjatehtävien tekoon

Lue ensin: 12.8 Char-luokka ja 27. ASCII-koodi.

Tässä sarjassa tutkitaan lisää merkkien ja kirjainten eroja sekä niiden suhdetta merkkijonoon.

Nähdäksesi pääohjelman Main, voit avata sen ja kaiken muun piilotetun koodin jokaisessa osassa painamalla linkkiä "Näytä koko koodi".


Huom! Vain osa sarjan tehtävistä on tähtitehtäviä. Ne kaikki on erikseen merkitty tähdellä.

Tehtävät

B1. Lukujen erottaminen merkkijonosta

# vtb1

Merkkijonojen pilkkominen: Tee funktioaliohjelma ErotaLuvut(String jono), jonka ansiosta seuraava pääohjelma

public static void Main(String[] args)
{
        double[] luvut = ErotaLuvut("2.23 3 4 5 k      9 ;5");
        Console.WriteLine(String.Join(" ", luvut));
}

tulostaisi

 2.23  3  4  5  0  9  5


Huom! Tehtävää ja sen testaamista voi vaikeuttaa se, että eri maissa ja koneiden asetuksissa käytetään eri desimaalimerkkiä. TIMissä ajettaessa käytetään desimaalipistettä.

Oljenkorsi

# lukujenerotus

Tälle eräs hyötykäyttö on esimerkin Kuvaaja.cs metodissa KysyKoordinaatti, jota kutsutaan jos painetaan hiiren oikeata nappia. Tällöin kysytään käyttäjältä pisteen koordinaatti ja luodaan uusi vihreä pallo ko. kohtaan. Ohjelman puhelinversiossa sama kysytään kun pyyhkäistään näyttöä ylhäältä alas.

B2. Monenneksiko eniten

Tehtävänäsi on tehdä funktio Yleisin, joka palauttaa merkkijonon n:nneksi yleisimmän merkin. Yleisin vastaanottaa kaksi paramteriä: 1) tutkittavan merkkijonon ja 2) luvun, joka kertoo monenneksiko yleisintä merkkiä etsitään. Tuon jälkimmäisen parametrin tulee myös olla valinnainen, jonka oletusarvona on 1.

Laita siis alla olevan ohjelman valmiiksi annettu pääohjelma Main toimimaan edellä mainituilla ohjeilla.

Vinkki! Kannataa ehkä tallettaa tutkittava merkkijono StringBuilder -muuttujaan, ja poistaa siitä "kerroksittain" yleisimmät merkit pois, kunnes ollaan tarpeeksi "syvällä" ja löydetään n:näs merkki, josta ollaan kiinnostuneita. Kannattaa myös jakaa noita tehtäviä useampaan aliohjelmaan, eikä tehdä kaikkea yhdessä.

# eniten

G1. Pyrstötähdet V

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

Muuta ohjelmaa niin, että pelissä pistelaskurin maksimiarvo on 20 ja siihen sidotaan näkyvien pisteiden (Label) lisäksi nyt myös pistepalkki (ProgressBar), joka täyttyy samaa tahtia, kun pisteitä kerätään.

Kun pistelaskuri saavuttaa maksimiarvonsa, ilmestyy ruudulle voitto-onnittelut. Samalla pelaajan ohjaimet poistetaan käytöstä.

Kokeile että toimii.

Esimerkkikuva pelistä
Esimerkkikuva pelistä


Pelissä käytetyt kuvat:

# pyrstotahdet

H1. Harjoitustyöhön joku viikon luentoihin liittyvä ominaisuus

Jatkossa on aina vapaaehtoinen tehtävä H1, jolla voi korvata muita tehtäviä mikäli harjoittelee samaa osaamistavoitetta kuin varsinaisissa tehtävissä tai Bonus-tehtävissä.

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 merkkijonon pilkkominen, 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.

Pyydetty linkki esim. muodossa:

https://gitlab.jyu.fi/oma_kayttajatunnus/ohj1ht
# harkkaominaisuus

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

# harj2

PP1

Tee aliohjelma, joka kopioi annetun taulukon alkioittan uuteen taulukkoon. Tee myös aliohjelma, joka kopioi taulukon alkioit uuteen taulukkoon mutta kääntäen siten, että ensimmäinen alkio menee uuden taulukon viimeiseksi alkioksi, toinen alkio uuden taulukon toiseksi viimeiseksi jne.

# pp1

PP2

Tee funktio(aliohjelma) LaskeMerkkijonot, jolle annetaan parametrina merkkijonotaulukko, sekä etsittävä merkkijono. Funktio laskee, kuinka monta etsittävää merkkijonoa taulukosta löytyi.

# pp2

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.