Varaudu esittämään kaikki koksiin liittyvät tehtävät mikrotietokoneella
harjoitustilaisuudessa. Tallenna siksi ratkaisusi joko levykkeelle tai
fs-verkkolevylle. Ota mukaan myös tuloste ratkaisuistasi.
- Tehtävä 1: Tiedon esitysmuodoista
Ennakkoon palautettava tehtävä ! Tehtävästä saa yhden
koepistettä vastaavan pisteen.
- Mitä desimaalilukua 32-bittinen IEEE:n standardin mukainen
liukulukuesitys 0xC1600000 tarkoittaa? (Muistathan, että 0x etuliite
kertoo, että kyseessä on heksadesimaaliesitys.)
- Anna konkreettinen liukulukuesimerkki tilanteesta, jossa X+Y=X, kun
Y>0. Kerro ainakin X:n ja Y:n arvot sekä bittiesityksenä että
numeerisena.
- Oletetaan, että muistipaikkaan 0x124 (tavuosoite) on tallennettu
0x12345 nelitavuisena kokonaislukuna. Anna muistipaikan 0x124 sisältö
- Little Endian tallennusmuodossa
- Big Endian tallennusmuodossa
Perustele vastauksesi kussakin kohdassa lyhyesti.
Laadi selvityksesi tavallisena tekstitiedostona, jossa ei ole mitään
erityisiä muotoiluja. Älä siis turhaan käytä tekstinkäsittelyohjelman
muotoiluja.
Palauta laatimasi tekstitiedosto www-sivun
http://db.cs.helsinki.fi/~tuohinie/tito/ kautta.
Palautus pitää tehdä viimeistään 24 tuntia ennen ryhmän alkua.
Myöhemmin palautus ei ole mahdollista eikä myöhästyneitä
palautusyrityksiä oteta huomioon.
- Tehtävä 2: [ HUOM: 2:n tehtävän arvoinen] Hyppytaulu - Jump table.
Pitkät valintalauseet (switch-lauseet) voivat hidastaa ohjelman
suoritusta huomattavasti, jos usein suoritettavassa silmukassa joka
kerta valitaan yksi kerrallaan oikea case-tapaus esimerkiksi 60 eri
mahdollisuuden joukosta. Tähän menee keskimäärin 30 vertailua ja
kuhunkin vertailuun ainakin 2 konekäskyä!
Jos valinta-arvot ovat kokonaislukuarvoisia, nollasta alkavia ja
muodostavat (liki) yhtenäisen arvoalueen, niin usean if-then-else
-vertailun asemesta voidaan käyttää hyppytaulua (jump table).
Hyppytaulun avulla päästää oikeaan case-tapaukseen aina suoraan
muutamalla konekäskyllä. Hyppytaulu sisältää monta hyppykäskyä (yksi per
case-tapaus), joista valintamuuttujan perusteella valitaan indeksoitua
osoitusmoodia käyttäen oikea hyppykäsky. Esimerkiksi, jos rekisteri R3
sisältää valinta-arvon ja hyppytaulun osoite on JTBL, niin oikeaan
case-tapaukseen (siihen liittyvään hyppykäskyyn) päästään konekäskyn
"JUMP JTBL(R3)" avulla.
- Anna (Koksissa suorituskelpoinen) ttk-91 esimerkki hyppytaulun
käytöstä, kun case-tapauksia on 10.
- Miten em. valintalause toteutetaan, jos hyppytaulussa onkin
hyppykäskyjen asemesta ainoastaan case-tapausten osoitteet? Anna
toteutus samalle esimerkille kuin kohdassa (a).
- Milloin toteutustapa (a) on parempi kuin (b)? Miksi?
- Milloin toteutustapa (b) on parempi kuin (a)? Miksi?
- Jos kukin case-tapaus vaatii 10 konekäskyä ja case-tapauksia
on 60, niin kuinka paljon (%) hyppytaulun käyttö nopettaa
valintalauseen suoritusta (verrattuna usean peräkkäisen vertailun
toteutukseen)? Eroavatko em. toteutustavat (kohdat a ja b) tässä suhteessa?
- Tehtävä 3: Java-ohjelmien suoritusvaihtoehdot
Java-ohjelmia (tavukoodia) voidaan suorittaa (ainakin) neljällä eri
tavalla: tulkitsemalla, tavallisella käännöksellä, Just-In-time
-käännöksellä tai suoraan Java-suorittimella.
- Anna esimerkkejä tilanteesta, jolloin tulkitseminen olisi
parempi
kuin muut vaihtoehdot. Perustele, miksi muut tavat olisivat
huonompia.
- Anna vastaavat esimerkit ja perustelut tilanteista, jolloin
muut e.m.
vaihtoehdoista olisivat parhaita vaihtoehtoja.
- Mikä olisi paras vaihtoehto (Java) ohjelmoinnin harjoitustyön
suorittamiseen? Miksi?
- Mitä prosesseja järjestelmässä tarvitaan ohjelman
suoritushetkellä, jos Java ohjelmaasi MyProg suoritetaan 1)
tulkitsemalla, 2) tavallisella käännöksellä, 3) Just-In-Time
-käännöksellä tai 4) suoraan Java-suorittimella?
- Tehtävä 4: Funktio
Harjoitusten 2 ennakkoon palautettavana tehtävänä oli laatia ohjelma,
joka laski yhden Fibonacci-luvun. Muokataan tästä hiukan monipuolisempi
ttk-91:n ohjelma.
Ohjelman pitää voida tuotaa useita Fibonacci-lukuja yhdellä
suorituskerralla. Siirretään myös yhden Fibonacci-luvun laskeminen omaan funktioon.
- Tee funktio Fibonacci, jota voidaan käyttää lausekkeessa
x=Fibonacci(y). Fibonacci-lukujonossa seuraava luku on kahden edellisen summa.
- Tee pääohjelma, joka lukee käyttäjältä lukuja yksi
kerrallaan ja tulostaa niihin liittyvän Fibonacci-luvun. Lukuja
tulostetaan vain positiivisille kokonaisluvuille. Negatiivinen luku tai
nolla päättää ohjelman suorituksen.
Käytä kurssilla opetettua systemaattista tapaa parametrien ja
paluuarvon välittämisessä pääohjelman ja funktion (eli aliohjelman) välillä.
- Tehtävä 5: Kurssikysely
Vastaa kurssikyselyyn.
Kiinnitä lisähuomiota kohtien 14 ja 19 vastauksiin.
Vastaa kurssikyselyn kohdassa 14 ("Miten kurssia voisi
kehittää?") myös lisäkysymyksiin:
- Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän
asti aikaa?
Luentojen seuraamiseen? Harjoituksiin? Itseopiskeluun?
- Kuinka suureen osaan luennoista osallistuit? (100%, 90%, ...)
- Jos osallistuit lähes kaikkiin luentoihin, niin opitko
perusasiat
luennoilla vai pitikö niitä vielä kovasti opiskella
kirjoista?
- Käytitkö englanninkielisiä oppikirjoja? Kuinka paljon?
Tiina.Niklander@cs.helsinki.fi