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
Kuva 1: Ohjeen alkutilassa input-hihnalla ovat luvut 1, 3 ja 7.
Kuva 1: Ohjeen alkutilassa input-hihnalla ovat luvut 1, 3 ja 7.



Kuva 2: Ohjeen viimeisessä OUTPUT-komennossa luku 7 on käsiteltävänä.
Kuva 2: Ohjeen viimeisessä OUTPUT-komennossa luku 7 on käsiteltävänä.




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

Kokeile robotilla


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

Kokeile robotilla

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

Tätä robottia voit käyttää kokeiluihin eri tehtävissä. Liukuhihnan sisältö ei välttämättä vastaa tehtävän liukuhihnaa.

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

Alku:
INPUT
INPUT
OUTPUT
JUMP(Alku)

Kirjoita vastaus yhdelle riville, luvut pilkulla eroteltuina.

# k21

Oliko tässä siis tarkoitus kirjoittaa komentoja kuten Esimerkissä 2.? Käsitin, että vastaus on luku/luvut pilkuilla eriteltynä mutta mikään variaatio ei näytä tuottavan pisteitä.

Vastauksen tulee sisältää luku/lukuja pilkuilla eriteltyinä. -AJL

30 Jan 21 (edited 30 Jan 21)

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)
# k22

Kysymys 3.

Robotti kokeiluja varten

# k3

Kysymys 4.

# k4

Kysymys 5.

# k5

Kysymys 6.

# k6

Kysymys 7.

# k7

Kysymys 8.

# k8

Kysymys 9.

Robotti harjoittelua varten

Haaste: Toistaiseksi lyhin vastaus on 16 riviä.

# k9

Kysymys 10.

Haaste: Toistaiseksi lyhin vastaus on 16 riviä.

# k10

Mallivastaus

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.