Naloga/Programiranje/Objektno programiranje/Razred Ulomek/Rešitev (Python)

Iz MaFiRaWiki

Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.

Kaj pomeni to opozorilo?

  1.  
  2. #!/usr/bin/python
  3. # -*- coding: utf-8 -*-
  4. # Filename: ulomek.py
  5.  
  6. # Sestavi razred Ulomek, s katerim predstavimo ulomek:
  7.  
  8. # Pri konstruktorjih upoštevaj, da lahko ulomek podamo s števcem in imenovalcem,
  9. # lahko pa tudi kot celo število (v tem primeru je imenovalec 1)
  10. # Sestavi naslednje metode:
  11. # metoda toString,
  12. # metoda void okrajsaj(), ki ulomek okrajša,
  13. # metoda compareTo
  14. # metoda equals
  15. # metode za osnovne aritmetične operacije:
  16. # vsaka operacija ima dve inačici, na primer
  17. # vsota, ki vrne vsoto dveh ulomkov, in
  18. # pristej, ki danemu ulomku prišteje ulomek.
  19.  
  20. # Namig
  21. # Imenovalec naj bo vedno pozitivno celo število, tudi če konstruktorju podamo
  22. # negativni imenovalec.
  23. # Za računanje največjega skupnega delitelja števca in imenovalca uporabi
  24. # Evklidov algoritem.
  25. # Sestavi pomožno statično metodo int gcd(int a, int b), ki izračuna največji
  26. # skupni delitelj a in b.
  27.  
  28. def gcd(m,n):
  29. if m < 0:
  30. return gcd(abs(m),abs(n))
  31. if n < 0:
  32. return gcd(abs(m),abs(n))
  33. if n > m:
  34. return gcd(n,m)
  35. if n == 0:
  36. return m
  37. return gcd(m-n,n)
  38.  
  39. def vsota(x,y):
  40. b = x.imenovalec
  41. a = x.stevec
  42. d = y.imenovalec
  43. c = y.stevec
  44. return Ulomek(a*d + b*c,b*d).okrajsaj()
  45.  
  46.  
  47. class Ulomek:
  48. def __init__(self, st, imen=1):
  49. if imen > 0:
  50. self.imenovalec = imen
  51. else:
  52. self.imenovalec = -imen
  53. if imen > 0:
  54. self.stevec = st
  55. else:
  56. self.stevec = -st
  57.  
  58. def okrajsaj(self):
  59. g = gcd(self.stevec,self.imenovalec)
  60. self.stevec = self.stevec/g
  61. self.imenovalec = self.imenovalec/g
  62. return self
  63. def toString(self):
  64. return repr(self.stevec)+"/"+repr(self.imenovalec)
Osebna orodja