Пример #1
0
        // Definicja operacji mnożenia czynnika ze stałą
        public static Czynnik operator *(Czynnik c1, double s1)
        {
            Czynnik wynik = c1;

            wynik.Wielkosc *= s1;
            return(wynik);
        }
Пример #2
0
        // Definicja operacji dodawania dwóch struktur Czynnik
        public static Czynnik operator +(Czynnik c1, Czynnik c2)
        {
            Czynnik wynik = c1;

            if (!c1.CzyMaWartosc || !c2.CzyMaWartosc)
            {
                wynik.Wielkosc    += c2.Wielkosc;
                wynik.Wykladnik   += c2.Wykladnik;
                wynik.CzyZmienna  |= c2.CzyZmienna;
                wynik.CzyMaWartosc = true;
            }
            else if (!c1.CzyZmienna && !c2.CzyZmienna)
            {
                wynik.Wielkosc += c2.Wielkosc;
            }
            else if (c1.CzyZmienna && c2.CzyZmienna)
            {
                if (c1.Wykladnik == c2.Wykladnik)
                {
                    wynik.Wielkosc += c2.Wielkosc;
                }
            }

            return(wynik);
        }
Пример #3
0
        // 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);
        }
Пример #4
0
        // Indekstator dla łatwiejszego dostępu do czynników
        public Czynnik this[int i]
        {
            get
            {
                Czynnik c = new Czynnik();
                if (i >= 0 && i < WszystkieCzynniki.Count)
                {
                    if (WszystkieCzynniki[i] != null)
                    {
                        c = (Czynnik)WszystkieCzynniki[i];
                    }
                }

                return(c);
            }
            set { WszystkieCzynniki[i] = value; }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        // Konwersja wyrażenia do stringa
        public override String ToString()
        {
            StringBuilder sb         = new StringBuilder();
            bool          sbNiePusty = false;           // Pozwala ominąć zbędne znaki na początku

            for (int i = 0; i < IloscCzynnikow; i++)
            {
                Czynnik c = WszystkieCzynniki[i] != null ? (Czynnik)WszystkieCzynniki[i] : new Czynnik(false, 0, 1);
                if (c.Wielkosc != 0.0)
                {
                    bool   czyUjemny    = c.Wielkosc < 0.0;
                    double wBezwzgledna = Math.Abs(c.Wielkosc);

                    if (sbNiePusty || czyUjemny)
                    {
                        sb.Append(czyUjemny ? " - " : " + ");
                    }
                    if (c.CzyZmienna)
                    {
                        if (wBezwzgledna != 1.0)
                        {
                            sb.Append(Math.Round(wBezwzgledna, 4));
                        }

                        sb.Append("x");

                        if (c.Wykladnik != 1.0)
                        {
                            sb.AppendFormat("^{0}", c.Wykladnik);
                        }
                    }
                    else
                    {
                        sb.Append(Math.Round(wBezwzgledna, 4));
                    }

                    sbNiePusty = true;
                }
            }

            return(sb.ToString());
        }
Пример #7
0
        // Definicja operacji mnożenia dwóch struktur Czynnik
        public static Czynnik operator *(Czynnik c1, Czynnik c2)
        {
            Czynnik wynik = c1;

            wynik.Wielkosc *= c2.Wielkosc;
            if (c1.CzyZmienna && c2.CzyZmienna)
            {
                wynik.Wykladnik += c2.Wykladnik;
            }
            else
            {
                if (c1.CzyZmienna || c2.CzyZmienna)
                {
                    wynik.Wykladnik *= c2.Wykladnik;
                }
                wynik.CzyZmienna |= c2.CzyZmienna;
            }

            return(wynik);
        }
Пример #8
0
 // Konstruktor tworzący nowe wyrażenie, które
 // będzie zawierało dwa podane czynniki (zmienne/stałe)
 public Nawias(Czynnik c1, Czynnik c2)
 {
     WszystkieCzynniki = new List <Czynnik?>();
     WszystkieCzynniki.Add(c1);
     WszystkieCzynniki.Add(c2);
 }