Sinun UserID: 0

```

Palautus viimeistään: klo 11:00 ma 10.10.
Katso luennot-sivulta luennot 11 ja 12.

Ilmoittaudu missä ryhmässä (zoom) 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
  • Please to interact with this component.

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

    Ma 16-18 Zoomista
  • 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ä.
# aikajana
Tiedot päivittyvät tunnin välein. Viimeksi:

Please to interact with this component.

{}


Viikko 35
26.8.
36
2.9.
37
9.9.
38
16.9.
39
23.9.
40
30.9.
41
7.10.
42
14.10.
43
21.10.
44
28.10.
45
4.11.
46
11.11.
47
18.11.
48
25.11.
Luennot 1&2 3&4 5&6 7&8 9&10 11&12 13&14 15&16 17&18 19&20 21&22 23&24
Tärkeät ti: bonus
pe: HT1
Väli-
kysely
pe: Debug-
näyte

ti: bonus
pe: HT2
ti: bonus
pe: HT3
Tentti
pe: 2.12
dh 1 2 3 4 5 6 7 8 9 10 11 Summa %
Demot

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.

{}

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.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Please to interact with this component.

{}

Korjattu

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.

{}

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.

{}

Please to interact with this component.

{}

Tunnit

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.

{}

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.

{}

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.

{}

Ohjelmointi 1, s 2022 / 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 maanantaina 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.

# vdr1
# vdr2

Oppimistavoitteet

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

# Oppimistavoitteet

Palautus

Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.

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

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 (=zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) 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: Plugin numericfield error: Task id refers to another document, but you do not have access to that document.

# vaikeaa

Edellisten demojen vastausten korjaaminen E1 (pakollinen)

# korjattu

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

Itsearvio A1 (vapaaehtoinen)

Video 1

Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 22 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.

# video1

TDD-pohja

Tässä voit testata ohjelmiasi jos ComTest ei toimi koneellasi

# ComTestPohjaCSx

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

    /// <summary>
    /// Aliohjelmalla ...
    /// </summary>
    /// <param name="???">?????</param>
    /// <returns>???</returns>
    /// <example>
    /// <pre name="test">
    ///   FunktioNimi(Parametrit) === tulos;
    /// </pre>
    /// </example>

Muista, että reaalilukuja testataan eri tavalla kuin muita tyyppejä!

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.

# kysely

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.

# video0

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.

# kaannataulukko
# vaihdajokatoinen

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

# taunoOppi

Tauno 2*

# v2
# sopulitaulukko

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.

  1. 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).
# tauno62
  1. 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 ja ix siten, että minkä tahansa ei-reunassa olevan ruudun naapurit voidaan laskea. Esimerkiksi tämän tehtävän kohdan 1 vastauksen 1. rivi olisi n += sukupolvi[iy-1,ix-1];. HUOM! Älä merkitse pelkkä iy vaan iy+0.
# tauno622
  1. (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 muotoon n += sukupolvi[iy+y,ix+x]; niin, että ennen riviä muutat indeksejä x ja y siten, että seuraavalla rivillä viitataan samaan paikkaan kuin ennen muuttujien x ja y käyttämistä, eli kuten Tauno 2.2 kohdassa. Muuttamiseen saat käyttää vain lauseita x++, x=-1, y++. Älä kirjoita näitä lauseita hakasulkeiden sisään, vaan omille riveilleen.
# tauno623

Koodi toimii VS:ssa mutta kuin sen ajoi tässä, tulos oli aivan jotain muuta kuin pitäisi. Koodia muuttamatta testien ajo kuitenkin meni odotetusti läpi.

VL: Katso pääohjelma: se eitulosta joka pisteen naapureita, vaan tietyt valitut.

08 Oct 22 (edited 08 Oct 22)
  1. (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).
# tauno624
# taunoOppi2

Ville 1

Tee Ville-tehtävät: 5.6-5.8,9.4-9.6. Villen käyttöohje.

# villev1

Tehtävä 1. Aliohjelman esittely

# v3

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

Oljenkorsi 1: Tynkiä

# esittely_a

muuttuja onko on yllä määritelty boolean arvoksi, mutta jos laitan aliohjelman palauttamaan esim. true, tulee seuraavanlainen virhe: "cannot implicitly convert type 'System.Text.StringBuilder' to 'bool'" mitä tuolle siis tulisi tehdä?

VL: Minkä tyyppiseksi olet esitellyt funktiosi?

10 Oct 22 (edited 10 Oct 22)
# esittely_b
# esittely_c
# esittely_d
# esittely_e

Yleisiä virheitä, katso onko sinulla

Tehtävä 2*. Itseisarvo ja etäisyys

# v4

M: 13. Ehtolauseet. Kirjoita ilman minkään valmiin funktion (ei esim. Math.Abs) käyttöä funktioaliohjelma jota voi kutsua muodossa

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.

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

# itseisarvo

Miksi näyttää siltä, etten olisi kirjoittanut testejä, vaikka mielestäni olen? Compile error itseisarvo.cs || skipped: no tests error CS2001: Source file '/home/agent/itseisarvoTest.cs' could not be found.001 using System;

VL: Siihen name= ei saa mennä akojamaan, siinäpitää lukea se "test".

12 Oct 22 (edited 12 Oct 22)

Yleisiä virheitä, katso onko sinulla

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.

# etaisyys

Miksi tässä "ajo" menee läpi, mutta testissä herjaa näin?: " Compile error etaisyys.cs => etaisyysTest.cs ok etaisyysTest.cs(17,78): error CS1026: ) expected001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 004 using System.Text; 005 006 public class Keskiluku 007 { 008 public static void Main() 009 { 010 double etaisyys = Etaisyys(3.2, 8.5); 011 Console.WriteLine(etaisyys); 012 013 } ... " using System; rivi kuitenkin näkyy koko koodissa ensimmäisenä.

VL: Nyt en ymmärrä? Kääntyyhän tuo sun koodi tuossa? Ei kun nyt ymmärsin, siis testeissä tulee vika.
Sulla kutsutaan testeissä tuota kolmella, jopa neljällä parametrilla useammassakin kohtaa. Millä parametrit erotellaan?

Joo, olipa ankea moka. Kiitos vastauksesta, nyt toimii!

05 Oct 22 (edited 06 Oct 22)

Yleisiä virheitä, katso onko sinulla

Tehtävä 3. Miidi ja EtsiLahin

# v5

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:

  1. Harjoittele halutessasi lähimmän alkion etsimistä alla olevalla Tauno-tehtävällä.
  2. Kopioi luentojen esimerkin Summa-funktio ja tee siitä double-luvuilla toimiva versio. Tämän avulla voit laskea keskiarvon.
  3. 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ä.
  4. Lopuksi Miidi syntyy keskiarvon ja lähimmän etsimisellä parilla rivillä.

Oljenkorsi 1: Käytä Taunoa

Oljenkorsi 2: Täh?

# miidijaetsilahin

Yleisiä virheitä, katso onko sinulla

Tehtävä 4. Pisteiden välinen etäisyys

# v6

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 euklidisen (eli tuon meidän parhaiten ymmärtämän) etäisyyden.

Laita omiin testeihin vähintään 6 oikeaa desimaalia! Tietysti ei tahallaan kannata laittaa etäisyyksiä jotka eivät ole päättyviä desimaalilukuja :-)

Oljenkorsi 1: Miten lasketaan

# euklidinenetaisyys

Yleisiä virheitä, katso onko sinulla

Tehtävä 5. Reaalilukujen vertaaminen

# v7

M: 13. Ehtolauseet. Reaalilukuja ei (erittäin harvoja erikoistilanteita lukuun ottamatta) saa verrata == -operaattorilla.

# samat

Samat–funktion ideana on siis se, että jos kaksi lukua ovat "riittävän" lähellä toisiaan, palautetaan true, muuten false. Esimerkissä "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).

Yleisiä virheitä, katso onko sinulla

Tehtävä 6. Skaalaa

# v8

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.

Oljenkorsi 1, Mitä tarkoittaa

Oljenkorsi 2, valmis kaava

Oljenkorsi 3, Miksi?

# skaalaa

Tehtävä B1. Matriisin suurin

# matriisinsuurin

Yleisiä virheitä, katso onko sinulla

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.

# suhtsamat

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.

# v1

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:

  1. Hae bin hakemiston kaikki tiedostot johonkin hakemistoon.
  2. Avaa GameOfLife.txt ja lue siitä käyttöohje. Kuuntele mahdollisesti samalla luennon 12 vastaavan tehtävän selitykset.
  3. 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:

  1. Luo uusi Fysiikka-peli nimelle GameOfLife.
  2. Kirjoita luokkaan alla oleva koodi
  3. 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.
  4. 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.
  5. Täydennä aliohjelmat (ja metodit) em. tavalla.

Koodipohjaa uudelle pelille:

# gameoflife

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
# harkkaominaisuus

G1. Parannettu GameOfLife

# v1

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.

# gameoflifebetter

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.

# toistonpoisto

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
# neliot

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
# isollaAlkavat

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.