Besedilo naloge
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.
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:
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
Rešeni problem v pythonu - 1.
Rešeni problem v pythonu - 2.
Rešeni problem v pythonu - 3.
Rešeni problem v pythonu - 4.
Rešena problema v pythonu - 5. in 6.
Rešeni problem v pythonu - 7.
Testni primeri
Definirala sem si 4 različne primere polinomov :
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 :
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