#!/usr/bin/python3 '''Implementacja sinusa przez rozwinięcie w szereg. Tym razem w postaci funkcji Pythona. Wywołać przez np.: python3 sinus_funkcja.py 0.5 1.e-7 Co powinno zwrócić: x= 0.5, sin(x)= 0.4794255386164159, ostatni wyraz= 5.382288910934743e-09, n wyrazów= 5, różnica z dokładnym= 1.2212897360086572e-11 ''' import math import sys def sin(x:float,thr:float) -> float: ''' INPUT: 1)x - argument funkcji 2)thr - gwarantowana dokładność OUTPUT: krotka zawierająca kolejno: 1)wartość sinusa dla podanego x 2)wartość ostatniego uwzględnionego wyrazu szeregu 3)liczbę uwzględnionych wyrazów szeregu ''' pi=3.1415926535897932 x%=2*pi if x<0: x=-x; znak=-1 else: znak=1 if x>3*pi/2: x=2*pi-x;znak=-znak elif x>pi: x=x-pi; znak=-znak elif x>pi/2: x=pi-x wynik=x; wyraz=x n=0 while abs(wyraz)>thr: n+=1 wyraz*=-x**2/(2*n*(2*n+1)) wynik+=wyraz return znak*wynik,znak*wyraz,n+1 #n+1 bo trzeba też policzyć zerowy try: #Pobieranie danych od użytkownika przez parametry wywołania programu x =float(sys.argv[1]) thr=float(sys.argv[2]) wynik=sin(x,thr) #Formatowany string. W formacie podajemy *wynik, żeby rozpakować krotkę zwracaną przez naszą funkcję print("x= {}, sin(x)= {}, ostatni wyraz= {}, n wyrazów= {}, różnica z dokładnym= {}".format(x,*wynik,wynik[0]-math.sin(x))) except: #Jeśli użytkownik coś pokiełbasi z podaniem argumentów print("Program liczy sin(x). Składnia: sinus_funkcja.py x dokladnosc")