Esempio n. 1
0
 //从游标当前位置开始构造一个B类结点
 private bool ConstructMultinomialB(out MultinomialB out1)
 {
     out1 = null;
     try
     {
         out1 = new MultinomialB(1);
     }
     catch (Exception)
     {
         Error = "内存空间不足";
         return false;
     }
     while (Seek < Fm.Length)
     {
         if (Fm[Seek] != '^' && IsOperator(Fm[Seek]) || Fm[Seek] == '(')
             break;
         else if (IsLetter(Fm[Seek]))
         {
             MultinomialA a;
             try
             {
                 a = new MultinomialA(Fm[Seek++]);
             }
             catch (Exception)
             {
                 Error = "内存空间不足";
                 return false;
             }
             if (Seek < Fm.Length && Fm[Seek] == '^')
             {
                 Double d;
                 if (!Degree(out d))
                     return false;
                 a.index = d;
             }
             out1.Insert(a);
         }
         else if (IsESC(Fm[Seek]))
             Seek++;
         else
         {
             if (IsNumber(Fm[Seek]))
                 Error = "字母后面不能直接跟数字";
             else
                 Error = "存在非法字符:\"" + Fm[Seek] + "\"";
             return false;
         }
     }
     return true;
 }
Esempio n. 2
0
 //插入一个B类结点(实为多项式的加法运算)
 public void Insert(MultinomialB a)
 {
     if (a.IsZero())
         return;
     int n = 0;
     while (n < count)
     {
         if (MultinomialB.Compare(a, Buf[n]) <= 0)
             break;
         n++;
     }
     if (n < count && MultinomialB.Compare(a, Buf[n]) == 0)
     {
         Buf[n].coefficient += a.coefficient;
         if (Buf[n].coefficient == 0)
             Remove(n);
     }
     else
     {
         if (count >= M)
             Enlarge();
         if (n < count)
         {
             for (int i = count; i > n; i--)
                 Buf[i] = Buf[i - 1];
         }
         try
         {
             Buf[n] = new MultinomialB(a);
         }
         catch (Exception)
         {
             throw;
         }
         count++;
     }
 }
Esempio n. 3
0
 //构造函数
 public MultinomialC(MultinomialB a)
 {
     M = BM;
     try
     {
         Buf = new MultinomialB[M];
     }
     catch (Exception)
     {
         throw;
     }
     Insert(a);
 }
Esempio n. 4
0
 //复制构造函数
 public MultinomialC(MultinomialC a)
 {
     BM = a.BM;
     M = a.M;
     count = a.count;
     try
     {
         Buf = new MultinomialB[M];
         for (int i = 0; i < count; i++)
             Buf[i] = new MultinomialB(a.Buf[i]);
     }
     catch (Exception)
     {
         throw;
     }
 }
Esempio n. 5
0
 //B类结点的乘法运算
 public static MultinomialB MUL(MultinomialB a, MultinomialB b)
 {
     try
     {
         if (a.coefficient == 0 || b.coefficient == 0)
             return new MultinomialB(0);
     }
     catch (Exception)
     {
         throw;
     }
     MultinomialB c;
     try
     {
         c = new MultinomialB(a);
     }
     catch (Exception)
     {
         throw;
     }
     c.coefficient *= b.coefficient;
     for (int i = 0; i < b.count; i++)
         c.Insert(b.Buf[i]);
     return c;
 }
Esempio n. 6
0
 //比较两个B类结点的大小(系数部分不算)
 public static int Compare(MultinomialB a, MultinomialB b)
 {
     int i = 0, n;
     while (i < a.count && i < b.count)
     {
         n = MultinomialA.Compare(a.Buf[i], b.Buf[i]);
         if (n != 0)
             return n;
         i++;
     }
     return a.count - b.count;
 }