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