// Definicja operacji mnożenia na nawiasie i stałej. public static Nawias operator *(Nawias w1, double s1) { Nawias Iloczyn = new Nawias(w1.IloscCzynnikow); for (int i = 0; i < w1.IloscCzynnikow; i++) { Iloczyn[i] = w1[i] * s1; } return(Iloczyn); }
// Definicja operacji dodawania nawiasu i liczby public static Nawias operator +(Nawias w1, double s1) { Nawias n = new Nawias(w1.IloscCzynnikow == 0 ? 1 : w1.IloscCzynnikow); for (int i = 0; i < w1.IloscCzynnikow; i++) { n[i] = w1[i]; } n[n.IloscCzynnikow - 1] += new Czynnik(false, s1, 1); return(n); }
// Definicja operacji mnożenia na nawiasach // W nawiasach znajdują się TYLKO WIELOMIANY W POSTACI OGOLNEJ. public static Nawias operator *(Nawias w1, Nawias w2) { // Potrzebujemy informacji o najwyższym wykładniku, // który pojawi się w wynikowym wyrażeniu (bo potrzebujemy // zaalokować odpowiednio dużo miejsca) int NajwyzszyWykladnik = 1; for (int i = 0; i < w1.IloscCzynnikow; i++) { for (int j = 0; j < w2.IloscCzynnikow; j++) { // Interesuje nas mnożenie zmiennych (bo mnożenie // iksów podnosi ich wykładnik!) if (w1[i].CzyZmienna && w2[j].CzyZmienna) { // x^a * x^b = x^(a+b) int NowyWykladnik = w1[i].Wykladnik + w2[j].Wykladnik; if (NowyWykladnik > NajwyzszyWykladnik) { NajwyzszyWykladnik = NowyWykladnik; } } } } // Tworzenie nowej struktury o n+1 czynnikach // (pamiętamy o stałych!) Nawias Iloczyn = new Nawias(NajwyzszyWykladnik + 1); for (int i = 0; i < w1.IloscCzynnikow; i++) { for (int j = 0; j < w2.IloscCzynnikow; j++) { Czynnik c = w1[i] * w2[j]; int IndeksWTablicy = NajwyzszyWykladnik; // Zmienne wstawiamy sortując od największej // (na początku) do najmniejszej (na końcu) potęgi if (c.CzyZmienna) { IndeksWTablicy = NajwyzszyWykladnik - c.Wykladnik; } // Sumujemy wynik mnożenia czynników z obu wyrażeń // z odpowiednim czynnikiem z tablicy Iloczyn[IndeksWTablicy] += c; } } return(Iloczyn); }
// Definicja operacji dodawania nawiasów public static Nawias operator +(Nawias w1, Nawias w2) { // Nowy nawias będzie miał tyle współczynników, ile najdłuższy z dwóch Nawias n = new Nawias(Math.Max(w1.IloscCzynnikow, w2.IloscCzynnikow)); for (int i = 0; i < w1.IloscCzynnikow; i++) { n[i + (n.IloscCzynnikow - w1.IloscCzynnikow)] += w1[i]; } for (int j = 0; j < w2.IloscCzynnikow; j++) { n[j + (n.IloscCzynnikow - w2.IloscCzynnikow)] += w2[j]; } return(n); }
public static void utworzOgolna() { postacOgolna = new Nawias(0); for (int i = 0; i < x.Count; i++) { Nawias wn = new Nawias(1) + b[i]; // 1 czynnik - b_n for (int m = 1; m <= i; m++) { Czynnik c1 = new Czynnik(true, 1, 1), // zmienna, 1x^1 c2 = new Czynnik(false, -x[m - 1], 1); // stała, -x_n Nawias n1 = new Nawias(c1, c2); // (x - x_n) wn *= n1; } postacOgolna += wn; } }