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

4 years ago
  1. ## 2 Autonkulutuslaskuri
  2. **Tehtävä:**
  3. 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?: ".
  4. 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.
  5. Toimiessaan oikein ohjelma tulostaa esimerkiksi seuraavaa:
  6. Example output:
  7. ```
  8. Anna autolla ajetut kilometrit: 140
  9. Anna bensanhinta: 1.44
  10. Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: 2
  11. Matka maksoi 18.144 euroa
  12. Lasketaanko toinen matka? (k/e)?: e
  13. ```
  14. **Vastaus**
  15. ```
  16. #!/usr/bin/env ruby
  17. # coding: utf-8
  18. def tarkistaSyote(kysymys, tyyppi, strip=false)
  19. begin
  20. print kysymys
  21. if strip
  22. syote = eval(tyyppi + "(gets.chomp).strip")
  23. else
  24. syote = eval(tyyppi + "(gets.chomp)")
  25. end
  26. rescue ArgumentError
  27. warn "Syöttämäsi valinta ei ole kelvollinen"
  28. retry
  29. end
  30. return syote
  31. end
  32. def laskuri()
  33. km = tarkistaSyote("Anna autolla ajetut kilometrit: ", "Integer")
  34. hinta = tarkistaSyote("Anna bensanhinta: ", "Float")
  35. valinta = tarkistaSyote("Onko matka (1) maantieajoa vai (2) kaupunkiajoa?: ", "Integer")
  36. case valinta
  37. when 1
  38. kulutus = 5
  39. when 2
  40. kulutus = 9
  41. else
  42. warn "Tuntematon valinta"
  43. return
  44. end
  45. puts "Matka maksoi #{(hinta*kulutus*km)/100.0} euroa"
  46. end
  47. loop do
  48. laskuri
  49. print "Lasketaanko toinen matka? (k/e)?: "
  50. vastaus = String(gets.strip.chomp)
  51. case vastaus
  52. when "e"
  53. #Process.exit(0)
  54. break
  55. when "k"
  56. next
  57. else
  58. warn "Tuntematon valinta"
  59. end
  60. end
  61. ```