Izpitno vprašanje RAČ2PRA 2000

Iz MaFiRaWiki

Predmet Računalništvo 2 (FMF PRA)

Vprašanje

Sestavi razred Ulomek, kjer hranimo pozitivna racionalna številka v mešani obliki (npr . 3 2/3 torej celi del + ulomek<1 ). V razredu naj obstaja konstruktor brez parametrov, ki ustvari ulomek oblike 1 0/1, konstruktor z enim parametrom n tipa int , ki ustvari ulomek oblike n 0/1 in konstruktor z dvema parametroma (m, n) tipa int, ki ustvari ustrezni okrajšani ulomek, enak ulomku m/n. Poleg tega napiši statične metode sestej, odstej, mnozi, deli in inverz , ki izvedejo ustrezne operacije. Predpostavi, da so vse operacije legalne.

Odgovor

  1.  
  2. public class Ulomek{
  3. private int celidel;
  4. private int stevec;
  5. private int imenovalec;
  6. //prazen konstruktor
  7. public Ulomek(){
  8. celidel = 1;
  9. stevec = 0;
  10. imenovalec = 1;
  11. }
  12. //konstruktor z enim parametrom n tipa int
  13. public Ulomek(int n){
  14. celidel = n;
  15. stevec = 0;
  16. imenovalec = 1;
  17. }
  18. //konstruktor z dvema parametroma (m, n) tipa int
  19. public Ulomek(int m, int n){
  20. celidel = m/n;
  21. stevec = m - celidel*n;
  22. imenovalec = n;
  23. okrajsaj();
  24. }
  25.  
  26. private void okrajsaj(){
  27. int max_d = evklid(stevec,imenovalec);//najvecji skupni delitelj
  28. stevec = stevec/max_d;
  29. imenovalec = imenovalec/max_d;
  30. //ce bi bil slucajno imenovalec negativen, rajsi damo predznak k stevcu
  31. if(imenovalec < 0){
  32. imenovalec *= -1;
  33. stevec *= -1;
  34. }
  35. }
  36. //največji skupni delitelj
  37. public static int evklid(int a, int b){
  38. while(b != 0){
  39. int d = a%b;
  40. a = b;
  41. b = d;
  42. }
  43. return a;
  44. }
  45. public String toString(){
  46. return(celidel + " " +stevec+ "/" + imenovalec+ "");
  47. }
  48. //staticne metode
  49. //sestej
  50. public static Ulomek sestej(Ulomek a, Ulomek b){
  51. int produkt_imenovalcev = (a.imenovalec)*(b.imenovalec);
  52. int astevec = a.stevec + (a.celidel)*(a.imenovalec);
  53. int bstevec = b.stevec + (b.celidel)*(b.imenovalec);
  54. return new Ulomek((astevec)*(b.imenovalec) + bstevec*(a.imenovalec), produkt_imenovalcev);
  55. }
  56. //odstej Ulomek a - Ulomek b
  57. public static Ulomek odstej(Ulomek a, Ulomek b){
  58. int produkt_imenovalcev = (a.imenovalec)*(b.imenovalec);
  59. int astevec = a.stevec + (a.celidel)*(a.imenovalec);
  60. int bstevec = b.stevec + (b.celidel)*(b.imenovalec);
  61. return new Ulomek((astevec)*(b.imenovalec) - bstevec*(a.imenovalec), produkt_imenovalcev);
  62. }
  63. //mnozi
  64. public static Ulomek mnozi(Ulomek a, Ulomek b){
  65. int produkt_imenovalcev = (a.imenovalec)*(b.imenovalec);
  66. int astevec = a.stevec + (a.celidel)*(a.imenovalec);
  67. int bstevec = b.stevec + (b.celidel)*(b.imenovalec);
  68. return new Ulomek(astevec*bstevec, produkt_imenovalcev);
  69. }
  70. //deli
  71. public static Ulomek deli(Ulomek a, Ulomek b){
  72. int produkt_imenovalcev = (a.imenovalec)*(b.imenovalec);
  73. int astevec = a.stevec + (a.celidel)*(a.imenovalec);
  74. int bstevec = b.stevec + (b.celidel)*(b.imenovalec);
  75. return new Ulomek(astevec*(b.imenovalec), bstevec*(a.imenovalec));
  76. }
  77. //inverz
  78. public static Ulomek inverz(Ulomek a){
  79. int astevec = a.stevec + (a.celidel)*(a.imenovalec);
  80. return new Ulomek(a.imenovalec,astevec);
  81. }
  82. public static void main(String[]args){
  83. Ulomek a = new Ulomek(17, 2);
  84. Ulomek b = new Ulomek(7, 3);
  85. System.out.println(a);
  86. }
  87. }
Osebna orodja