Ohjelmointi 1 / 2008

Demo 3 / 29.9

Tehtävät

1.
Tiedon esittäminen tietokoneessa: Oletetaan että tietokoneessa on vain 8 bitin luvut. Eli siihen tilaan on tuloksen mahduttava. Laske allekkain yhteen seuraavat binääriluvut huolellisesti muistinumerot kirjoittaen (myös vasemmanpuoleisesta parista ulos lähtevä muistinumero):
a)             b)            c)             d)
   0101 1111      0101 1111      0000 0001     1111 1111
   0001 1111      0101 1111      1111 1111     1111 1111
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. 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:
3 =  0000 0011   

-3 tehdään seuraavasti:  1)  kaikki päinvastoin 1111 1100
                         2)  +1               = 1111 1101 = -3
Vastaavasti 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
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 antaa sääntö siitä, milloin tuloksen
   voi todeta olevan oikein ja milloin väärin.
2.
Muuttujat ja tyypit: Miten esittelisit (tyyppi ja nimi) muuttujat seuraavia tilanteita varten. Anna myös esimerkki miten sijoittaisit muuttujalle jonkin arvon. Vastauksen voit palauttaa Java-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.
3.
Muuttujat ja tyypit: Arvostele seuraavat muuttujien tyypit ja nimet. Ovatko syntaktisesti oikein? Entä ovatko hyviä valintoja:
int mansikanKiloHinta;
double first,second,final;
char omaNimi;
double metriMm;
double tuntejaVuorokaudessa;
real nopeus;
double AuringonEtaisyys;
int kuukaudenKeskiLampo:
int kissoja,2_kanaa,kolmeKoiraa;
int i,j,l,I;
4.
Aliohjelmat: 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 paunoja (lb) grammoiksi. Kirjoita myös tuo funktio. Muista kirjoittaa aina asianmukaiset kommentit aliohjelmiin!
5.
Aliohjelmat: Ota luennolla tehty lumiukko:

http://users.jyu.fi/~vesal/kurssit/ohj1/luennot/2008s/080916ti/Lumiukot2.java


ja muuta se sellaiseksi, että lumiukon voi piirtää neljällä eri tavalla (nyt on kaksi valmiina). Muista kommentointi!
a) Ilman minkään pallon kokoa
b) antamalla alapallon koko 
c) antamalla kahden alimman pallon koko
d) antamalla kaikkien kolmen pallon koko 
Toki voit jatkaa pääteohjauksessa tekemääsi versioon, joka piirtää ukolle silmät ja nenän. Muista "testata" kaikkia neljää eri aliohjelmaa.
6.
Lausekkeet: Kirjoita lausekkeet, joilla lasket (tee Java-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ä
B1.
Tee ohjelma, joka kysyy käyttäjältä merkkijonon (käytä Scanner -luokkaa ). Sitten tulostetaan käyttäjän syöttämä merkkijono kokonaan isoilla kirjaimilla kirjoitettuna ja kokonaan pienillä kirjaimilla kirjoitettuna (ks. String-luokan dokumentit). Tulosta jonosta vielä kolme ensimmäistä kirjainta.

GURU-tehtävät

G1-2
Ota tehtävän 5 lumiukko ja muuta se olioksi. Laita näyttöön 3 lumiukkoa, joista jokainen pyörii omaa tahtiaan. Katso automaattinen pyörittäminen sample/UkkoSample.java .