avoin/avoin23
Liukuhihna
Olkoon käytössä väsymätön robotti, jonka tehtävänä on käsitellä liukuhihnalla sille syötettäviä kokonaislukuja. Robotti ottaa vastaan luvun, käsittelee sen annetulla ohjeella, ja siirtää käsitellyn luvun valmiiden lukujen liukuhihnalle. Nimitetään sisääntulevien lukujen hihnaa input-hihnaksi ja valmiiden lukujen output-hihnaksi. Robotille voi antaa ohjeita seuraavien komentojen avulla:
Ohje koostuu robotille annettavasta suoritettavien komentojen sarjasta ja voi sisältää useita komentoja. Komennot suoritetaan yksi kerrallaan, ja robotilla voi olla kädessä vain yksi luku kerrallaan. Robotin työsuoritus päättyy, kun kumpi tahansa seuraavista ehdoista täyttyy: (a) ohjeessa ei ole enää suoritettavia komentoja, tai (b) input-hihnalla ei ole enää lukuja yritettäessä suorittaa INPUT-komentoa.
Esimerkiksi, jos input-hihnalle tulisivat luvut 1, 3 ja 7 (joista luku 1 tulee ensimmäisenä käsittelyvuoroon), niin seuraava ohje siirtäisi ne output-hihnalle. Kuvat 1 ja 2 havainnollistavat esimerkin robotin toimintaa.
INPUT
OUTPUT
INPUT
OUTPUT
INPUT
OUTPUT
Jotta robottia voidaan käyttää erilaisiin tehtäviin, sisällytetään robotin tunnistamiin komentoihin seuraavassa taulukossa esitellyt komennot. Lisäksi robotilla on käytettävissä 16 muistipaikkaa lukujen ja niistä laskettujen välitulosten varastointia varten. Muistipaikat on nimetty kokonaisluvulla nollasta alkaen, joten muistipaikkojen nimet ovat 0, 1, 2, 3, ... , 15.
Esimerkit
Esimerkki 1. Tehdään ohje, joka siirtää input-hihnalta output-hihnalle vain nollasta eroavat luvut. Ohjeen vieressä on ohjeen toimintaa kuvaava selitys.
Alku: // Määritellään kohta "Alku".
INPUT // Otetaan luku input -hihnalta.
JUMPIFZERO(Alku) // Jos luku on 0, hypätään kohtaan "Alku".
OUTPUT // Siirretään luku output -hihnalle.
JUMP(Alku) // Siirrytään kohtaan "Alku".
Jos input-hihnalla olisivat esimerkiksi luvut
1, 0, 7, 9, 0, 4
olisi output-hihna ohjeen suorittamisen jälkeen:
1, 7, 9, 4
Paina Step
edetäksesi rivi kerrallaan. Run
ajaa koko ohjelman kerralla ja Reset
palauttaa ohjelman alkutilaan.
Esimerkki 2. Tehdään ohje, joka ottaa input-hihnalta ensimmäiset kaksi lukua ja siirtää ne output-hihnalle käänteisessä järjestyksessä. Ohjeen komentoja toistetaan niin kauan kuin input-hihnalla on lukuja. Lukuja oletetaan olevan parillinen määrä. Ohjeen vieressä on ohjeen toimintaa kuvaava selitys.
Alku: // Määritellään kohta "Alku".
INPUT // Otetaan luku input -hihnalta.
COPYTO(0) // Kopioidaan luku muistipaikkaan 0.
INPUT // Otetaan luku input -hihnalta.
OUTPUT // Siirretään luku output -hihnalle.
COPYFROM(0) // Kopioidaan muistipaikan 0 sisältö.
OUTPUT // Siirretään luku output -hihnalle
JUMP(Alku) // Siirrytään kohtaan "Alku".
Jos input-hihnalla olisivat esimerkiksi luvut
1, 0, 7, 9, 0, 4
olisi output-hihna ohjeen suorittamisen jälkeen:
0, 1, 9, 7, 4, 0
Huomautuksia
- Jos INPUT-komentoa suoritettaessa robotin kädessä on jo jokin luku, niin kyseinen luku häviää.
- OUTPUT-komennon antamisen jälkeen robotin kädessä ei ole mitään lukua.
- Output-hihna on aina tyhjä ennen ohjeen suorittamista. Vastaavasti muistipaikat ovat tyhjiä, ellei kysymyksessä muuta ole sanottu.
- Kysymyksissä 2.3–2.10 edellytetään, että ohjeen suorittamisen jälkeen input-hihnalle ei jää lukuja
- tehtävän tekemisessä kynä ja paperia on välttämätöntä
- muistipaikan käyttäminen (lukeminen) ei hävitä se arvoa
- voit kommentoida koodirivejä
//
-merkeillä
Kysymykset
Kysymys 1.
Input-hihnalla ovat seuraavat luvut:
1, 2, 3, 4, 5, 6
Miltä output-hihna näyttää, kun luvut käsitellään alla olevalla ohjeella? (0.1 p.)
Kirjoita vastaus yhdelle riville, luvut pilkulla eroteltuina.
Alku:
INPUT
INPUT
OUTPUT
JUMP(Alku)
Kysymys 2.
Input-hihnalla ovat seuraavat luvut:
8, 3, 5, 0, 0, 6
Muistipaikassa 0 on valmiina luku 1. Miltä output-hihna näyttää, kun luvut käsitellään alla olevalla ohjeella? (0.1 p.)
Alku:
INPUT
ADD(0)
OUTPUT
INPUT
SUB(0)
JUMPIFNEG(VainNeg)
JUMP(Alku)
VainNeg:
OUTPUT
JUMP(Alku)
Kysymys 3.
Tätä robottia voit käyttää kokeiluihin eri tehtävissä. Liukuhihnan sisältö ei välttämättä vastaa tehtävän liukuhihnaa.
Kysymys 4.
Kysymys 5.
Kysymys 6.
Kysymys 7.
Kysymys 8.
Kysymys 9.
Harjoittelurobottiin voit kopioida oman vastauksesi kun ruksit Text mode
.
Haaste: Toistaiseksi lyhin vastaus on 15 riviä.
Kysymys 10.
Haaste: Toistaiseksi lyhin vastaus on 15 riviä.
Mallivastaus
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.