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.

83 lines
2.3 KiB

4 years ago
  1. ## 2 Monta valintaehtoa
  2. **Tehtävä:**
  3. Luvun toisessa tehtävässä tehdään ohjelma, joka käsittelee koordinaatistoa. Tee ohjelma, joka pyytää käyttäjältä X-akselin ja Y-akselin arvot kokonaislukuina. Tämän jälkeen tee ohjelmaan valintarakenne, joka päättelee missä kohtaa 10*10-koordinaatistoa käyttäjä on:
  4. Jos X- ja Y-arvo on pienempi kuin 5, tulostetaan "Olet vasemmassa alakulmassa.". Jos X on pienempi, mutta Y suurempi tai yhtäsuuri kuin 5, tulostetaan "Olet vasemmassa yläkulmassa.". Vastaavasti X >=5 ja Y < 5 tulostaa "Olet oikeassa alakulmassa." ja molempien ollessa viisi tai enemmän, "Olet oikeassa yläkulmassa.". Lisäksi, jos jompikumpi luvuista on pienempi kuin nolla, tulostetaan "Annoit negatiivisen arvon.".
  5. Toimiessaan oikein ohjelma tulostaa seuraavaa:
  6. Example output:
  7. ```
  8. Valitse x-akselin arvo väliltä 0-9: 2
  9. Valitse y-akselin arvo väliltä 0-9: -6
  10. Annoit negatiivisen arvon.
  11. ```
  12. **Vastaus**
  13. ```
  14. #!/usr/bin/env ruby
  15. # coding: utf-8
  16. def tarkistaSyote(kysymys, virheviesti, tyyppi, strip=false, *arvovali)
  17. begin
  18. print kysymys
  19. if strip
  20. syote = eval(tyyppi + "(gets.chomp).strip")
  21. else
  22. syote = eval(tyyppi + "(gets.chomp)")
  23. end
  24. if tyyppi == "Integer" && arvovali[0]
  25. if syote < 0
  26. # Enforced by assignment description
  27. return syote
  28. elsif syote < arvovali[0][0] || syote > arvovali[0][1]
  29. throw ArgumentError
  30. end
  31. end
  32. rescue ArgumentError
  33. warn virheviesti
  34. retry
  35. end
  36. return syote
  37. end
  38. ##########
  39. def valitseKoordinaatti(akseli)
  40. arvovali = [0,9]
  41. return tarkistaSyote("Valitse #{akseli}-akselin arvo väliltä #{arvovali[0]}-#{arvovali[1]}: ",
  42. "Syötteesi oli virheellinen.",
  43. "Integer",
  44. false,
  45. arvovali
  46. )
  47. end
  48. ##########
  49. x = valitseKoordinaatti("x")
  50. y = valitseKoordinaatti("y")
  51. if x < 0 or y < 0
  52. puts "Annoit negatiivisen arvon."
  53. elsif x < 5 and y < 5
  54. puts "Olet vasemmassa alakulmassa."
  55. elsif x < 5 and y >= 5
  56. puts "Olet vasemmassa yläkulmassa."
  57. elsif y < 5 and x >= 5
  58. puts "Olet oikeassa alakulmassa."
  59. elsif y >= 5 and x >= 5
  60. puts "Olet oikeassa yläkulmassa."
  61. end
  62. ```