wiki:k2015/demot/demo3
Last modified 2 years ago Last modified on 2015-01-29 11:36:32

Demot » Demo 3, 2.2.

Palauta demot ma 11:59 mennessä kurssin NettiDemoWWW:llä.

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 (sekä XNA:ta ja Jypeliä).

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

Sanallisissa tehtävissä ei tarvitse ohjelmoida, ja tehtävä palautetaan tekstitiedostona (esimerkiksi t1.txt). Mikäli kuitenkin lähdekoodin (.cs-päätteinen tiedosto) palauttaminen tuntuu luontevammalta, voit palauttaa myös sen.

Tehtävä 1

M: 26.4 Negatiiviset binääriluvut: Oletetaan että meillä on olemassa vain 8-bittisiä lukuja. Siihen tilaan on siis myös laskutoimituksen tuloksen mahduttava. Laske yhteen kunkin kohdan allekkain olevat binääriluvut muistinumerot kirjoittaen (myös vasemmanpuoleisesta parista ulos lähtevä muistinumero 1 tai 0).

a)             b)            c)             d)
   0101 1111      0101 1111      0000 0001     1111 1111
   0001 1111      0101 1111      1111 1111     1111 1111

Huom! Tässä siis nuo välistykset ovat vain selvyyden vuoksi. Kaikki luvut ovat 8-bittisiä lukuja.

Vinkki! Linkissä nelibittisiä lukuja esitettynä binäärijärjestelmässä

Tulkitse kohtien a) - d) summattavat luvut ja summat

e) kun 8-bitin koneessa on vain positiiviset luvut käytössä 
f) kun 8-bitin koneessa on negatiivisille luvuille käytössä 
   2-komplementti
g) Mitkä tulokset olivat oikeita e)-kohdan tapauksessa
h) Mitkä tulokset olivat oikeita f)-kohdan tapauksessa
i) Anna esimerkki missä kahden negatiivisen luvun summa olisi
   positiivinen 8-bitin koneessa jossa negatiiviset luvut esitetään
   2:n komplementtina.
j) Anna laskemiesi lukujen ja "virheellisten" tulosten ja
   muistinumeroiden perusteella sääntö siitä, milloin tuloksen
   voi todeta olevan oikein ja milloin väärin.

Vinkki.

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

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;

Console Application -tehtävät

Avaa Visual Studio, aloita uusi projekti ja valitse C# -> Jypeli -> ConsoleMain (tai C# -> 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ä. Konsolin saa näkyviin, kun lisätään pääohjelman viimeiseksi riviksi:

Console.ReadKey();

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);

Kirjoita vastaava kutsu funktiolle joka muuntaa mailit kilometreiksi. Kirjoita myös tuo funktio. Muista kirjoittaa aina asianmukaiset kommentit aliohjelmiin!

Tehtävä 5

M: 7.5 Operaattorit (ja aritmeettiset lausekkeet). Kirjoita lausekkeet, joilla lasket muuttujiin, joille olet valinnut hyvät nimet, alla luetellut arvot. Tehtävässä ei tarvita aliohjelmia:

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.

Jypeli-tehtävät

Nämä tehtävät tehdään Visual Studion Jypeli-kirjastolla. Avaa Visual Studio, aloita uusi projekti ja valitse C# -> JYPELI -> 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 monisteen täydennys kuormittamisesta (function overload), ja katso mallikoodi. Tästä on apua demo 3 tehtävään 6.

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ä). Muista kommentointi!

a) Ilman "sädettä", piirtää aina neliön, jonka sivu on 80  
   (parametrina siis keskipisteen koordinaatit) 
      PiirraNelio(this, 0, 0);
b) antamalla neliön "säde" (eli puolet sivun pituudesta, näin se 
   on helpompi samaistaa ympyrään) koko    
      PiirraNelio(this, 100, 0, 50); // neliö, jonka sivunpituus on 100.

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

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.

Muut tehtävät

Tauno 1

Tee Taunolla- seuraavat tehtävät:

  1. Taulukon parillisissa paikoissa olevien lukujen summa miinus parittomissa paikoissa olevien summa
Esim:
  5 4 6 2 9 1 => (5-4) + (6-2) + (9-1) = 13
  1. Taulukon summa (1. - viimeinen) + (2. - toiseksi viimeinen) jne...

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

Taunojen palautus: Kopioi Taunon tekemä "koodi" tiedostoon tauno.txt. Kirjoita vielä tiedoston perään lyhyesti, että mitä opit Taunolta. Muista, että Tauno on vielä prototyypin prototyyppi.

Ville 1

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

Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.

B1

Katso Voimia ja sitominen. Tee ohjelmasta sellainen, että voit "pukkailla" keskipalloa nuoli vasemmalle ja nuoli oikealle näppäimillä.

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

https://trac.cc.jyu.fi/projects/ohj1/raw-attachment/wiki/k2013/demot/demo3/g1-2.png