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.

77 lines
2.4 KiB

4 years ago
  1. ## 1 Yksinkertainen valinta, laskin
  2. **Tehtävä:**
  3. 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.
  4. 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.
  5. Toimiessaan oikein ohjelma tulostaa seuraavaa:
  6. Example output:
  7. ```
  8. Anna 1. luku:
  9. 2
  10. Anna 2. luku:
  11. 3
  12. (Y)hteen-, (V)ähennys- vai (K)ertolasku?
  13. K
  14. Tulos on 6.0
  15. ```
  16. **Vastaus**
  17. ```
  18. #!/usr/bin/env ruby
  19. # coding: utf-8
  20. def tarkistaSyote(kysymys, virheviesti, tyyppi, strip=false)
  21. begin
  22. print kysymys
  23. if strip
  24. syote = eval(tyyppi + "(gets.chomp).strip")
  25. else
  26. syote = eval(tyyppi + "(gets.chomp)")
  27. end
  28. rescue ArgumentError
  29. warn virheviesti
  30. retry
  31. end
  32. return syote
  33. end
  34. def pyydaLuku(luku)
  35. return tarkistaSyote("Anna #{luku}. luku: \n",
  36. "Et antanut kelvollista valintaa.",
  37. "Integer"
  38. )
  39. end
  40. def laskuToimitus(luku1, luku2)
  41. input = tarkistaSyote("(Y)hteen-, (V)ähennys- vai (K)ertolasku?\n",
  42. "Et antanut kelvollista valintaa.",
  43. "String"
  44. )
  45. luku1 = luku1.to_f
  46. luku2 = luku2.to_f
  47. case input.upcase
  48. when "Y", "YHTEEN"
  49. t = luku1 + luku2
  50. when "V", "VÄHENNYS"
  51. t = luku1 - luku2
  52. when "K", "KERTOLASKU"
  53. t = luku1 * luku2
  54. else
  55. warn "'#{input}' ole sopiva vaihtoehto"
  56. t = "tuntematon"
  57. end
  58. puts "Tulos on #{t}"
  59. end
  60. laskuToimitus(pyydaLuku(1), pyydaLuku(2))
  61. ```