OBOWIĄZKOWE DO PRZESŁANIA: 5.2 lub 5.3
Stworzyć plik rekurencja.py i zapisać w nim funkcje z zadań 4.3 (factorial), 4.4 (fibonacci). Sprawdzić operacje importu i przeładowania modułu.
import rekurencja # import rekurencja as rek # from rekurencja import * # from rekurencja import factorial # from rekurencja import fibonacci as fib print(rekurencja.factorial(6)) print(rekurencja.fibonacci(5))
Stworzyć plik fracs.py i zapisać w nim funkcje do działań na ułamkach. Ułamek będzie reprezentowany przez listę dwóch liczb całkowitych [licznik, mianownik]. Napisać kod testujący moduł fracs. Nie należy korzystać z klasy Fraction z modułu fractions. Można wykorzystać funkcję fractions.gcd() [Py2, zwraca liczby dodatnie lub ujemne] lub math.gcd() [Py3, zwraca liczby nieujemne] implementującą algorytm Euklidesa.
#from fractions import gcd # Py2 from math import gcd # Py3 def add_frac(frac1, frac2): pass # frac1 + frac2 def sub_frac(frac1, frac2): pass # frac1 - frac2 def mul_frac(frac1, frac2): pass # frac1 * frac2 def div_frac(frac1, frac2): pass # frac1 / frac2 def is_positive(frac): pass # bool, czy dodatni def is_zero(frac): pass # bool, typu [0, x] def cmp_frac(frac1, frac2): pass # -1 | 0 | +1 def frac2float(frac): pass # konwersja do float # f1 = [-1, 2] # -1/2 # f2 = [1, -2] # -1/2 (niejednoznaczność) # f3 = [0, 1] # zero # f4 = [0, 2] # zero (niejednoznaczność) # f5 = [3, 1] # 3 # f6 = [6, 2] # 3 (niejednoznaczność) import unittest class TestFractions(unittest.TestCase): def setUp(self): self.zero = [0, 1] def test_add_frac(self): self.assertEqual(add_frac([1, 2], [1, 3]), [5, 6]) def test_sub_frac(self): pass def test_mul_frac(self): pass def test_div_frac(self): pass def test_is_positive(self): pass def test_is_zero(self): pass def test_cmp_frac(self): pass def test_frac2float(self): pass def tearDown(self): pass if __name__ == '__main__': unittest.main() # uruchamia wszystkie testy
Stworzyć plik polys.py i zapisać w nim funkcje do działań na wielomianach. Wielomian będzie reprezentowany przez listę swoich współczynników, np. [a0, a1, a2] dla a0 + a1*x + a2*x*x. Napisać kod testujący moduł polys.
def add_poly(poly1, poly2): pass # poly1(x) + poly2(x) def sub_poly(poly1, poly2): pass # poly1(x) - poly2(x) def mul_poly(poly1, poly2): pass # poly1(x) * poly2(x) def is_zero(poly): pass # bool, [0], [0,0], itp. def eq_poly(poly1, poly2): pass # bool, porównywanie poly1(x) == poly2(x) def eval_poly(poly, x0): pass # poly(x0), algorytm Hornera def combine_poly(poly1, poly2): pass # poly1(poly2(x)), trudne! def pow_poly(poly, n): pass # poly(x) ** n def diff_poly(poly): pass # pochodna wielomianu # p1 = [2, 1] # W(x) = 2 + x # p2 = [2, 1, 0] # jw (niejednoznaczność) # p3 = [-3, 0, 1] # W(x) = -3 + x^2 # p4 = [3] # W(x) = 3, wielomian zerowego stopnia # p5 = [0] # zero # p6 = [0, 0, 0] # zero (niejednoznaczność) import unittest class TestPolynomials(unittest.TestCase): def setUp(self): self.p1 = [0, 1] # W(x) = x self.p2 = [0, 0, 1] # W(x) = x^2 def test_add_poly(self): self.assertEqual(add_poly(self.p1, self.p2), [0, 1, 1]) def test_sub_poly(self): pass def test_mul_poly(self): pass def test_is_zero(self): pass def test_eq_poly(self): pass def test_eval_poly(self): pass def test_combine_poly(self): pass def test_pow_poly(self): pass def test_diff_poly(self): pass def tearDown(self): pass if __name__ == '__main__': unittest.main() # uruchamia wszystkie testy
Stworzyć plik sparsepolys.py i zapisać w nim funkcje do działań na wielomianach o wysokim rzędzie, ale małej liczbie wyrazów. Wielomian będzie reprezentowany przez słownik, {0: a0, 1: a1, 2: a2} dla a0 + a1*x + a2*x*x. Napisać kod testujący moduł sparsepolys.
p1 = {10: 1, 0: 2} # W(x) = x**10 + 2 p2 = {100: 4, 5: 3} # W(x) = 4 * x**100 + 3 * x**5 p3 = {0: 3} # W(x) = 3, wielomian zerowego stopnia p4 = {0: 0} # zero p5 = {5: 0} # zero (niejednoznaczność)
Stworzyć plik sparsematrices.py i zapisać w nim funkcje do działań na macierzach rzadkich, czyli macierzach o małej liczbie niezerowych współczynników. Macierz będzie reprezentowana przez słownik, {(1,2): 3, (10, 20): 30} dla macierzy o niezerowych współczynnikach M[1, 2] = 3, M[10, 20] = 30. Zakładamy, że macierze są kwadratowe, a ich wymiar jest odpowiednio duży. Napisać kod testujący moduł sparsematrices.
def add_sparse(sparse1, sparse2): pass # sparse1 + sparse2 def sub_sparse(sparse1, sparse2): pass # sparse1 - sparse2 def mul_sparse(sparse1, sparse2): pass # sparse1 * sparse2 def is_diagonal(sparse): pass # bool, czy diagonalna def is_empty(sparse): pass # bool, czy zerowa s1 = {} # macierz zerowa s2 = {(2, 2): 3, (5, 5): 9} # macierz diagonalna