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.5 KiB

2 Autonkulutuslaskuri

Tehtävä:

Luvun toisessa tehtävässä tehdään laskuri, jolla lasketaan paljonko autolla ajaminen tulee maksamaan bensan hinnassa mitattuna. Pyydetään ensiksi käyttäjältä kaksi syötettä "Anna autolla ajetut kilometrit: " sekä "Anna bensanhinta: ". Tämän jälkeen käyttäjä voi valita, onko matka maantie- vai kaupunkiajoa valinnalla "Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: ".

Oletetaan, että käyttäjän auto kuluttaa 5 litraa bensiiniä sadalla kilometrillä jos matka ajetaan maantiellä, ja 9 litraa jos matka ajetaan kaupungissa. Kun lukemat on tiedossa, lasketaan vastaus kaavalla (bensanhintakulutus litroinamatka kilmetreinä) / 100.0, ja tulostetaan se muodossa "Matka maksoi [tulos] euroa.". Ilmoitetaan tulos desimaalien tarkkuudella, joskaan vastausta ei tarvitse erikseen pyöristää. Lopuksi kysytään käyttäjältä "Lasketaanko toinen matka? (k/e): ". Jos käyttäjä valitsee "k", aloitetaan alusta. Jos "e", lopetetaan. Ohjelmassa voidaan olettaa, että käyttäjä syöttää ainoastaan oikeita lukuarvoja ja valitsee ainoastaan kelvollisia vaihtoehtoja.

Toimiessaan oikein ohjelma tulostaa esimerkiksi seuraavaa:

Example output:

Anna autolla ajetut kilometrit: 140
Anna bensanhinta: 1.44
Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: 2
Matka maksoi 18.144 euroa
Lasketaanko toinen matka? (k/e)?: e

Vastaus

#!/usr/bin/env ruby
# coding: utf-8
def tarkistaSyote(kysymys, tyyppi, strip=false)
begin
print kysymys
if strip
syote = eval(tyyppi + "(gets.chomp).strip")
else
syote = eval(tyyppi + "(gets.chomp)")
end
rescue ArgumentError
warn "Syöttämäsi valinta ei ole kelvollinen"
retry
end
return syote
end
def laskuri()
km      = tarkistaSyote("Anna autolla ajetut kilometrit: ", "Integer")
hinta   = tarkistaSyote("Anna bensanhinta: ", "Float")
valinta = tarkistaSyote("Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: ", "Integer")
case valinta
when 1
kulutus = 5
when 2
kulutus = 9
else
warn "Tuntematon valinta"
return
end
puts "Matka maksoi #{(hinta*kulutus*km)/100.0} euroa"
end
loop do
laskuri
print "Lasketaanko toinen matka? (k/e)?: "
vastaus = String(gets.strip.chomp)
case vastaus
when "e"
#Process.exit(0)
break
when "k"
next
else
warn "Tuntematon valinta"
end
end