ITKP102 Ohjelmointi 1, syksy 2007

Samankaltaiset tiedostot
ITKP102 Ohjelmointi 1, syksy 2007

ITKP102 Ohjelmointi 1, syksy 2007

ITKP102 Ohjelmointi 1, syksy 2007

Ohjelmointi 2 / 2010 Välikoe / 26.3

ITKP102 Ohjelmointi 1 (6 op)

Java-kielen perusteet

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Java-kielen perusteet

5. HelloWorld-ohjelma 5.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Olio-ohjelmointi Javalla

7/20: Paketti kasassa ensimmäistä kertaa

Java-kielen perusteita

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Omat operaatiot 1.1

Ohjelmointi 2 / 2011 Välikoe / 25.3

Metodien tekeminen Javalla

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

13. Loogiset operaatiot 13.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Harjoitus 2 (viikko 45)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

1. Mitä tehdään ensiksi?

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

13. Loogiset operaatiot 13.1

Ohjelmoinnin jatkokurssi, kurssikoe

Sisältö. 22. Taulukot. Yleistä. Yleistä

5. HelloWorld-ohjelma 5.1

Ohjelmointiharjoituksia Arduino-ympäristössä

Sisältö. 2. Taulukot. Yleistä. Yleistä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

4. Luokan testaus ja käyttö olion kautta 4.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

17. Javan omat luokat 17.1

7. Näytölle tulostaminen 7.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Java-kielen perusteet

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

12. Javan toistorakenteet 12.1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

11/20: Konepelti auki

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

5/20: Algoritmirakenteita III

18. Abstraktit tietotyypit 18.1

12. Javan toistorakenteet 12.1

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Java-kielen perusteita

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet Y Python

Ohjelmointi 2, välikoe

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

14. Hyvä ohjelmointitapa 14.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Harjoitus 5 (viikko 48)

9. Periytyminen Javassa 9.1

Harjoitus 4 (viikko 47)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

6/20: Tietorakenteita

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Ohjelmoinnin perusteet Y Python

13. Hyvä ohjelmointitapa (osa 1) 13.1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

58131 Tietorakenteet ja algoritmit (syksy 2015)

11. Javan toistorakenteet 11.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Rajapinta (interface)

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Muuttujat ja kontrolli. Ville Sundberg

Javan perusteita. Janne Käki

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

1 Tehtävän kuvaus ja analysointi

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

Mikä yhteyssuhde on?

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

17. Javan omat luokat 17.1

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

19. Olio-ohjelmointia Javalla 19.1

Transkriptio:

ITKP102 Ohjelmointi 1, syksy 2007 Tentti 22.2.2008, suomenkielinen Neljä tehtävää, joista maksimipistemääräksi tulee 24. Kurssin läpäisy edellyttää vähintään 12 pistettä tentistä. Demotehtävät vaikuttavat arvosanaan siten kuin kurssin WWW-sivulla on ilmoitettu. Tentissä ei saa olla mukana laskinta eikä muuta tietoteknistä välinettä. Mukana saa olla yksi kirjallinen materiaalikokonaisuus, esim. kirja, kansio, tuloste tai moniste, jossa ei ole ilman väkivaltaa irtoavia osia. Materiaalissa saa olla myös itse tehtyjä lisämerkintöjä. (Kysymykset on laadittu siten ettei vastaamisen edellyttämiä taitoja ehdi opiskella tenttitilaisuuden aikana. Referenssimateriaali kuitenkin kuuluu ohjelmointiin sekä oikeasti että tenttitilanteessa.) Sivu 1 / 9

Kysymys 1: Ohjelman ymmärtäminen ITKP102 Ohjelmointi 1, syksy 2007 Tutki seuraavaa ohjelmaa. Oleta, että se on olemassa tietokoneella siten että se voidaan kääntää ja suorittaa Java-työkaluilla. 1 public class ExamProgram6 { 2 private static void dosomething ( double [ ] numbers, int a ) { 3 int b = numbers. l e n g th 1 a ; 4 numbers [ a ] = ( numbers [ a ] + numbers [ b ] ) / 2. 0 ; 5 } 6 private static S t r i n g c h a r a c t e r i z e ( double num) { 7 return num >= 0? Positive : Negative ; 8 } 9 public static void main ( S t r i n g [ ] args ) { 10 double [ ] array = { 4. 0, 2. 0, 1 8. 0, 16.0 } ; 11 12 short howmany = array. length / 2 ; 13 for ( int i = 0 ; i < howmany ; i ++) { 14 dosomething ( array, i ) ; 15 } 16 for ( int k = 0 ; k < howmany ; k++) { 17 System. out. p r i n t l n ( array [ k ] ) ; 18 S t r i n g s = c h a r a c t e r i z e ( array [ k ] ) ; 19 System. out. p r i n t l n ( s ) ; 20 } 21 System. out. p r i n t l n ( ) ; 22 } 23 } Vastattavat kohdat (10 kpl) ja painoarvot pisteytyksessä (yht. 6p): a) Mikä on sen tiedoston nimi, johon lähdekoodi on tallennettu? (0.3p) b) Mikä on ajettavan tavukooditiedoston nimi? (0.3p) c) Millä komentorivikomennoilla käännät ja suoritat ohjelman? (0.4p) d) Missä järjestyksessä rivit 3, 4, 10, 12, 14 suoritetaan? Kirjoita em. rivinumerot siinä järjestyksessä kuin virtuaalikone suorittaa rivit (monta numeroa, osa mahdollisesti useita kertoja!) (2p) e) Mitä ohjelma tulostaa? (0.5p) f) Tutki kaikki metodien, parametrien ja paikallisten muuttujien esittelyt. Mitkä erilaiset tyyppimäärittelyt löydät näistä, kun viitteet eri luokkien olioihin tulkitaan eri tyypeiksi? Siis luettele kaikki tyypit, jotka ohjelmalistauksessa esiintyvät. (0.5p) Sivu 2 / 9

g) Mitkä muuttujat ja parametrit ovat olemassa, kun rivi 21 suoritetaan? Luettele muuttujien nimet. (0.5p) h) Mitkä ovat olemassaolevien primitiivimuuttujien arvot, kun rivi 21 suoritetaan? Jos ei ole yhtään primitiiviä, ilmoita se. (0.5p) i) Moneenko eri olioon olisi saatavilla viite, jos rivin 21 jälkeen pitäisi lisätä koodirivi, joka käyttäisi jotakin aiemmin syntynyttä oliota? Oleta ettei yhtään komentoriviargumenttia annettu käynnistettäessä. (0.5p) j) Ajattele tilannetta, jossa riviä 21 suoritetaan. Montako 8-bittistä tavua muistia tässä ohjelmassa määritellyt parametrit ja paikalliset muuttujat vaativat sillä hetkellä yhteensä? Jätä huomioimatta olioiden kekomuistista käyttämä tila, mutta ota huomioon paikallisten viitemuuttujien viemä tila. (Javan tilavaatimukset oletuksineen luetellaan liitteessä) (0.5p) Kysymyksen 1 liite: Javan tyypit Javan tyypit ja niiden tallennustila bitteinä ilmoitettuna. Tavu on 8-bittinen, joten tavumäärän saa jakamalla bittimäärän kahdeksalla. Tyyppi koko literaaliesim. Totuusarvot boolean? (*) true, false Merkit char 16 A, \u0041 Kokonaisluvut byte 8 14, 123, -128, 0x72 short 16-14, 0123, 32767 int 32 14, -1234, 32767 long 64 14L, 9223372036854775807 Liukuluvut float 32 14.0, 1.234, 3.4e38 double 64 14.0, 1.234, 4.9e-324 Olioviitteet LuokanNimi 32 (**) Huomautukset: (*) Riippuu toteutuksesta. (**) Riippuu toteutuksesta; tentissä oleta kooksi 32 bittiä. Sivu 3 / 9

Kysymys 2: Käytännön taitoja Kuusi kohtaa, yht. 6p. Kohdissa a ja b tarkastele seuraavaa koodinpätkää: 1 / Question : V a r i a b l e s and assignments / 2 int a = 1 ; 3 int b = 2 ; 4 int c = 3 ; 5 int d = 4 ; 6 dosomething ( ( c + a ( b = c ) ) d ) ; 7 8 / Question : Objects and r e f e r e n c e s / 9 HuhPing h = new HuhPing ( Robert ) ; 10 HuhPing k = h ; 11 h = null ; 12 HuhPing m = k ; 13 k = h ; 14 h = new HuhPing ( Anna Liisa ) ; a) Jäsennä rivi 6 kokonaan: Missä järjestyksessä kone suorittaa yksittäiset operaatiot? Taulukoi joka suorituksesta: operaattori, vasemman operandin lukuarvo, oikean operandin lukuarvo ja operaatiosta syntyvän tuloksen lukuarvo? (1.5 p) b) Tilanteesta, jossa kaikki koodirivit on suoritettu, piirrä graafisesti: paikalliset viitemuuttujat, oliot sekä viitteet paikallisista muuttujista olioihin tai olioista toisiinsa. Kuvassa olio on laatikko, johon on kirjoitettu sen luokka ja sen verran sisältöä, että oliot tunnistaa toisistaan. Viite on nuoli viittaajasta viitteen kohteeseen. (1 p) c) Kirjoita Javan heksadesimaaliliteraalina bittijono 010011110111. (0.5p) d) Kirjoita Javan oktaaliliteraalina bittijono 010011110111. (0.5p) e) Kirjoita Javan 10-järj. kokonaislukuliteraalina heksaluku 2a8. (0.5p) f) Määrittele (miel. diagrammina tai BNF:nä) syntaksi runolle, joka koostuu sanojen pohjantähti, sydän, tahtoo sekä valvoo toistoista. Sanojen tulee muodostaa rivejä ja kappaleita. Rivillä sanojen välissä pilkku; kappaleiden välissä tyhjä rivi. Vähintään yksi sana per rivi; vähintään yksi kappale per runo. Esimerkki (\n on rivinvaihto): pohjantähti, pohjantähti \n sydän, valvoo, tahtoo \n tahtoo \n \n pohjantähti (2p) Sivu 4 / 9

Koodiliite ja vastausohjeet loppuosioon ITKP102 Ohjelmointi 1, syksy 2007 Kysymyksissä 3 ja 4 tarkastele seuraavaa ohjelmaa: 1 public class Hirsipuu { 2 private static void t u l o s t a O h j e e t ( java. i o. PrintStream out ) { 3 out. p r i n t l n ( Hirsipuu peli. ) ; 4 out. p r i n t l n ( Näet sanan, jonka kirjaimista osa on peitetty ) ; 5 out. p r i n t l n ( Näet aina vain tähän asti arvatut kirjaimet. ) ; 6 out. p r i n t l n ( Saat arvata yhtä uutta kirjainta kerrallaan. ) ; 7 out. p r i n t l n ( Kaikki kirjaimet on arvattava, että voitat. ) ; 8 return true ; 9 } 10 private static boolean j o n o S i s a l t a a M e r k i n ( S t r i n g jono, char merkki ) { 11 return jono. indexof ( merkki ) >= 0 ; // true, j o s merkki l ö y t y y j o n o s t a. 12 } 13 private static S t r i n g p i i l o o n P a i t s i A r v a t u t ( S t r i n g jono, S t r i n g arvatut ) { 14 // FIXME: Tämä p i t ä i s t o t e u t t a a, e t t ä kokonaisuus t o i m i s i! 15 return jono + UPS! En osaa vielä piilottaa merkkejä. ; 16 } 17 private static int arvuuttelesana ( S t r i n g sana, 18 S t r i n g arvatutkirjaimet, int a r v a u k s i a J a l j e l l a ) { 19 S t r i n g arvattu = p i i l o o n P a i t s i A r v a t u t ( sana, a r v a t u t K i r j a i m e t ) ; 20 boolean v o i t e t t u = false ; 21 while (! v o i t e t t u && a r v a u k s i a J a l j e l l a > 0) { 22 System. out. p r i n t f ( Sana tähän asti : %s%n, arvattu ) ; 23 System. out. p r i n t f ( Arvauksia j ä l j e l l ä : %d%n, 24 a r v a u k s i a J a l j e l l a ) ; 25 char arvaus = Apukirjasto. luechar ( Arvaa uusi kirjain ) ; 26 a r v a t u t K i r j a i m e t += arvaus ; 27 a r v a u k s i a J a l j e l l a ; 28 arvattu = p i i l o o n P a i t s i A r v a t u t ( sana, a r v a t u t K i r j a i m e t ) ; 29 v o i t e t t u = arvattu. e q u a l s ( sana ) ; 30 } 31 System. out. p r i n t l n ( v o i t e t t u? Sä keksit sen! : Pieleen meni. ) ; 32 System. out. p r i n t f ( Arvauksia j ä i : %d kpl.%n, a r v a u k s i a J a l j e l l a ) ; 33 System. out. p r i n t f ( Sana o l i %s %n, sana ) ; 34 return v o i t e t t u? a r v a u k s i a J a l j e l l a : 1; 35 } 36 public static void main ( S t r i n g [ ] args ) { 37 int k o k o n a i s t u l o s = 0 ; 38 t u l o s t a O h j e e t ( System. out ) ; 39 sanat = { hirsipuu, raakile } ; 40 v i h j e e t = { rsp, rel } ; 41 for ( int i = 0 ; i <= sanat. l ength ; i++) { 42 int paluuarvo = arvuuttelesana ( sanat [ i ], v i h j e e t [ i ], 7 ) ; 43 k o k o n a i s t u l o s += paluuarvo ; } 44 System. out. p r i n t f ( Kokonaistulos : %d pistettä., k o k o n a i s t u l o s ) ; 45 }} Sivu 5 / 9

Vastauksen muoto kysymyksiin 3 ja 4 On viisi tärkeätä sääntöä, joiden noudattamatta jättäminen vie vastaavan vastauskohdan pisteet selkeästi nollaksi: Muutokset: Jos jotakin riviä on muutettava, ilmoita rivin numero ja kirjoita kyseinen rivi uudelleen. Kysymyksessä 3 perustele korjaus kommentiksi rivin loppuun. Poistot: Jos rivi on poistettava, ilmoita rivin numero ja pois. Kysymyksessä 3 perustele poisto. Lisäykset: Jos on lisättävä rivejä, ilmoita lisäystä edeltävän koodirivin numero ja kirjoita lisättävä koodi (yksi tai useampia rivejä). Kysymyksessä 3 perustele lisäys. Kohdassa 3a kirjoita jokaisen muuttamasi tai lisäämäsi RIVIN ALUS- SA OLEVAT VÄLILYÖNNIT NÄKYVIIN (tai vähintään ilmoita niiden määrä). Kaikki ilmoittamasi rivinumerot olkoot ALKUPERÄISEN koodin rivejä; ei siis pidä miettiä, mihin rivit siirtyvät poistojen tai lisäysten yhteydessä! Tästä johtuen huolehdi yksiselitteisyydestä: Jos johonkin kohtaan tulee useita peräkkäisiä rivejä lisää, ne on syytä kirjoittaa yhtenä pitkänä lisäyksenä, koska muuten niiden keskinäistä järjestystä ei oikein voi päätellä vastauksesta. Kysymyksen 4 arvostelusta: Virheistä sakotetaan; pahimpana suunnitteluvaikeudet tai kykenemättömyys oikean toiminnallisuuden aikaansaamisessa. Syntaksin tulee olla mahdollisimman lähelle oikeellista Javaa, vaikka ensisijaisesti arvosteltava asia tässä on algoritmin toimivuus. Reilu riviväli auttaa täydennysten tekemisessä paperille koodatessa. Pyri selkeyteen. Tarkennuksia kysymykseen 4: Kysymyksessä 4 ei tarvitse muokata alkuperäisen koodin sisennyksiä, vaikka muutos aiheuttaisi sellaista tarvetta. Riittää että tuotetut tai muutetut koodin osat toimivat siten kuin tehtävässä 4 pyydetään. Siinä ei ole enää kyse aiemman koodin korjaamisesta, jota tehdään tehtävässä 3. Sivu 6 / 9

Kysymys 3: Koodin rakenne, selkeys ja toimivuus Kaikki muut kuin tehtävässä mainitut virheet ovat tahattomia tai tenttikompromisseja. Anna niiden olla! Erityisesti luokka Apukirjasto on olemassa ja toimii kuten näyttääkin. Siihen ei liity mitään ongelmia. Kommentit ja aliohjelmien väliset tyhjärivit puuttuvat tilan säästämiseksi; niitäkään ei tarvitse lisätä. a) Korjaa koodi hyvien koodauskäytänteiden mukaiseksi seuraavien tahallisten virheiden osalta: Tyhjämerkkien käyttö lähdekoodissa ei täysin vastaa ohjelman rakennetta. Tahallisia rikkeitä tyhjämerkeissä löytyy yhteensä yhdeksältä koodiriviltä. Niiden pitäisi olla aika selkeitä. (Muista lisätä pieni perustelu korjauksille) (yht. 4p) b) Ohjelman toiminnassa on selkeitä vikoja, jotka löytyvät, kun tutkii tarkkaavaisesti. Korjaa perustellen seuraavat tahalliset viat: 3 riviä (kaksi erilaista ongelmaa), joiden takia ohjelma ei käänny Java-kääntäjällä. Lisävihje: kaikki ongelmat liittyvät tyyppijärjestelmään. 1 kohta, jonka takia ohjelma kaatuu varmasti. Pikkuvika. (0.7 pistettä per erilainen löydetty ongelma, max. 2p) Sivu 7 / 9

Kysymys 4: Ohjelmakoodin tuottaminen ITKP102 Ohjelmointi 1, syksy 2007 Kysymys 4 arvostellaan riippumattomasti, mutta tässä käsitellään samaa ohjelmakoodia ja käytetään samaa muotoa vastaukselle kuin kysymyksessä 3. On tärkeätä, että käytät alkuperäisen (rikkinäisen) koodin rivinumeroita muutoskohtien ilmoittamiseen, koska tämän vastauksen saattaa tarkastaa eri henkilö eikä hän tiedä edellisen kohdan muutoksia! Riippumatta siitä, osaatko vastata kysymykseen 3, oletetaan että ohjelmaan on nyt tehty tarvittavat korjaukset ja että se lähtökohtaisesti toimii niinkuin se lupaa käyttäjälle. Luokka Apukirjasto on olemassa ja sen käyttö onnistuu ilman ongelmia siten kuin ohjelmassa sitä on käytetty! Siihen ei saa tehdä muutoksia eikä lisäyksiä. Laajenna nyt ohjelmaa seuraavilla uusilla ominaisuuksilla: a) Pelin toiminta perustuu täysin aliohjelmaan piiloonpaitsiarvatut, jota ei vielä ole tehty valmiiksi asti! Toteuta aliohjelman runko siten että se vastaa suunniteltua rajapintaa: Siis ensimmäinen parametri on todellinen sana ja jälkimmäinen sisältää tähän asti arvatut merkit (osa on oikein arvattuja, osa väärin; voi olla myös sama merkki useaan kertaan). Paluuarvona halutaan viite uuteen merkkijonoon, jossa toistaiseksi ei-arvatut merkit on peitetty miinusmerkeillä (ks. esimerkkituloste alla). (3.0p) b) Toistaiseksi kaikille sanoille annetaan maksimissaan 7 arvausyritystä. Muuta ohjelman rakenne sellaiseksi, että jokaiseen pelin aikana arvattavaan sanaan liittyy oma maksimiarvausten määrä. Saat toki edelleen pitää sanat, vihjeet ja maksimiarvausmäärät kovakoodattuna, kunhan maksimiarvauksille on olemassa oma, selkeä tietorakenteensa. (3.0p) Ohjelman halutaan lopulta toimivan seuraavalla tavoin. Kuten huomaat, molemmissa sanoissa on 3 tuntematonta kirjainta, mutta raakile on nyt vaikeampi koska sille annetaan vain 6 arvausyritystä 7:n sijasta: Hirsipuu -peli. Näet sanan, jonka kirjaimista osa on peitetty Näet aina vain tähän asti arvatut kirjaimet. Sivu 8 / 9

Saat arvata yhtä uutta kirjainta kerrallaan. Kaikki kirjaimet on arvattava, että voitat. Sana tähän asti: --rs-p-- Arvauksia jäljellä: 7 Arvaa uusi kirjain>a Sana tähän asti: --rs-p-- Arvauksia jäljellä: 6 Arvaa uusi kirjain>i Sana tähän asti: -irsip-- Arvauksia jäljellä: 5 Arvaa uusi kirjain>k Sana tähän asti: -irsip-- Arvauksia jäljellä: 4 Arvaa uusi kirjain>h Sana tähän asti: hirsip-- Arvauksia jäljellä: 3 Arvaa uusi kirjain>u Sä keksit sen! Arvauksia jäi: 2 kpl. Sana oli hirsipuu Sana tähän asti: r----le Arvauksia jäljellä: 6 Arvaa uusi kirjain>... Sivu 9 / 9