The referenced paragraph does not exist.

Demo 3

Palauta demot ma 1.2.2016 klo 11:59 mennessä.

Tästä demosta eteenpäin ohjelmointitehtävät tehdään Visual Studiolla. Pyydä apua jos et ole vielä tähän mennessä saanut asennettua Visual Studiota, XNA:ta tai Jypeliä (tai Xamarin/MonoDevelopia).

Huomio ohjauksissa kävijät: Ota ohjauksiin aina kynä ja paperia!

Oppimistavoitteet

Tämän demokerran päätteeksi

  • osaat tehdä funktion, joka ottaa vastaan parametrin ja palauttaa arvon
  • ymmärrät, mitä tarkoittaa funktion kuormittaminen (function overload)
  • osaat nimetä muuttujat ja aliohjelmat kuvaavasti
  • osaat tehdä erilaisia laskutoimituksia 2-järjestelmän kokonaisluvuilla ja tulkita laskujen lopputuloksia

Sanalliset tehtävät

Tehtävä 1

M: 26.4 Negatiiviset binääriluvut

Useimmiten nykytietokoneissa käytetään negatiivisille luvuille niin sanottua kahden komplementtia. Eli positiivinen luku muutetaan negatiiviseksi muuttamalla kaikki bitit päinvastaisiksi ja sitten lisäämällä saatuun lukuun 1. Esimerkiksi:

 3 = 0000 0011
-3 tehdään seuraavasti:
     1)  kaikki bitit päinvastoin = 1111 1100
     2)  +1                       = 1111 1101

Vastaavasti kun lukua muutetaan "ihmismuotoon", katsotaan sen ensimmäinen bitti ja jos se on 1, niin kyseessä on negatiivinen luku ja se muutetaan positiiviseksi ottamalla siitä kahden komplementti (kaikki bitit päinvastoin ja +1). Tällöin tulostuksessa tulostetaan ensin -merkki ja sitten itse luvun arvo. Esimerkiksi jos meillä on binääriluvut 0010 1101 ja 1101 1111 ja ne pitäisi tulkita, niin tulkinta aloitetaan seuraavasti:

0010 1101 luku on positiivinen, eli 45
1101 1111 luku on negatiivinen, siis ensin 2:n komplementti
           0010 0000 + 1 = 0010 0001 = 33, eli tulos on -33
# d3teht1abcd

Muistinumero eli ?

Eli esimerkiksi

    1 
  0001
+ 0001
27 Jan 16 (edited 28 Jan 16)
31 Jan 16 (edited 31 Jan 16)

Tämä tehtävän ohjeet ovat mielestäni aika epäselvät

31 Jan 16 (edited 31 Jan 16)

Samaa mieltä. Vastauksista ei tule pisteitä.

01 Feb 16

Missä formaatissa olisi pitänyt vastata ja mihin olisi pitänyt muistinumerot laittaa?

01 Feb 16

Esim. c-kohdassa vastaus näyttäisi olevan oikein, mutta pisteitä ei herunut. Ilmeisesti TIM ei ymmärtänyt muistinumeroita?

02 Feb 16

Kirjoita vastauksesi alla oleviin e)- ja f)-kohtiin muodossa

a) 11-22 = -33
# d3teht1e

Kirjoita vastauksesi muodossa "11-22= -33"?? Siis myös kohtaan 1e, missä vain positiiviset luvut käytössä?

29 Jan 16

Tässäkin on nyt jotain mätää

29 Jan 16

e-kohtaan vain positiivisia lukuja. Pointti tuossa oli lähinnä se, että f-kohdan vastaukset ei kelpaa muodossa 11+(-22) = 33, eli sulkuja ei saa käyttää.
/SR

29 Jan 16
# d3teht1f
# d3teht1g
# d3teht1h
# d3teht1i
# d3teht1j

Tehtävä 2

M: 7. Muuttujat. Miten esittelisit (tyyppi ja nimi) muuttujat seuraavia tilanteita varten. Anna myös esimerkki miten sijoittaisit muuttujalle jonkin arvon.

a) Työmatkan pituus polkupyörällä
b) Suoritettujen opintopisteiden määrä 
c) Koko tutkinnon laajuus opintopisteissä
d) Tehtyjen demojen lukumäärä 
e) Kirjan ensimmäinen kirjain
f) Sadan metrin juoksun voittajan aika.
g) 3 kuukauden euribor-korko
h) euron markka-muuntokerroin
# d3teht2

Tehtävä 3

M: 7. Muuttujat. Arvostele seuraavat muuttujien tyypit ja nimet. Ovatko syntaktisesti oikein? Entä ovatko hyviä valintoja:

int mansikanKiloHinta;
double default;
char omaNimi;
double metriMm;
double tuntejaVuorokaudessa;
real nopeus;
boolean AuringonEtäisyys;
ulong kuukaudenKeskiLampo;
int kissoja,2_kanaa,kolmeKoiraa;
int i, j, l, I;
# d3teht3

Console Application -tehtävät

Avaa Visual Studio, aloita uusi projekti ja valitse C# \(\rightarrow\) Jypeli \(\rightarrow\) ConsoleMain (tai C# \(\rightarrow\) Console application jos et ole asentanut Jypeliä). Nimeä projektisi esimerkiksi Muunnos, ja nimeä myös luokan nimeksi Muunnos.cs, jos Visual Studio ei sitä automaattisesti nimeä. Kirjoita ohjelmakoodisi Muunnos.cs-luokkaan. Muistathan edelleen, että yliopiston tietokoneilla ohjelmien ajaminen onnistuu vain kansiosta C:\MyTemp.

Huom! Oletusarvoisesti konsoli-ikkuna sulkeutuu välittömästi ohjelman päätyttyä. Näin kuuluukin tapahtua. Konsoli-ikkunan saa jäämään näkyviin, kun lisätään pääohjelman viimeiseksi riviksi:

Console.ReadKey();

Kannattaa huomata että tämä on "ylimääräinen" rivi, joka ei oikeastaan kuulu ohjelmaan. Sen takia tätä riviä ei saa jättää lopullisiin ohjelmiin, ja fiksumpaa onkin kirjoittaa

#if DEBUG
  Console.ReadKey();
#endif

jolloin tuota viimeistä näppäimenpainallusta jäädään odottamaan vain siinä tilanteessa että ohjelma ajetaan Debug-tilassa Visual Studiosta.

Tehtävä 4

M: 9. Aliohjelman paluuarvo. Katso netistä miten fahrenheitit muunnetaan celsius-asteiksi. Kirjoita (funktio-)aliohjelma jota voidaan kutsua seuraavasti:

double lampotilaC;
lampotilaC = FahrenheitToCelsius(13);

Paina tehtävissä olevien vastauslaatikoiden alareunassa olevaa Näytä koko koodi linkkiä, niin näet miten funktioita kutsutaan.

Huom! Saadaksesi täydet pisteet a- ja b-kohdasta sinun täytyy seuraavat asiat:

  1. Aja koodi (0.3 p). Tämä onnistuu painamalla vastauslaatikon alla olevaa Aja-painiketta.
  2. Tee testit (0.1 p). A- ja b-kohtaan on tehty valmiiksi testejä, jotka varmistavat, että funktio toimii kaikenlaisilla parametreillä. Testit voi ajaa painamalla Test-painiketta.
  3. Generoi dokumentaatio (0.1 p). Tämän voi tehdä painamalla vastauslaatikon alareunassa olevaa Document linkkiä.

Kohdista a ja b saa 0.5 pistettä, eli yhteensä 1 piste.

Jos teet Visual Studiossa, niin kopioi vastauslaatikkoon vain funktion esittelyrivi ja toteutus. Pääohjelma, kommentit ja testit on jo TIM versiossa valmiiksi mukana.

# d3teht4a

Kirjoita vastaava funktio, joka muuntaa mailit kilometreiksi:

# d3teht4b

Mielestäni käytän oikeaa muunnoslukua eli 0.62137, testi antaa väärän tuloksen jonku desimaalin tarkkuudella. Mitä muunnoslukua pitäisi käyttää? Ilmeisesti 0-6213711922

31 Jan 16 (edited 31 Jan 16)

Käytin itse tuolta koodista löytyvää 0.609344 suhdetta ja pisteet tuli

31 Jan 16 (edited 31 Jan 16)

Tehtävä 5

M: 7.7 Operaattorit (ja aritmeettiset lausekkeet). Määrittele sopivat muuttujat ja sijoita niihin alla olevaa kuvausta vastaava arvo. Käytä mahdollisimman vähän ns. literaaleja, eli koodiin kirjoitettuja kiinteitä lukuja. Kiinnitä huomiota muuttujien tyyppeihin ja nimeämiseen. Pelkkä Main()-pääohjelma riittää, tässä ei tarvitse kirjoittaa aliohjelmia.

Eikö tässä pitäisi olla linkki monisteen kohtaan 7.7 Operaattorit?

Korjattu. /AJL

31 Jan 16 (edited 01 Feb 16)
a) vuorokauden sekuntien lukumäärän
b) vuoden tuntien lukumäärän
c) kauanko valolla kuluu aikaa matkaan auringosta maahan 
   (keskietäisyydet riittävät).
d) valovuosi kilometreinä

Tulosta muuttujien arvot. Esimerkiksi tyyliin:

int tunnissaSekunteja = 60*60;
System.Console.WriteLine("Tunnissa sekunteja {0}", tunnissaSekunteja);

{0} tarkoittaa että siihen kohtaan tulostuu pilkun jälkeisen muuttujan arvo.

# d3teht55

Jypeli-tehtävät

Nämä tehtävät tehdään Visual Studion Jypeli-kirjastolla. Avaa Visual Studio, aloita uusi projekti ja valitse C# \(\rightarrow\) Jypeli \(\rightarrow\) FysiikkaPeli. Nimeä projektisi esimerkiksi Porras, jolloin Visual Studio luo automaattisesti Porras.cs luokan. Kirjoita koodisi tähän luokkaan. Huomaa, että Visual Studio luo automaattisesti myös Ohjelma.cs tiedoston, jota sinun ei tarvitse eikä pidä muokata.

Tehtävä 6

Lue aliohjelman kuormittamisesta (function overload), ja katso esimerkkikoodi.

M: 6. Aliohjelmat (Kuormittaminen). Ota Demo 2:n Portaat-esimerkki ja liitä koodi luomaasi luokkaan. Muokkaa koodia sellaiseksi, että PiirraNelio voidaan kutsua kahdella eri tavalla (eli on kaksi eri PiirraNelio-aliohjelmaa eri parametrimäärillä):

  1. Ilman "sädettä", eli piirtää aina neliön, jonka sivu on 80.
    PiirraNelio(this, 0, 0);

  2. Antamalla neliön "säde" (eli puolet sivun pituudesta, näin se on helpompi samaistaa ympyrään).
    PiirraNelio(this, 100, 0, 50); // neliö, jonka sivunpituus on 100.

Vinkki: Aloita tekemällä aliohjelmalla jota voidaan kutsua tavalla 2.

Vinkki: Aluksi Jypelin pääohjelman (Begin) tulisi pysyä muuttumattomana portaiden piirtämiseksi. Kun tämä toimii, muuta kuitenkin Begin-metodia vielä niin, että piirretään vähintään yksi erikokoinen neliö portaiden ulkopuolelle.

Siis mitä ihmettä tähän vastaukseen pitää liittää? Sellainen ohjelma, joka piirtää samat portaat, vai vain tehtävänannossa olevat neliöt?

30 Jan 16

Tehtävänanto tosi sekava, tein itse vain kaksi neliötä annetuilla parametreilla. En kuitenkaan saa kuin 0,9 pistettä vaikka kaikki pitäisi olla kunnossa? Portaiden tekemisellä ei ainakaan ole vaikutusta

31 Jan 16
# d3teht6

Muut tehtävät

Tauno 1 a (0.5 p)

Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.

Lisää aluksi Taunossa tulos-niminen muuttuja ja tee sitten Taunolla ohjelma, joka laskee tulos-muuttujaan parillisissa paikoissa olevien lukujen summa miinus parittomissa paikoissa olevien summa.

Pitääkö tässä nimenomaan laskea parittomien ja parillisten summat erikseen, kun toisaalta täytyy välttää apumuuttujia? Oikea lopputuloshan saadaan käyttämättä apumuuttujia..?

31 Jan 16
# summaparilisetmiinusparittomat

Tauno 1 b (0.5 p)

Lisää aluksi Taunossa tulos-niminen muuttuja aloitusarvolla 0 ja tee sitten Taunolla ohjelma, joka laskee yhteen taulukon luvut niin, että summa (ensimmäinen - viimeinen) + (toinen - toiseksi viimeinen) + jne... on lopuksi tulos-nimisessä muuttujassa.

Esimerkiksi taulukolla 5, 4, 6, 2, 9, 1 tulos olisi (5-1) + (4-9) + (6-2) = 3.


# summaajokotoinen

Onnistuin rikkomaan testiohjelman. Se olettaa ettei käsittelyfunktio muokkaa taulukkoa. Tyhmä ohjelma...

27 Jan 16

Ville 1

Tee Ville-tehtävät: 3.1, 3.2, 3.4, 7.1 - 7.6.

Muista: Villen käyttöohje.

Palauta tehtävä kirjoittamalla alla olevaan tekstilaatikkoon mitä opit ja mitä mieltä olit tämän kerran Ville-tehtävistä ja auttoivatko Ville-tehtävät sinua yhtään. Muutama rivi riittää.

# VilleV1

B1

Katso Voimia ja sitominen. Tee ohjelmasta sellainen, että voit "pukkailla" keskipalloa nuoli vasemmalle ja nuoli oikealle näppäimillä. Tehtävä kannattaa tehdä Visual Studiolla. Kopioi tekemäsi koodi alle ja paina aja-nappia.

# d3bonus1

G1-2

Jatketaan demo 2 tehtävää 4. Tee ohjelmasta sellainen, että se piirtää viiden laatikon sijaan n laatikkoa, vieläpä siten, että laatikot pienenevät. Tällöin i:nnen laatikon koko tulisi olla

(n + 1 - i) / n * laatikonKoko

eli esimerkiksi jos halutaan piirtää yhteensä 10 laatikkoa, niin 7:nnen laatikon koko on

(10 + 1 - 7) / 10 = 4 / 10 * laatikonKoko

Tästä laskuesimerkistä puuttuu sulut (vrt. kaava).

Korjattu. /SR

29 Jan 16 (edited 29 Jan 16)

Tehtävässä saa 0,1p dokumentaation katsomisesta. Sen voi tehdä painamalla document-linkkiä.

# d3guru12

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