The referenced paragraph does not exist.
The referenced paragraph does not exist.

Demo 10

Palauta viimeistään ma klo 11:59.

Ajankäyttösi tällä viikolla

Tunnit resetoitu 12.3. klo 14:15. Laitathan tuntisi uudestaan.

Työtuntien kirjaamisesta saa 0.5 demopistettä. Aseta pisteesi Set Custom Points -toiminnolla.

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

# d10tunnit


Huomautus tehtävien pisteytyksistä

PP6, perjantai 17.3.

PP-tehtävät (näistä saa pisteitä vain käymällä perjantain PP-ryhmässä. Tulevan perjantain PP-tehtävät jaetaan perjantaina.) Mitä ovat PP-tehtävät?

Oppimistavoitteet

Tämän demokerran jälkeen

  • muistat mitä rekursio tarkoittaa ja miten tehdään rekursiivinen funktio
  • osaat soveltaa silmukoita kombinaatiotehtävään
  • olet tutustunut poikkeuksiin (Exception) ja poikkeusten käsittelyyn

Tehtävä 1-2*

M: 22. Rekursio.

Katso mallia rekursiivisesta kolmion piirtämisestä. Tee mallia muokaten ohjelma, joka piirtää alla olevan kuvan kaltaisen puun rekursiivisesti.

Anna itsellesi enintään 2 pistettä Set custom points -toiminnolla.

HUOM : Jos tehtävä ei aukea, älä aloita tällä tehtävällä, vaikka se periaatteessa onkin helppo.

# RekursioPallod10

Saakos tästä pisteitä ollenkaan ajamalla? Tulee samanlainen kuva kuin mallissa kuitekin.

14 Mar 18 (edited 14 Mar 18)

Miksi koodi ei toimi TIM:issä, vaikka se tuottaa halutun kuvion VS:ssä? VS sallii 5 parametria GameObjectille, mutta TIM:issä tästä tulee virheilmoitus?

18 Mar 18

Hyvä alkukulma piirtämiseen on vaikkapa pi/2 (saat piin arvon kirjoittamalla Math.PI). Pallon säteeksi voit antaa vaikka 100. Kokeile vaihdella suuntaa ja sädettä muuttavia vakioita ja katso miten ne vaikuttavat kuvaan. Huom! Tässä ei piirretä Canvakselle, vaan tehdään ihan "normaaleja" GameObject-olioita.

Tehtävä 3

M: 23. Dynaamiset tietorakenteet. Tee lotto-ohjelma, joka arpoo 7 numeroa ja 3 varanumeroa 39:stä.

Mihin tuota sekoitusalgoritmia tarvitaan, jos tarkoitus on arpoa numerotmuutenkin?

14 Mar 18

Kun lisään jypeli.dll:n Referensseihin, ja yritän ajaa ohjelman, tulee virhe The primary reference "Jypeli" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client".

14 Mar 18 (edited 14 Mar 18)

Ei välttämättä mihinkään. Tässä kuitenkin annetaan aika vapaat kädet, et miten tuollaisen ohjelman toteuttaa.

15 Mar 18

Sain myös saman virheen kun koitin lisätä jypeli.dll:lää.

18 Mar 18
# lottod10

Sotkemisen voit tehdä myös lisäämällä projektin referensseihin Jypeli.dll:n ja sitten

Jypeli.RandomGen.Shuffle(pallot);

Tai voit ottaa Demo 9 vastauksista valmiin sekoitusalgoritmin ja käyttää hieman muutettuna sen Shuffle-aliohjelmaa.

Tehtävä 4-5. n yli k

M: 16. Toistorakenteet. Erilaisten 7 numeroa sisältävien lottorivien määrä saadaan binomikertoimen kaavasta: Katso: http://fi.wikipedia.org/wiki/Kombinaatio.

\[\binom {39}{7} = \frac {39!}{7! * (39-7)!} = \frac{33*34*35*36*37*38*39}{ 1*2*3*4*5*6*7} = 15380937\]

Tulos voidaan laskea käyttämällä long -tyyppisiä lukuja. Tee funktio

long NYliK(int n, int k) 

jonka kutsulla

NyliK(39, 7)

saat mainitun tuloksen. Tulosta ei voi laskea keskimmäisestä kaavasta 2, koska \(39!\) ylittäisi reilusti pitkienkin (long) kokonaislukujen lukualueen.

Vinkki: Tässä tehtävässä ei tarvita listoja tms., pelkästään kerto- ja jakolaskuja sekä silmukoita. Vastaus saattaa olla nätimpi, jos avuksi kirjoittaa yhden pienen aliohjelman.

# kombinaatiotd10

Tehtävä 6

M: 24. Poikkeukset. Kirjoita funktio MuutaJono(String s, double oletus), siten, että seuraava ohjelma toimii:

# poikkeuksetd10
Plugin csPlugin error:
Invalid markup: {'lazy': [['Not a valid boolean.'], {'_schema': ['Invalid input type.']}]}

Vinkki Jos kotikoneesi asetukset ovat suomalaisittain, olettaa että Double.Parse-metodi ottaa argumentiksi erotinmerkiksi pilkun. Timissä erotinmerkkinä on piste. Jos haluat omalle koneellesi pisteen erotinmerkiksi, laita Parse-metodin argumentiksi:
new System.Globalization.CultureInfo("en-US")

Tämä funktio yrittää siis poimia annetusta merkkijonosta liukuluvun (double) ja palauttaa sen. Mikäli tämä ei onnistu, palauttaa se oletusarvon. Funktiolle on oikeassa elämässä käyttöä koska käyttäjältä saatu syöte on aina merkkijono ja se pitää pystyä muuttamaan reaaliluvuksi laskemista varten. Tuo desimaalierotin on vaikeampi. Parse käyttää sitä erotinta, mikä on järjestelmään asetettu. Oikeasti pitäisi siis vielä osata tulkita oikealla tavalla riippumatta siitä, antaako käyttäjä pilkun vai pisteen. Tässä tehtävässä tuosta ongelmasta ei tarvitse välittää vaan riittää yllä olevaan esimerkkiin käsin vaihtaa piste pilkun tilalle jos järjestelmässäsi on piste desimaalierottimena (C#-koodin vakioissahan se on aina piste).

Kun toteutat funktiota MuutaJono, käytä hyväksi double-luokan funktiota double.Parse ja sitä, että jos muuttaminen ei onnistu, Parse heittää poikkeuksen.

V1

Tee Ville-tehtävät: 8.1-8.5. Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.

# villed10

TDD1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen. Voit antaa samassa tiedostossa palautetta ja kehitysehdotuksia Comtestin käytöstä.

Mikäli ComTest ei toimi yliopiston mikroluokissa, kokeile ensin asentaa ComTest-VS-plugin. Sitten tarkista, että ComTest haetaan oikeasta paikasta: Valitse Visual Studiossa Tools -> ComTest -> Options. Tarkista, että Path to ComTest.jar executable kentässä on N:\bin\ComTest.jar ja olet yhdistänyt koneesi N-verkkolevyyn. Kysy tarvittaessa ohjaajalta neuvoa.

ComTest-VS-Plugin linkki ei toimi.

14 Mar 18
# D10TDD1

B1-2


M: 25. Tietojen lukeminen ulkoisesta lähteestä.

Avaa sivu​ ja klikkaa sivun oikeasta yläkulmasta "Lataa Excel-tiedosto". Tallenna .csv-tiedosto koneellesi nimellä "valuutat.csv". Lisää Visual Studion projektiisi uusi tiedosto klikkaamalla projektin nimen päällä hiiren kakkosnäppäimellä Add -> Existing Item). Laita tiedosto myös kopioitumaan bin-hakemistoon klikkaamalla tiedoston päällä hiiren oikealla -> Properties -> Copy to output directory -> Always copy. Tiedosto voidaan nyt lukea seuraavasti: Lisää ensin Using-lauseisiin lause

using System.IO;

"The page is moved" Mitäs nyt?

14 Mar 18

Nordea's site has been changed. FYI the new link: Data on the new site of Nordea

17 Mar 18 (edited 17 Mar 18)

Tiedosto näyttää kutakuinkin tältä

EUR,000001.000000,000001.000000,000001.000000,09/03/2016,11:59
USD,000001.097040,000001.077540,000001.116540,09/03/2016,11:59
JPY,000123.352000,000120.752000,000125.952000,09/03/2016,11:59

Voit poistaa tiedostosta turhat tiedot: 09/03/2016,11:59. Muista shift + alt + nuolinäppäin -yhdistelmä. Halutessasi voit vaihtaa tietojen erotinmerkiksi myös jonkin muun kuin pilkun. Seuraavassa on poistettu ylimääräiset tiedot ja vaihdettu välimerkiksi välilyönti.

EUR 000001.000000 000001.000000 000001.000000
USD 000001.097040 000001.077540 000001.116540
JPY 000123.352000 000120.752000 000125.952000

Sitten Main-pääohjelmaan (tai johonkin muuhun aliohjelmaan)

string[] valuuttalista;
try
{
    valuuttalista = File.ReadAllLines("valuutat.csv");
}
catch (IOException ex)
{
    Console.WriteLine("Virhe: " + ex.Message);
    return;
}

Pyydä käyttäjältä jokin valuuttatunnus, ja tulosta annetun valuutan tiedot ruudulle. Ohjelma päättyy, kun käyttäjä antaa tyhjän syötteen. Vinkki: String.Split

Huomaa että TIMissä pitää varautua myös siihen, että lukemisesta voi tulla null:

            string komento = Console.ReadLine();
            if ( komento == null || komento.Equals("") ) break;

Kirjoita tähän tekemäsi tiedosto ja tallenna ennen kuin yrität käyttää sitä ohjelmassa.

# valuutattxtd10
# valuutatd10

B3

Tutki miten C#:issa toimii BigInteger -luokka ja tee NYliK(int n,int k) sen avulla. Tee siis tehtävää 4 vastaava toteutus erityyppisellä kokonaisluvulla. Jos jossakin sanotaan että Assembly XXX.dll, niin tuon Assembly voi joutua lisäämään projektiin hiiren oikealla ja Add Reference ja sitten kohta .NET.

Täysiin pisteisiin vaaditaan omat testit.

# bigIntegerd10

Testit menee läpi Visual Studiossa. Täällä Ei. Ensimmäiseen testiin sanoo: #- Expected: 2 #- But was: 2

15 Mar 18

G1-2

Tutki miten C#:ssa voidaan lukea syötettä WWW-osoitteesta ja tee tehtävä B1-2 niin, että tiedot luetaan suoraan netistä.

# valuutatNetistad10

G3-4

PNS: Pienimmän neliösumman sovitus on eräs tapa laskea eräänlainen "keskiluku" tai trendi aineistolle. Esimerkiksi meillä on havaintopisteitä, joiden periaatteessa pitäisi muodostaa "suora". Laskemalla PNS-suoran (y = a + bx) kertoimet a ja b voimme piirtää aineistoa parhaiten kuvaavan suoran. Katso http://mathworld.wolfram.com/LeastSquaresFitting.html kertoimien laskukaavat (12) ja (14) ja tee ohjelma, joka piirtää aineiston ja sitä kuvaavan PNS-suoran. Aineisto piirretään tämän pohjatiedoston: Kuvaaja.cs avulla, eli voit käyttää siellä olevaa koodia pohjana itse aineiston piirtämiseen. Suora piirretään Paint -metodissa kutsumalla canvas.DrawLine-metodia. Esimerkki: pns.png (tuossa Javalla tehdyssä kuvassa pallot eivät ole täytettyjä, sitä ei tarvitse yrittää).

Not Found The requested URL /ITKP102/2016s/demovast/demo7/Kuvaaja/Kuvaaja/Kuvaaja.cs was not found on this server. Apache/2.2.15 (Red Hat) Server at kurssit.it.jyu.fi Port 443

16 Mar 18
# PNSd10

G5-6

Euler problem 67. Laskun pitää mennä alle minuuttiin. Yksi lisäpiste jos lasku menee "erittäin nopeasti" (luokkaa millisekunteja.)

# treetxtshort
# treetxt
# euler

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.