Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB

4 years ago
  1. ## 4 Oma moduuli, nimiavaruus
  2. **Tehtävä:**
  3. Seitsämännen luvun viimeinen tehtävä on luoda oma moduuli, joka sisältää oman nimiavaruuden. Myös tälläkin kertaa tarkoituksena on luoda itse moduuli, jota käytetään jo olemassaolevan ohjelman toimesta.
  4. Ohjelmaa varten on luotu seuraavanlainen koodi, joka käyttöönottaa moduulin MuuntajaModuuli ja kutsuu siihen määriteltyjä metodeja:
  5. ```
  6. require "7-4"
  7. include MuuntajaModuuli
  8. MuuntajaModuuli::muunna("Vesihiisi sihisee")
  9. tulos = MuuntajaModuuli::parillinen?(1024)
  10. if tulos == true
  11. puts "Testattu luku oli parillinen!"
  12. end
  13. ```
  14. Tehtävänäsi on siis luoda tämä moduuli, ja määritellä siihen kaksi metodia `muunna` ja `parillinen?`. Metodi `parillinen?` ottaa vastaan yhden kokonaisluvun, ja kokeilee onko luku parillinen vai ei. Jos luku on parillinen, palautetaan `true`, jos pariton tai epäkelpo arvo, palautetaan `false`. Testinä voidaan käyttää yksinkertaisesti "jakojäännös kahdella"-testiä. Metodi muunna taas vastaanottaa yhden merkkijonon, josta se muuttaa "i"-kirjaimet tähtimerkiksi ("*"), "h"-kirjaimet väliviiväksi ("-") ja "s"-kirjaimet alaviivoiksi ("_"). Tämän jälkeen metodi tulostaa muunnetun merkkijonon.
  15. Kun moduuli toimii oikein, tulostaa ohjelma seuraavaa:
  16. Example output:
  17. ```
  18. Ve_*_uk_* lu*_taa
  19. ```
  20. **Vastaus**
  21. ```
  22. #!/usr/bin/env ruby
  23. # coding: utf-8
  24. require "./7-4_omamoduuli.rb"
  25. include MuuntajaModuuli
  26. MuuntajaModuuli::muunna("Vesihiisi sihisee")
  27. tulos = MuuntajaModuuli::parillinen?(1024)
  28. if tulos == true
  29. puts "Testattu luku oli parillinen!"
  30. end
  31. ```
  32. Tiedosto 7-4_omamoduuli.rb:
  33. ```
  34. # coding: utf-8
  35. module MuuntajaModuuli
  36. def muunna(lause)
  37. # muuttaa kaikki i-kirjaimet tähtimerkeiksi
  38. # muuttaa h-kirjaimet väliviivoiksi
  39. # muuttaa s-kirjaimet alaviivoiksi
  40. chars = { "i" => "*", "h" => "-", "s" => "_" }
  41. chars.each { |avain,arvo| lause = lause.gsub(avain, arvo) }
  42. puts lause
  43. end
  44. def parillinen?(luku)
  45. # kokeilee, onko luku parillinen vai ei
  46. # palauta true, jos parillinen
  47. # palauta false, jos pariton tai epäkelpo arvo
  48. return true if luku % 2 == 0
  49. return false
  50. end
  51. end
  52. ```