wiki:k2013/demot/demo3
Last modified 5 years ago Last modified on 2013-01-29 10:28:57

Demot » Demo 3, 4.2.2013

Demot palautetaan viimeistään maanantaina klo 7:30 mennessä kurssin NettiDemoWWW:llä https://www.mit.jyu.fi/demowww/ohj1k/. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.

Tästä demosta eteenpäin ohjelmointitehtävät tehdään Visual Studiota apuna käyttäen.

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.

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. Vastauksen voit palauttaa C#-tiedostonakin.

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;

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! Jos teet tehtävän Visual Studiossa, niin tee ohjelmasi ConsoleApplication-mallin avulla (ei Jypeli-projektimallista).

Tehtävä 5

M: 6. Aliohjelmat (Kuormittaminen). Ota Demo 2:n Portaat-esimerkki (poista Main jos teet Visual Studiolla Jypelin projektimallista, koska sieltä tulee oma Main Program.cs-tiedostoon), ja muuta se 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, 0, 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.

Tehtävä 6

M: 7.5 Operaattorit (ja aritmeettiset lausekkeet). Kirjoita lausekkeet, joilla lasket muuttujiin, joille olet valinnut hyvät nimet, alla luetellut arvot. Tee Console C#-ohjelmaksi, Main() riittää, ei tarvitse 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.

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

Attachments