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.
 

2.2 KiB

4 Oma moduuli, nimiavaruus

Tehtävä:

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.

Ohjelmaa varten on luotu seuraavanlainen koodi, joka käyttöönottaa moduulin MuuntajaModuuli ja kutsuu siihen määriteltyjä metodeja:

require "7-4"
include MuuntajaModuuli
MuuntajaModuuli::muunna("Vesihiisi sihisee")
tulos = MuuntajaModuuli::parillinen?(1024)
if tulos == true
puts "Testattu luku oli parillinen!"
end

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.

Kun moduuli toimii oikein, tulostaa ohjelma seuraavaa:

Example output:

Ve_*_uk_* lu*_taa

Vastaus

#!/usr/bin/env ruby
# coding: utf-8
require "./7-4_omamoduuli.rb"
include MuuntajaModuuli
MuuntajaModuuli::muunna("Vesihiisi sihisee")
tulos = MuuntajaModuuli::parillinen?(1024)
if tulos == true
puts "Testattu luku oli parillinen!"
end

Tiedosto 7-4_omamoduuli.rb:

# coding: utf-8
module MuuntajaModuuli
def muunna(lause)
# muuttaa kaikki i-kirjaimet tähtimerkeiksi
# muuttaa h-kirjaimet väliviivoiksi
# muuttaa s-kirjaimet alaviivoiksi
chars = { "i" => "*", "h" => "-", "s" => "_" }
chars.each { |avain,arvo| lause = lause.gsub(avain, arvo) }
puts lause
end
def parillinen?(luku)
# kokeilee, onko luku parillinen vai ei
# palauta true, jos parillinen
# palauta false, jos pariton tai epäkelpo arvo
return true if luku % 2 == 0
return false
end
end