Razred Polinomi

Razred Polinomi

Avtor: Tjaša Panič

Besedilo naloge

(besedilonaloge.jpg)

Opis problema

Definirati moramo razred Polinom, katerega konstruktor vsebuje komponento koeficienti. Ti koeficienti so podani v seznamu : [a0, a1, a2, … , an ], kjer je a0 prosti člen, an pa vodilni koeficient. V razredu še je potrebno definirati nekatere metode, s katerimi določimo stopnjo polinoma in vrednost polinoma v neki točki , preverimo če sta dva polinoma enaka, vrnemo vsoto in produkt dveh polinomov ter vrnemo niz ki predstavlja polinom.

Potem se z pomočjo že definiranih metod v razredu lotimo reševanja podanih problemov. Torej kako sešteti več polinomov, vrniti tisti polinom, ki ima pri danem x največjo vrednost, vrniti polinom z maksimalno stopnjo, datoteko popraviti tako, da so v njej le polinomi z celoštevilskimi koeficienti in prešteti koliko različnih stopenj imajo polinomi.

Sama pa sem si izbrala problema, kako zmnožiti več polinomov, ki so podani v tabeli ter kako v tabeli poiskati tisti polinom, ki ima največji prosti člen, če pa jih je več, vrniti prvega v tabeli.

Ključni korki v pythonu

Konstruktor razreda Polinom zgradimo le z ene komponente in to je seznam koeficientov. Stopnjo polinoma določimo z pomočjo dolžine seznama koeficientov.

Za določanje vrednosti polinoma v neki točki uporabimo Hornerjev algoritem.

  • naši podani koeficienti v seznamu b
  • naš izračunani seznam c in iskana vrednost c [-1]

Formula po kateri izračunamo elemente seznama c : d= c[i]*a + b[i+1]

Dva polinoma sta enaka če imata enako dolžino seznama koeficientov ter enake istoležne elemente. Niz, ki predstavlja polinom, oblikujemo na podlagi koeficientov. Torej koeficientom dodajamo x (če ni prosti člen) ter ustrezno stopnjo x-a.

Dva polinoma seštejemo tako, da seštejemo istoležne koeficiente. Pri množenju dveh polinomov pa moramo vsaki koeficient množiti z vsakim koeficientom.

Več polinomov bomo sešteli z pomočjo že narejene metode v razredu, Vsota(self, q), prav tako bomo z pomočjo že narejene metode Vrednost(self,a), v datoteki določili polinom, ki ima največjo vrednost pri danem a.

Pri problemu za iskanje polinoma maksimalne stopnje si še v razredu definiramo dve metode:

  • Dolzina (self), ki vrne dolžino seznama koeficientov
  • vrni_koef (self, x), ki vrne koeficient polinom na x-tem mestu seznama koeficientov Potem si še definiramo pomožno funkcijo primerjaj(p0,p1), z katero primerjam dva polinoma in njune istoležne koeficiente.

Datoteko popravimo tako, da iz nje izbrišemo polinome, ki nimajo celoštevilskih koeficientov. Najprej celo datoteko odpremo, gremo po njenih vrsticah, in če posamezna vrstica vsebujejo same celoštevilske koeficiente, jo dodamo v nek seznam. Nato pa ta seznam ponovno zapišemo v datoteko.

Število različnih stopenj preštejemo tako, da si shranimo stopnjo vsakega polinoma, ter jo potem dodamo v nek seznam, če še te stopnje ni v njem. Polinom z največjim prostim členom poiščemo tako, da primerjamo koeficiente na prvem mestu v seznamu koeficientov, saj ti predstavljajo prsti člen. Če je več polinomov z enakim največjim prostim členom, vrne prvega v tabeli. Več polinomov bomo zmnožili z pomočjo že narejene metode Zmnozek(self, q).

Program v pythonu

(program1.jpg) (program2.jpg) (program3.jpg)

Rešeni problem v pythonu - 1.

(problem1.jpg)

Rešeni problem v pythonu - 2.

(problem2.jpg)

Rešeni problem v pythonu - 3.

(problem3.jpg)

Rešeni problem v pythonu - 4.

(problem4.jpg)

Rešena problema v pythonu - 5. in 6.

(problem56.jpg)

Rešeni problem v pythonu - 7.

(problem7.jpg)

Testni primeri

Definirala sem si 4 različne primere polinomov :

  • A=Polinom([1,2,3])
  • B=Polinom([-2,5,1,4])
  • C=Polinom([5,0,2,3])
  • D=Polinom([])

Na polinomu A in D sem testirala metodo stopnja(self). Ker je seznam koeficientov pri polinomu D prazen, nam vrne -1. Na polinomu A in C pa sem testirala metodo Vrednost(self,a). Vrne nam različne vrednosti.

Definiram si še polinom :

  • E=Polinom([1,2,3])

Z metodo Equals(self,q), preverimo, če sta dva polinoma enaka. Iz rešitve lahko vidimo, da sta E in A res enaka. Medtem ko pa sta B in C različna polinoma.

Na polinomu A in C sem testirala metodo _str_(self). Kot vidimo se pri polinomu C izpiše niz, kjer ni stopnje x^1 , ker je v seznamu koeficientov na tem mestu ničla.

Seštela sem polinoma A in B ter C in D. Posamezno pa sem zmnožila polinom A z B, C in D. Pri množenju A z D nam ne izpiše ničesar, ker je polinom D enak 0.

Preverim funkcijo, ki sešteje 3 polinome in funkcijo, ki zmnoži 3 polinome, npr. polinome A, B in C. Potem testiram še funkcijo, ki vrne polinom z največjim prostim členom. Preverim še funkcijo, ki vrne koliko različnih stopenj je v seznamu polinomov.

Testni primer za funkcijo max_stopnja(l1), ki vrne polinom maksimalne stopnje. Ker pa sta B in C oba enake stopnje, vrne tistega, ki ima večji vodilni koeficient. In to je polinom B.

Funkcija celostevilski_koeficienti(dat)iz datoteke polinomi2.txt izbriše polinome, ki nimajo samo celoštevilske koeficiente. Pred klicem funkcije je ta datoteka bila enaka kot datoteka polinomi1.txt, kasneje pa se spremeni.

Film

0%
0%