Tehtävä:
Ensimmäisessä tehtävässä kootaan laskin, jolla on kolme mahdollista toimintatapaa. Aloitetaan ohjelma sillä, että pyydetänä käyttäjältä kaksi syötettä tekstillä "Anna 1. luku:" ja "Anna 2. luku:" , jotka tallennetaan kahteen eri muuttujaan, ja muutetaan ne liukuluvuiksi tyyppimuunnoksella. Tämän jälkeen esitetään käyttäjälle vaihtoehdot muodossa "(Y)hteen-, (V)ähennys- vai (K)ertolasku?" ja tallennetaan käyttäjän valinta kolmanteen muuttujaan.
Jos käyttäjä antoi syötteen "Y", lasketaan syötetyt arvot yhteen. Jos "V", vähennetään ne toisistaan ja jos "K", kerrotaan ne keskenään. Lopuksi annetaan vastaus "Tulos on [vastaus]". Jos käyttäjä ei valitse joko "Y", "V" tai "K", tulostetaan teksti "Virheellinen valinta." Ohjelma lopetetaan kun vastaus on tulostettu, ja lisksi voidaan olettaa, että käyttäjä ymmärtää antaa numeroarvoksi muuntuvan syötteen lukuihin, sekä ymmärtää, että laskutoimituksen valinta tehdään käyttäen isoja kirjaimia.
Toimiessaan oikein ohjelma tulostaa seuraavaa:
Example output:
Anna 1. luku:
2
Anna 2. luku:
3
(Y)hteen-, (V)ähennys- vai (K)ertolasku?
K
Tulos on 6.0
Vastaus
#!/usr/bin/env ruby
# coding: utf-8
def tarkistaSyote(kysymys, virheviesti, tyyppi, strip=false)
begin
print kysymys
if strip
syote = eval(tyyppi + "(gets.chomp).strip")
else
syote = eval(tyyppi + "(gets.chomp)")
end
rescue ArgumentError
warn virheviesti
retry
end
return syote
end
def pyydaLuku(luku)
return tarkistaSyote("Anna #{luku}. luku: \n",
"Et antanut kelvollista valintaa.",
"Integer"
)
end
def laskuToimitus(luku1, luku2)
input = tarkistaSyote("(Y)hteen-, (V)ähennys- vai (K)ertolasku?\n",
"Et antanut kelvollista valintaa.",
"String"
)
luku1 = luku1.to_f
luku2 = luku2.to_f
case input.upcase
when "Y", "YHTEEN"
t = luku1 + luku2
when "V", "VÄHENNYS"
t = luku1 - luku2
when "K", "KERTOLASKU"
t = luku1 * luku2
else
warn "'#{input}' ole sopiva vaihtoehto"
t = "tuntematon"
end
puts "Tulos on #{t}"
end
laskuToimitus(pyydaLuku(1), pyydaLuku(2))