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.

263 lines
7.5 KiB

  1. """ coding=utf-8
  2. Analytical Skills - practicum 1: getallen
  3. (c) 2019 Hogeschool Utrecht
  4. Bart van Eijkelenburg (bart.vaneijkelenburg@hu.nl)
  5. Tijmen Muller (tijmen.muller@hu.nl)
  6. Naam:
  7. Klas:
  8. Studentnummer:
  9. """
  10. """
  11. LET OP: JE MAG VOOR DEZE OPDRACHT GEEN (extra) MODULES IMPORTEREN!
  12. Practicum 1: Werk onderstaande functies uit.
  13. floor(real):
  14. Return het grootste gehele getal, dat kleiner dan of gelijk is aan real (reël getal).
  15. ceil(real):
  16. Return het kleinste gehele getal, groter dan of gelijk aan real (reël getal).
  17. div(n):
  18. Return een (natuurlijk) gesorteerde verzameling (lijst) van delers van n.
  19. Het getal a N is een deler van n N, als er een b N is, zodat a · b = n.
  20. is_prime(n):
  21. Return True als n N een priemgetal is, anders False.
  22. primefactors(n):
  23. Return een (natuurlijk) gesorteerde verzameling (lijst) van priemfactoren van n.
  24. Return [n] als n een priemgetal is, of n == 1. Tip: maak gebruik van de functie 'is_prime(n)'
  25. primes_under_30():
  26. Return alle priemgetallen kleiner dan 30.
  27. gcd(a, b):
  28. Return de grootste grootste gemene deler, ggd (ofwel greatest common divisor, gcd) is.
  29. Je hebt twee opties voor deze opgave;
  30. 1. Je programmeert hier het algoritme van Euclides (niet behandeld)
  31. zie: https://nl.wikipedia.org/wiki/Algoritme_van_Euclides
  32. 2. Je bedenkt zelf een oplossing waarbij je gebruik maakt van de eerder
  33. geschreven methode div(n) om de gcd te bepalen.
  34. lcm(a, b):
  35. Return het kleinste gemene veelvoud, kvg (ofwel least common multiple).
  36. add_frac(n1, d1, n2, d2):
  37. Return de sommatie van twee breuken als breuk.
  38. *n1* is de teller van de eerste breuk, *d1* is de noemer van de eerste breuk.
  39. *n2* is de teller van de tweede breuk, *d2* is de noemer van de eerste breuk.
  40. De returnwaarde bestaat uit eerste de teller en dan de noemer van het resultaat.
  41. Bijvoorbeeld: 3/4 + 1/6 = 11/12
  42. dan: add_frac(3, 4, 1, 6) = 11, 12
  43. """
  44. def floor(real):
  45. """ Return het grootste gehele getal, dat kleiner dan of gelijk is aan real (reëel getal). """
  46. return 0
  47. def ceil(real):
  48. """ Return het kleinste gehele getal, groter dan of gelijk aan real (reëel getal). """
  49. return 0
  50. def div(n):
  51. """ Return een (natuurlijk) gesorteerde verzameling (lijst) van delers van n.
  52. Het getal a N is een deler van n N, als er een b N is, zodat a · b = n. """
  53. divisors = []
  54. return sorted(divisors)
  55. def is_prime(n):
  56. """ Return True als n ∈ N een priemgetal is, anders False.
  57. Je kunt gebruik maken van de functie 'div(n)' om te bepalen of n een priem is.
  58. Optioneel: bedenk een efficiënter alternatief. """
  59. return False
  60. def primefactors(n):
  61. """ Return een (natuurlijk) gesorteerde verzameling (lijst) van priemfactoren van n.
  62. Return [n] als n een priemgetal is, of n == 1. Tip: maak gebruik van de functie 'is_prime(n)' """
  63. factors = []
  64. return sorted(factors)
  65. def primes_under_30():
  66. """ Return alle priemgetallen kleiner dan 30. """
  67. primes = []
  68. return primes
  69. def gcd(a, b):
  70. """ Return de grootste grootste gemene deler, ggd (ofwel greatest common divisor, gcd) is. """
  71. return 1
  72. def lcm(a, b):
  73. """ Return het kleinste gemene veelvoud, kvg (ofwel least common multiple). """
  74. return 1
  75. def add_frac(n1, d1, n2, d2):
  76. """ Return de sommatie van twee breuken als breuk.
  77. *n1* is de teller van de eerste breuk, *d1* is de noemer van de eerste breuk.
  78. *n2* is de teller van de tweede breuk, *d2* is de noemer van de eerste breuk.
  79. De returnwaarde bestaat uit eerste de teller en dan de noemer van het resultaat.
  80. Bijvoorbeeld: 3/4 + 1/6 = 11/12
  81. dan: add_frac(3, 4, 1, 6) = 11, 12
  82. """
  83. return 1, 1
  84. """
  85. ========================================================================================================================
  86. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  87. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  88. """
  89. def my_assert_args(function, args, expected_output):
  90. argstr = str(args).replace(',)', ')')
  91. assert function(*args) == expected_output, "Fout: {}{} geeft {} in plaats van {}".format(function.__name__, argstr, function(*args), expected_output)
  92. def test_floor():
  93. testcases = [((1.0,), 1),
  94. ((1.05,), 1),
  95. ((1.95,), 1),
  96. ((-1.0,), -1),
  97. ((-1.05,), -2),
  98. ((-1.95,), -2)]
  99. for case in testcases:
  100. my_assert_args(floor, case[0], case[1])
  101. def test_ceil():
  102. testcases = [((1.0,), 1),
  103. ((1.05,), 2),
  104. ((1.95,), 2),
  105. ((-1.0,), -1),
  106. ((-1.05,), -1),
  107. ((-1.95,), -1)]
  108. for case in testcases:
  109. my_assert_args(ceil, case[0], case[1])
  110. def test_div():
  111. testcases = [
  112. ((1,), [1]),
  113. ((2,), [1, 2]),
  114. ((3,), [1, 3]),
  115. ((4,), [1, 2, 4]),
  116. ((8,), [1, 2, 4, 8]),
  117. ((12,), [1, 2, 3, 4, 6, 12]),
  118. ((19,), [1, 19]),
  119. ((25,), [1, 5, 25]),
  120. ((929,), [1, 929]),
  121. ((936,), [1, 2, 3, 4, 6, 8, 9, 12, 13, 18, 24, 26, 36, 39, 52, 72, 78, 104, 117, 156, 234, 312, 468, 936])
  122. ]
  123. for case in testcases:
  124. my_assert_args(div, case[0], sorted(case[1]))
  125. def test_primefactors():
  126. testcases = [
  127. ((1,), [1]),
  128. ((2,), [2]),
  129. ((3,), [3]),
  130. ((4,), [2, 2]),
  131. ((8,), [2, 2, 2]),
  132. ((12,), [2, 2, 3]),
  133. ((2352,), [2, 2, 2, 2, 3, 7, 7]),
  134. ((9075,), [3, 5, 5, 11, 11])
  135. ]
  136. for case in testcases:
  137. my_assert_args(primefactors, case[0], sorted(case[1]))
  138. def test_primes_under_30():
  139. expected_output = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
  140. assert sorted(primes_under_30()) == expected_output, "Fout: primes_under_30() geeft {} in plaats van {}".format(primes_under_30(), expected_output)
  141. def test_gcd():
  142. testcases = [
  143. ((60, 70), 10)
  144. ]
  145. for case in testcases:
  146. my_assert_args(gcd, case[0], case[1])
  147. def test_lcm():
  148. testcases = [
  149. ((15, 27), 135)
  150. ]
  151. for case in testcases:
  152. my_assert_args(lcm, case[0], case[1])
  153. def test_add_frac():
  154. testcases = [
  155. ((1, 2, 1, 4), (3, 4)),
  156. ((3, 4, 1, 6), (11, 12)),
  157. ((1, 6, 3, 4), (11, 12))
  158. ]
  159. for case in testcases:
  160. my_assert_args(add_frac, case[0], case[1])
  161. if __name__ == '__main__':
  162. try:
  163. print("\x1b[0;32m")
  164. test_floor()
  165. print("Je functie floor() werkt goed!")
  166. test_ceil()
  167. print("Je functie ceil() werkt goed!")
  168. test_div()
  169. print("Je functie div(n) werkt goed!")
  170. test_primefactors()
  171. print("Je functie primefactors(n) werkt goed!")
  172. test_primes_under_30()
  173. print("Je functie primes_under_30() werkt goed!")
  174. test_gcd()
  175. print("Je functie gcd(a, b) werkt goed!")
  176. test_lcm()
  177. print("Je functie lcm(a, b) werkt goed!")
  178. test_add_frac()
  179. print("Je functie add_frac(n1, d1, n2, d2) werkt goed!")
  180. print("Gefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...")
  181. except AssertionError as ae:
  182. print("\x1b[0;31m" + str(ae))