Exemple #1
0
 static void Main(string[] args)
 {
     Console.WriteLine("Enter file name.");
     Console.WriteLine("On first line file must contains n - size of determinant.");
     Console.WriteLine("On next n * n lines print elements of matrix in order left-right, top-bottom(e.x. print elements of first line of matrix, then second line etc.)");
     Console.WriteLine("Result was in " + resFile + ".");
     string file = Console.ReadLine();
     StreamReader f = new StreamReader(file);
     int n = int.Parse(f.ReadLine());
     Poly[,] a = new Poly[n, n];
     for (int i = 0; i < n; i++)
     {
         for (int j = 0; j < n; j++)
         {
             a[i, j] = new Poly(f.ReadLine());
         }
     }
     f.Close();
     Matrix m = new Matrix(n, a);
     StreamWriter w = new StreamWriter(resFile);
     r.Add(new StringBuilder("$" + m.ToString()));
     string res1 = m.Det(1, new Poly("1"), "").ToString();
     r.Add(new StringBuilder(res1 + "$"));
     string result = string.Join<StringBuilder>(" =\n ", r);
     w.WriteLine(result);
     w.Close();
     int b = 0;
     for (int i = 0; i < result.Length; i++)
     {
         if (b < 0 || (result[i] == '=' && b != 0))
         {
             Console.WriteLine("Bad brackets");
             break;
         }
         if (result[i] == '(')
             b++;
         if (result[i] == ')')
             b--;
     }
     if (b == 0)
         Console.WriteLine("Good brackets");
 }
Exemple #2
0
 public Poly Det(int q, Poly prev, string sign)
 {
     if (Program.r.Count == q)
         Program.r.Add(new StringBuilder());
     if (n == 1)
     {
         Program.r[q].Append(sign + "(" + (prev * a[0, 0]).ToString() + ")");
         return a[0, 0];
     }
     Poly res = new Poly();
     if (sign != "")
         for (int i = q; i < Program.r.Count; i++)
             Program.r[i].Append(sign + "(");
     for (int i = 0; i < n; i++)
     {
         Matrix add = Addition(0, i);
         string s = "";
         if (i % 2 == 0)
         {
             if (i != 0)
             {
                 s = " + ";
             }
             res += a[0, i] * add.Det(q + 1, prev * a[0, i], s);
         }
         else
         {
             s = " - ";
             res -= a[0, i] * add.Det(q + 1, prev * a[0, i], s);
         }
         Program.r[q].Append(s + "(" + (a[0, i] * prev).ToString() + ") * " + add.ToString());
     }
     if (sign != "")
         for (int i = q; i < Program.r.Count; i++)
             Program.r[i].Append(")");
     return res;
 }
Exemple #3
0
 public static Poly operator -(Poly p1, Poly p2)
 {
     Poly res = new Poly();
     for (int i = 0; i < size; i++)
         for (int j = 0; j < size; j++)
             res[i, j] = p1[i, j] - p2[i, j];
     return res;
 }
Exemple #4
0
 public static Poly operator *(Poly p1, Poly p2)
 {
     Poly res = new Poly();
     for (int i1 = 0; i1 < size; i1++)
         for (int i2 = 0; i2 < size; i2++)
             for (int i3 = 0; i3 < size; i3++)
                 for (int i4 = 0; i4 < size; i4++)
                     if (i1 + i3 < size && i2 + i4 < size)
                         res[i1 + i3, i2 + i4] += p1[i1, i2] * p2[i3, i4];
     return res;
 }
Exemple #5
0
 public Matrix(int n, Poly[,] a)
 {
     this.n = n;
     this.a = a;
 }