Helsingin yliopisto / tietojenkäsittelytieteen laitos / Ohjelmointitekniikka (Scala) / © Arto Wikla 2016

Ohjelmointitekniikka (Scala): harjoitukset 1

Sivu luotu 14.3.2016

Sormiharjoituksia Javasta Scalaan siiryjälle Java-peruskurssien hengessä. Käytä mahdollisuuksien mukaan lukujen 2 ja 3 tekniikoita: funktioliteraaleja,taulukkoja, listoja, monikoita (tuppeleita), joukkoja ja assosiaatiolistoja ("mappeja"), syöttötiedostoja, ...

Jos osaat, esitä tehtäviin sekä imperatiivisia että funktionaalisia ratkaisuja. Muutenkin voit esitellä erilaisia tyylejä ja pohtia niiden laatua.

Huom: Varaudu myös selittämään, miten olet ohjelmoinut ja mitä ohjelmatekstisi tarkoittaa! Scalalla saman asian voi tehdä hyvin monella tavalla.

    1. Tee vuorovaikutteinen ohjelma, joka pyytää kolmion korkeuden ja tulostaa "*"-merkeistä muodostuvan kolmion seuraavan esimerkin tapaan. Jos korkeus on vaikkapa kuusi, ohjelma tulostaa:
      
            *
           ***
          *****
         *******
        *********
       ***********
      

    2. Vuosi on karkausvuosi, jos se on jaollinen 4:llä, mutta ei sadalla. 400:lla jaolliset kuitenkin ovat karkausvuosia, mutta vuosi 4000 ei silti ole karkausvuosi. Laadi vuorovaikutteinen sovellus, joka tulostaa karkausvuodet käyttäjän pyytämältä vuosilukuväliltä. Alku- ja loppuvuoden saa syöttää kummassa tahansa järjestyksessä. Järjestys määrää karkausvuosien tulostamisen nousevassa tai laskevassa järjestyksessä.

    3. Tee sovellus, joka tulostaa komentoriviparametrit String-vertailujen antamassa "aakkosjärjestyksessä".

    1. Toteuta seuraava tietokonepeli: Ensin ohjelma arpoo jonkin yksinumeroisen kokonaisluvun 0, 1, 2, ..., 9 paljastamatta sitä ohjelman käyttäjälle. Sitten käyttäjä syöttää ohjelmalle kolme arvausta siitä, minkä luvun ohjelma on arponut.

      Lopuksi ohjelma selvittää ja ilmoittaa pelin tuloksen:

      • Jos luvuista ensimmäinen on sama kuin koneen arpoma, käyttäjä voittaa 400 virtuaalieuroa.
      • Jos luvuista toinen on sama kuin koneen arpoma, käyttäjä voittaa 200 virtuaalieuroa.
      • Jos luvuista kolmas on sama kuin koneen arpoma, käyttäjä voittaa 100 virtuaalieuroa.
      • Jos mikään luvuista ei ollut sama kuin koneen arpoma, käyttäjä häviää 100 virtuaalieuroa.

      Mikään ei estä kayttäjää syöttämästä eli arvaamasta samaa lukua useampaankin kertaan; tällöin sekä riski hävitä että mahdollinen voitto kasvavat.

      Tehtävän ratkaisuksi riittää toteuttaa yhden luvun arvaaminen, ts. yksi pelikerta.

      Satunnaisluvun väliltä 0-9 saa arvottua seuraavasti:

         val koneenLuku = (10*math.random).toInt
      
      
    2. Laadi ohjelma merkkijonon etsimiseen tekstitiedostosta. Ohjelmalle annetaan tekstitiedoston nimi komentoriviparametrina. Etsittäviä merkkijonoja ohjelma kysyy käyttäjältä. Komentoriviparametrin puuttumisesta on annettava virheilmoitus.

      Ohjelma tulostaa kuvaruudulle rivinumeroin ne tiedoston rivit, joihin sisältyy haettava merkkijono. Ohjelman suoritus päättyy kun kysytään tyhjää merkkijonoa.

      Jos esimerkiksi juuri tältä html-sivulta etsitään sanoja, tulos voi näyttää seuraavalta:

      Mitä sanaa etsitään? Tyhjä lopettaa.
      tulostaa
      52: korkeuden  ja tulostaa "*"-merkeistä muodostuvan
      54: Jos korkeus on vaikkapa kuusi, ohjelma tulostaa:
      70: vuorovaikutteinen sovellus, joka tulostaa karkausvuodet käyttäjän
      79: <li>Tee sovellus, joka tulostaa komentoriviparametrit
      136:    Ohjelma tulostaa kuvaruudulle
      Mitä sanaa etsitään? Tyhjä lopettaa.
      40
      68: sadalla. 400:lla jaolliset kuitenkin ovat karkausvuosia, mutta
      69: vuosi 4000 ei silti ole karkausvuosi. Laadi
      101: käyttäjä voittaa 400 virtuaalieuroa.
      Mitä sanaa etsitään? Tyhjä lopettaa.
      Jos
      35: Jos osaat, esitä myös sekä imperatiivisia että funktionaalisia ratkaisuja
      54: Jos korkeus on vaikkapa kuusi, ohjelma tulostaa:
      100: <li>Jos luvuista ensimmäinen on sama kuin koneen arpoma,
      102: <li>Jos luvuista toinen on sama kuin koneen arpoma,
      104: <li>Jos luvuista kolmas on sama kuin koneen arpoma,
      106: <li>Jos mikään luvuista ei ollut sama kuin koneen arpoma,
      141: Jos esimerkiksi juuri tältä html-sivulta
      Mitä sanaa etsitään? Tyhjä lopettaa.
      
      

  1. Laadi lyhyt kirjallinen ohjeistus Scalan alkeisiin (luvut 2 ja 3) tutustuvalle kokeneelle Java-ohjelmoijalle, jollainen arvatenkin itsekin olet. Kirjoituksen laajuudeksi riittää "A4-arkin koko". Esitystapa voi olla luettelomainen: ranskalaisia viivoja, numeroituja kohtia, tms.