Sinun UserID: 0
Ilmoittaudu missä ryhmässä (live/zoom/video) 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ä.
Ohjelmointi 1, s 2023 / Demo 6
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 ma 16.10 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.
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 (tai zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen palautustilaisuuteen osallistuminen 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:
Please
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ä.
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 23 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.
Demoista
Muista katsoa demo 5 palautusvideot!
HUOMAUTUS: Tällä demokerralla testejä pitää kirjoittaa itse. Malleja ja ideoita voi kopioida aikaisemmilta demokerroilta, kun niiden koodissa painaa "Näytä koko koodi".
Tässä demossa näet testien tarpeen siitä, että "Näytä koko koodi" painamalla ei näy yhtään valmista testiä. Lisäksi jos painaa Test-painiketta eikä testejä ole kirjoitettu, niin tästä tulee virheilmoitus.
Pohja, josta testejä voi kopioida (tosin tehtäviä suositellaan tehtäväksi Riderissä):
Muista, että reaalilukuja testataan eri tavalla kuin muita tyyppejä:
ComTestille on omat tarkemmat ohjeet dokumentissa ComTest C# -examples.
Itsekirjoitetuista testeistä voi saada pisteitä vaikka testit olisivatkin vajavaisia, tässä pitää siis olla rehellinen! Jos testit eivät ole kunnollisia ja testaa jotakin, niin testit täytyy joko pyyhkiä pois tai tehdä sellaisiksi, etteivät ne käänny. Muuten ohjelma antaa ansiottomia pisteitä.
Täysien pisteiden saamiseksi myös dokumentaatio pitää käydä katsomassa (ja tarkistaa, että se on kunnollinen, eli siinä näkyy myös paramterin nimet ja selitykset).
Kysely 1 (1p)
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 tulisi yli 65 merkkiä pitkiä rivejä. Vaihtoehtoisesti paina wrap
aina välillä.
Analysoi omia vaikeuksiasi kurssilla alla olevaan laatikkoon ja käy lukemassa/lisäämässä mielipiteitä palaute-sivulla. Suhteuta myös siihen, miten paljon olet käyttänyt kurssilla tarjottuja apuja, mm. pääteohjausta, keskustelukanavia, demojen harjoittelutehtäviä yms.
Video 2
Käy katsomassa videohakemistosta 3 videota, ks: videohakemisto, jotka auttavat sinua parhaiten. Kerro mistä aiheista katsoit videot ja mitä mieltä olet videohakemistolistauksesta. Jos joku video ei toimi, laita kommentti viereen tai yrittäkää korjata oikea osoite ja aika.
Tauno 1
Tee alla olevat Tauno-tehtävät. Kun saat oikeat tulokset, niin laita Taunon generoima koodi kommentteihin ja korvaa se koodilla, jossa sama asia tehdään silmukassa. Varmista Aja- ja Test-painikkeilla, että koodi edelleen toimii.
Maalatun koodin saa kommentteihin näppäinyhdistelmällä Ctrl + '
VL: Mikäli käyttää sitä Highkight (=ACE)-editoria.
—- Tehtävät joilla voit harjoitella ilman silmukkaa ja silmukaksi
Tauno ei anna sijoittaa alkioita indekseihin, vaikka indeksimuuttujat tämän sallisivatkin. Yhden ehkä onnistuu sijoittamaan, mutta sen jälkeen ko. toiminto "jäätyy".
VL: on siinä näköjään sellainen vika, että jos sijoitat vaikka j:hin isomman luvun kun taulukon koko, niin "sekoaa". Silloin vastaava indeksipaikka ei liikahda. Eli toimii toki väärin, mutta sitä ennen käyttäjä on jo toiminut väärin. Useissa kielissä on ominaisuuksia, joiden toimintaa ei ole määritelty, jos jotakin on tehty väärin. Eli sovitaan, että Taunossa on tällainen ominaisuus :-)
—Huom 1: Tämä on "par 1" tehtävä, eli yksi apumuuttuja riittää kahden indeksimuuttujan lisäksi. Haluamasi muuttujan arvoa voit kasvattaa/vähentää yhdellä, kun raahaat sen päälle "laskupalkissa" olevan +1
/-1
laatikon. Voit käyttää olemassa olevaa muuttujaa taulukon indeksinä raahaamalla muuttujan taulukon solun alla olevaan laatikkoon. Mikäli haluat käyttää toista indeksimuuttujaa, tulee sinun raahata toinen muuttuja toisen taulukon solun alle.
Huom 2: Tämän hetken Taunossa on sellainen bugi, että indeksit eivät saa mennä päistä ylitse ja jos menee, se ei näy "kuvassa".
Tauno 2*
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Tehtävää ei tehdä oikealla Taunolla mutta periaatteessa samalla idealla. Ongelma: Edellisen kerran "sopuli-pelin" tietyn sopulin naapurit voidaan laskea ehtolauseen sijaan ainoastaan summaamalla kussakin naapuriruudussa olevat luvut yhteen, mikäli ruuduissa on vain arvoja 0 tai 1. Tämä tarkoittaa jokaista laskettavaa ruutua kohti 8 naapuriruudun arvojen summaamista. "Matriisin" reunoilla oleville ruuduille ei VIELÄ yritetä laskea naapureiden määrää, koska reunoilla olevin naapuriruutujen määrä vaihtelee. Tehtävässä siis lasketaan naapureiden määrä vain niille ruuduille, joilla on 8 naapuriruutua.
Piirrä itsellesi kuva ruutupaperille tilanteesta, jossa "pelissä" on 6 riviä ja 5 saraketta. Kirjoita ruutuihin sopulimääriä (0 tai 1) ja ruutujen nurkkiin pienellä ruudun osoite tyyliin [1,2]
(rivi ensin, sarake sitten). Kertaa itsellesi vielä, miten lasketkaan jonkin ruudun naapurisopuleiden määrän.
- Tee alla olevan aliohjelman tehtävä taunomaisesti, eli käyttäen vain vakioindeksejä. Toisin sanoen kopioi
n +=...
riviä seitsemän kertaa ja muuta paikassa[1,2]
olevan sopulin nurkkanaapurin indeksiparin[0,1]
tilalle kullakin uudella rivillä vastaavan naapurin paikka. Mene paikat läpi rivi kerrallaan vasemmalta oikealle. Käytännössä siis kirjoita ruudun [1,2] naapureiden osoitteet (8 kpl).
- Kopioi edellinen vastaus alle kohtaan Tauno 2.2 ja muuta vastauksesi niin, että vakioiden sijaan käytät hyväksesi aliohjelman parametreinä tuotuja indeksejä
iy
jaix
siten, että minkä tahansa ei-reunassa olevan ruudun naapurit voidaan laskea. Esimerkiksi tämän tehtävän kohdan 1 vastauksen 1. rivi olisin += sukupolvi[iy-1,ix-1];
. HUOM! Älä merkitse pelkkäiy
vaaniy+0
.
- (Vapaaehtoinen). Kohdan 2 vastauksen jälkeen sinulla pitäisi olla 8 riviä, jotka ovat hyvin samankaltaisia, mutta eivät kuitenkaan täysin samanlaisia. Kopioi edellinen vastaus kohtaan Tauno 2.3 ja jatka sen muuttamista alla olevilla ohjeilla. Esittele apumuuttujat
int x=-1, y=-1;
ja muuta kaikki rivit muotoonn += sukupolvi[iy+y,ix+x];
niin, että ennen riviä muutat indeksejäx
jay
siten, että seuraavalla rivillä viitataan samaan paikkaan kuin ennen muuttujienx
jay
käyttämistä, eli kuten Tauno 2.2 kohdassa. Muuttamiseen saat käyttää vain lauseitax++
,x=-1
,y++
. Älä kirjoita näitä lauseita hakasulkeiden sisään, vaan omille riveilleen.
- (Vapaaehtoinen). Kohdasta 3 pitäisi nyt erottua kaksi sisäkkäistä silmukkaa. Tee kohtaan Tauno 2.4 kohdasta 3 uusi vastaus silmukoita käyttäen (edelleen ei reunassa oleville sopuleille).
Ville 1
Tee Ville-tehtävät: 5.6-5.8,9.4-9.6. Villen käyttöohje.
Tehtävä 1. Aliohjelman esittely
Tee seuraavia aliohjelmakutsuja vastaavat aliohjelmien tai funktioiden esittelyrivit ja aliohjelmien lyhyimmät mahdolliset rungot (eli tynkätoteutukset) siten, että aliohjelmat ovat syntaktisesti oikein (niiden ei vielä tarvitse toimia loogisesti oikein). Toisin sanoen saat koodin, joka kääntyy (ja tulostaa TIMiin OK
).
Paina aluksi kussakin tehtävässä Näytä koko koodi
. Koodilaatikon alla on nappuloita, joilla voit lisätä koodia. (Toistaiseksi koodia voi näillä nappuloilla lisätä vain tekstin loppuun). Jos teet tehtävää laitteella, jossa ei ole kunnollista näppäimistöä, saat poikeuksellisesti käyttää parametrien niminä a, b, c
jne... Muuten pitää käyttää kunnon nimiä. Kun koodi on mielestäsi valmis, paina Aja
. Jos tulee virheitä, korjaa.
Huomaa, että oikeastakin vastauksesta tulee varoituksia (warning), koska tehtävissä on muuttujia, joita siinä ei käytetä. Oikeasti varoituksiakaan ei saa tulla, mutta tässä rutiinia harjoittavassa tehtävässä ne nyt sallitaan.
Kustakin kohdasta saa 0.2 p.
Tynkiä eri tyyppisille funktiolle (mieti, mikä sopii millekin tyypille?):
return; // tai ei mitään
return 0;
return false;
return 0.0;
return 'a';
return "";
return new StringBuilder();
sisennykset mitä sattuu (koskee n. 80% vastaajista)
rivitys väärin,
{
ja}
väärillä riveilläturhia tyhjiä rivejä
käytetään
<=
merkin sijaan <merkkiä
(ei siis< 2
vaan<= 1
)muuttujien nimet. Muuttujan nimen pitäisi kertoa lukijalle jo sellaisenaan mihin sitä käytetään
väärin nimettyjä muuttujia, esim aloitetaan isolla kirjaimella
aliohjelman nimen jälkeen ylimääräinen välilyönti ennen sulkua
(
väärä paluutyyppi, esim:
int i = 0; return i;
jos pitää palauttaa
double
. Ei sinällään väärin, mutta antaa hieman väärän viestin aliohjelman tekoa varten. Tynkäaliohjelmassa apumuuttujat ovat oikeastaan tarpeettomia.sulkujen edessä väärin välilyönti. pitää olla
tyyppi[]
jaaliohjelma()
.
Tehtävä 2*. Itseisarvo ja etäisyys
M: 13. Ehtolauseet. Kirjoita ilman minkään valmiin funktion (ei esim. Math.Abs
) käyttöä funktioaliohjelma jota voi kutsua muodossa
Onko ehtolause sallittu? (esim. if)
JK: On sallittu
—double lukuEiNegatiivisena = Itseisarvo(luku);
Funktio palauttaa luvun aina ei-negatiivisena, toisin sanoen sen etäisyyden nollasta. Visual Studiolla aloita kirjoittamalla sopiva testipääohjelma (tai ComTest-testit), jossa kutsut funktiota erilaisilla testattavilla arvoilla. TIM versiossakin testit pitää kirjoittaa itse.
Huomaa että testit pitää kirjoittaa nyt itse!
—Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
- olethan itse kirjoittanut testit?
- sisennykset!!!
- liian monimutkaisia, mallivastaus on 2 riviä, eikä siinä ole yhtään kertolaskua
- turhia tyhjiä rivejä
- muuttujien nimet. Muuttujan nimen pitäisi kertoa lukijalle jo sellaisenaan mihin sitä käytetään.
- turhia puolipisteitä, aaltosulun
}
jälkeen ei tule puolipistettä - mielellään ei muuteta parametrina tulleen muuttujan arvoa, vaan tehdään joku uusi muuttuja tai hoidellaan jotenkin muuten
Mikäli tässä tai seuraavissa tehtävissä haluat käyttää jonkin toisen demotehtävän funktiota/funktoita, kopioi niiden toteutus samaan vastauslaatikkoon vaikka ilman kommentteja ja testejä. Oikeasti toki nämä linkitettäisiin käännökseen mukaan, mutta sitä ei ole kurssilla vielä opeteltu.
- miettikää testit kunnolla. Väärin tehdyillä testeillä tulee väärä tulos. Esim
Etaisyys(3.0,4.0) ~~~ 1.0
eikä7.0
. - sisennykset
- olisi voinut käyttää a-kohdan funktiota, ei tarviisi yhtään iffiä!
- vähennyslaskua ei kannattaisi tehdä yhtä kertaa enempää
- monimutkainen tapa saada merkki vaihtumaan
- aivan liikaa ehtolauseita joillakin
- muutujat väärin nimettyjä, esim alkaa isolla kirjaimella
Tehtävä 3. Miidi ja EtsiLahin
M: 16. Toistorakenteet, 15. Taulukot. Olkoon tässä tehtävässä miidi se taulukon alkio, joka on lähimpänä taulukon alkioiden keskiarvoa. Tee funktioaliohjelma Miidi(double[] luvut)
, joka palauttaa reaalilukutaulukon miidin.
Esimerkki:
double[] luvut = {1, 2, 3, 2, 5}; // keskiarvo == 2.6
double m1 = Miidi(luvut); // 3
double m2 = Miidi(new double[]{1}); // 1
double m3 = Miidi(new double[]{3, 3}); // 3
double m4 = Miidi(new double[]{}); // 0
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Voit tehdä tämän tehtävän askeleittain seuraavasti:
- Harjoittele halutessasi lähimmän alkion etsimistä alla olevalla Tauno-tehtävällä.
- Kopioi luentojen esimerkin Summa-funktio ja tee siitä
double
-luvuilla toimiva versio. Tämän avulla voit laskea keskiarvon. - Tee ja testaa funktio
public static double EtsiLahin(double[] t, double luku)
joka etsii annetusta taulukosta lähintä lukua ja palauttaa sen. Katso lähimmän etsimiseen ideaa Pienin ja Suurin -esimerkistä. - Lopuksi
Miidi
syntyy keskiarvon ja lähimmän etsimisellä parilla rivillä.
Taunolla ei voi tehdä ehtolauseita eikä laskea etäisyyksiä, mutta laske tarvittaessa etäisyydet vähentämällä luvut toisistaan "oikeinpäin" (siten että tulos on positiivinen). Sitten sijoita tulos sopivaan apumuuttujaan. Tarvittavien vertailujen kohdalla tee itse päätös siitä, kumpiko luku on suurempi ja toimi sen mukaan seuraavassa "operaatiossa". Tee tehtävää Taunolla niin monta kertaa, että "algoritmi" selviää sinulle.
Kirjoita funktio
public static double Keskiarvo(double[] luvut)
Kopioi funktio
Etaisyys
tähän. Myös ne funktiot joita etäisyys kutsuu.Kirjoita funktio
public static double EtsiLahin(double[] luvut, double luku)
Kirjoita funktio
public static double Miidi(double[] luvut)
jossa kutsut keskiarvoa ja lähintä.
- sisennykset
- jättäkää tyhjää aliohjelminen väliin!
- dokumentaatiokommentointi puuttuu
- testejä puuttuu ainakin itse miidistä, mutta myös muista
- tyhjän taulukon tapaus puuttuu testeistä
- vielä turhaan luullaan että kutsuvan aliohjelman ja kutsuttavan aliohjelman muuttujien nimillä olisi jotakin tekemistä keskenään.
Tehtävä 4. Pisteiden välinen etäisyys
M: 9. Aliohjelman paluuarvo. Muistele koulusta (tai katso Wikipediasta), miten laskettiin suorakulmaisen kolmion hypotenuusa Pythagoraan kaavalla. Päättele, miten tämän tiedon avulla voit laskea 2-ulotteisella tasolla olevan kahden pisteen välisen etäisyyden. Kuvan piirtäminen paperille kannattaa.
Kirjoita sitten funktio
double Etaisyys(double x1, double y1, double x2, double y2)
joka laskee kahden pisteen p1
ja p2
(missä p1=(x1,y1)
ja p2=(x2,y2)
) välisen etäisyyden (eli tuota Pythagoraan lauseesta saatavaa etäisyyttä sanotaan Euklidiseksi etäisyydeksi) .
Laita omiin testeihin vähintään 6 oikeaa desimaalia! Tietysti ei tahallaan kannata laittaa etäisyyksiä jotka eivät ole päättyviä desimaalilukuja :-)
Katso Math
-luokan dokumentaatiosta millä funktiolla voit laskea neliöjuuren.
Piirrä ruutupaperille, kuva johon laitat yhden pisteen p1
ja toisen pisteen (ylemmäksi ja oikealle) p2
. Kirjoita p1
viereen (x1,y1)
ja vastaavasti p2
viereen. Yhdistä pisteet viivalla ja piirrä vielä tarvittava suorakulmainen kolmio. Merkitse kuvaan a
, b
ja c
. Miten saat laskettua a
ja b x1
, x2
, y1
ja y2
avulla? Tarvittaessa käytä kokeeksi numeerisia arvoja, esim laita pisteet ruutupaperilla koordinaatteihin (2,1)
ja (6,4)
. Miten c
lasketaan?
- sisennykset
- turhaan tutkitaan onko a*a negatiivinen koska se ei voi olla :-)
- vastauksessa ei tarvita yhtään iffiä
- muuttujien nimet huonoja
Tehtävä 5. Reaalilukujen vertaaminen
M: 13. Ehtolauseet. Reaalilukuja ei (erittäin harvoja erikoistilanteita lukuun ottamatta) saa verrata ==
-operaattorilla.
Samat
–funktion ideana on siis se, että jos kaksi lukua ovat "riittävän" lähellä toisiaan, palautetaan true
, muuten false
. Esimerkissä (Näytä koko koodi) "riittävän" on 0.01
ja 0.2
. Jos tarkkuutta ei anneta, silloin käytetään esimerkiksi 0.00001
tai muuta pientä lukua. Huomaa, että toinen kutsu on vähemmillä parametreillä kuin muut. Funktio Samat
on siis ns. kuormitettu funktio (function overloading).
- sisennykset
- vastaus voi olla yhden rivin mittainen, mutta saa toki demovastauksessa olla pidempikin
Tehtävä 6. Skaalaa
Tee funktioaliohjelma Skaalaa(double luku, double min, double max)
joka skaalaa välillä [0, 1]
olevan luvun välille [min, max]
. Esimerkkejä kutsuista näet kun klikkaat Näytä koko koodi
.
Eli esimerkiksi 1. kutsu tarkoittaa, että välin [0,1]
luku 0.2
on omaan väliinsä nähden samassa suhteessa kuin luku 2
on suhteessa väliin [1,6]
tai luku -18
on väliin [-30,30]
. Piirrä vaikka molemmat välit ja ko. luvut oman välinsä sisälle.
Jos sinulla on luku x
väliltä [0,1]
ja haluat saada siitä luvun välille [a,b]
, niin mieti, mitä pitää tehdä, jotta 0
:sta tulisi a
ja 1
:stä b
. (Eli ).
Kuvassa
Väli [0,1]
on esimerkkinä, koska ohjelmointikielten tyypillinen satunnaislukugeneraattori tuottaa lukuja puoliavoimelle välille [0,1[
, ja jatkossa meillä on tälle Skaalaa
-funktiolle käyttöä nimenomaan tuottamaan satunnaisia lukuja muillekin väleille.
Tehtävä B1. Matriisin suurin
- sisennykset
- ei oteta huomioon että voi olla minkä kokoinen matriisi vaan
Tehtävä B2. Suhteellisesti samat
M: 13. Ehtolauseet: Tehtävässä 5 vertailtiin lukujen absoluuttista suuruutta. Kuitenkin esimerkiksi 1000 ja 1100 ovat samoja 10% tarkkuudella, mutta eivät 0.1:n tarkkuudella. Usein voikin olla järkevä puhua suhteellisesta yhtäsuuruudesta absoluuttisen yhtäsuuruuden sijaan.
B3. GameOfLife
Tehdään edellisen demokerran sopulipelistä uusi graafinen versio, jossa on paljon ruutuja (suuruusluokkaa 60 y-suunnassa) ja sukupolvia lasketaan 0.1 sekunnin välein.
Voit kokeilla tavoiteltua lopputulosta (jossa mukana myös Guru-tehtävien toiminnot, bonustehtäväksi riittää, että näytössä pyörii sukupolvia alkuperäisen arvonnan mukaan) seuraavasti:
- Hae bin hakemiston kaikki tiedostot johonkin hakemistoon.
- Avaa GameOfLife.txt ja lue siitä käyttöohje. Kuuntele mahdollisesti samalla luennon 12 vastaavan tehtävän selitykset.
- Käynnistä
GameOfLife.exe
ja käytä ohjeiden mukaan. Tämä.exe
toimii vain osassa Windowseissa (XNA asennettu), muut (ja Win myös) voivat kokeilla JavaScript-versiota.
Oman graafisen version tekeminen:
- Luo uusi Fysiikka-peli nimelle
GameOfLife
. - Kirjoita luokkaan alla oleva koodi
- Lisää projektiin edellisen demokerran Sopulit.cs:
- kopioi tiedosto samaan paikkaan kuin projektin muut .cs tiedostot
- Solution Explorerissa paina hiiren oikeata projektin nimen päällä
Add/Existing Item
- valitse lisättävä tiedosto ja
Add
- lisää omaan .cs tiedostoon alkuun (tässä esimerkissä)
using Demo5;
- tällöin kääntäjä tietää, että esim kutsut:
Sopulit.Arvo(sukupolvi, 0, 1); Demo5.Sopulit.Arvo(sukupolvi, 0, 1);
- ovat samoja.
- Ideana on, että luodaan näyttöön suuri määrä mustia neliöitä (
oliot
-taulukko). Kun on uuden sukupolven aika, lasketaan uusi sukupolvi valmiilla demo5:n aliohjelmalla. Sitten sukupolvi-taulukon mukaisesti käydään muuttamassa jokaisen vastaavassa paikassa olevan neliön väri mustaksi tai valkoiseksi. - Täydennä aliohjelmat (ja metodit) em. tavalla.
Koodipohjaa uudelle pelille:
H1. Harjoitustyöhön jokin viikon luentoihin liittyvä ominaisuus
Jatkossa on aina tehtävä H1, 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.
Pyydetty linkki esim. muodossa:
https://gitlab.jyu.fi/oma_kayttajatunnus/ohj1ht
G1. Parannettu GameOfLife
Täydennä GameOfLife (ks. B3) siten, että voit Delete-napista tyhjentää kentän ja sitten hiirellä klikkailla päälle ja pois ruutuja. Hiiren klikkaus pysäyttää aina animaation ja sitten voi rauhassa rakentaa haluamansa kuvion (ks: Bitstorm ja Wikipedia) ja sitten laittaa Enter-nappulalla animoinnin uudelleen käyntiin. Välilyönti arpoo kokonaan uuden alkutilanteen.
G2. Toiston poisto
StringFormat.cs-esimerkissä on paljon copypaste-koodia. Muotoiluesimerkin muuttaminen vaatisi paljon muutoksia koodiin, samoin esimerkkinumeroiden. Tee ohjelma, jossa on yhdessä taulukossa muotoiluesimerkit ja toisessa käytetyt numerot ja sitten itse ohjelman (mahdollisten aliohjelmien kanssa) toteutus perustuu vain näiden kahden taulukon käyttöön. Nyt muotoiluesimerkin muuttaminen on vain yksi muutos yhdessä paikassa. Samoin kuin yhden esimerkkinumeron muuttaminen tai jopa lisääminen.
PP 1
PP-tehtävät on kertaavia tehtäviä.
M: 16. Toistorakenteet.
Taulukoita.cs - täällä on iso joukko taulukoita käyttäviä aliohjelmia malliksi (esim TulostaTaulukko
).
Tee aliohjelma, joka tulostaa lukujen neliöitä seuraavan esimerkin mukaisesti:
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
6 * 6 = 36
7 * 7 = 49
8 * 8 = 64
9 * 9 = 81
10 * 10 = 100
PP 2
M: 12.7 Char-luokka, 16. Toistorakenteet.
Tee aliohjelma, joka tulostaa parametrina annetusta merkkijonotaulukosta vain ne sanat, jotka alkavat isolla alkukirjaimella.
Esimerkiksi taulukosta
["kissa", "Kana", "Koira", "hevonen", "Vuohi"]
Tulostuu vain
Kana
Koira
Vuohi
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.