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"); }
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; }
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; }
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; }
public Matrix(int n, Poly[,] a) { this.n = n; this.a = a; }