Ohjelmointi 1 / 2010

Demo 3 / 27.9

Tehtävät

V1.

Tee Ville-tehtävät: 2.5, 2.6, 7.1, 7.3, 7.4, 7.5, 7.6

1.

M: 24.4 Negatiiviset binääriluvut: 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 sääntö siitä, milloin tuloksen
   voi todeta olevan oikein ja milloin väärin.

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

M: 7. Muuttujat: 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.

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 paunoja (lb) grammoiksi. Kirjoita myös tuo funktio. Muista kirjoittaa aina asianmukaiset kommentit aliohjelmiin!

5.

Aliohjelmat: (Kuormittaminen) Ota lumiukko-esimerkki:
http://users.jyu.fi/~vesal/kurssit/ohj1/moniste/esim/Lumiukot.java
ja muuta se sellaiseksi, että lumiukon voi piirtää kahdella eri tavalla (eli on kaksi eri lumiukko -aliohjelmaa eri parametrimäärillä). Muista kommentointi! Vinkki: aloita tekemällä aliohjelmalla jota voidaan kutsua tavalla b) ja käytä sitä toisen aliohjelman tekemiseen.
a) Ilman minkään pallon kokoa  
      lumiukko(window,124,150);
b) antamalla alapallon koko    
      lumiukko(window,20,100,30);
Toki voit jatkaa pääteohjauksessa tekemääsi versioon, joka piirtää ukolle silmät ja nenän. Muista "testata" molempia aliohjelmia.

6.

M: 7.5 Aritmeettiset 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ä

7.

M: 6. Aliohjelmat: Ota edellisen demon vastaus UkkoNoaAli ja muuta se sellaiseksi että siinä on vielä aliohjelma soitaUkkoNoa(mp) ja tätä kutsutaan pääohjelmasta. Muuta sitten ohjelma sellaiseksi, joka soittaa UkkoNooan niin, että ensin se soitetaan tempolla 150, sitten 1.5*nopeammin ja jälleen 1.5*nopeammin. Tempoa voit vaihtaa kutsulla
mp.setTempo(150);

B1.

M: 18.2 Käyttäjän syötteen lukeminen: Tee ohjelma, joka kysyy käyttäjältä merkkijonon (käytä Scanner-luokkaa, M: 18.2 Käyttäjän syötteen lukeminen). Sitten tulostetaan käyttäjän syöttämä merkkijono kokonaan isoilla kirjaimilla kirjoitettuna ja kokonaan pienillä kirjaimilla kirjoitettuna (ks. String-luokan dokumentit M: 12. Merkkijonot). 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 .