## 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 (bensanhinta*kulutus litroina*matka 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 ```