Untitled
unknown
plain_text
2 years ago
5.3 kB
9
Indexable
static void Main(string[] args) { Matrics a = new Matrics(@"../../../date.in"); Matrics b = new Matrics(2, 2, 0, 2); Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(a + b); Console.WriteLine(a - b); Console.WriteLine(a * b); } public class Matrics { public static readonly Random random = new Random(); public static readonly Matrics EMPTY; // NULL private int[,] values; public Matrics() {} /// <summary> /// Initialize a matrics of n x m /// </summary> /// <param name="n"> first dimension</param> /// <param name="m"> second dimension</param> public Matrics(int n, int m) { values = new int[n, m]; } /// <summary> /// Initialize a matrics of n x m with values between min and max /// </summary> /// <param name="n"> first dimension</param> /// <param name="m"> second dimension</param> /// <param name="min"> minimum value</param> /// <param name="max"> maximum value</param> public Matrics(int n, int m, int min, int max) { values = new int[n, m]; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) values[i, j] = random.Next(min, max); } public Matrics(string fileName) { TextReader reader = new StreamReader(fileName); List<string> lines = new List<string>(); string line; while ((line = reader.ReadLine()) != null) { lines.Add(line); } int n = lines.Count; int m = lines[0].Split(' ').Length; values = new int[n, m]; for (int i = 0; i < n; i++) { string[] split = lines[i].Split(' '); for (int j = 0; j < m; j++) values[i, j] = int.Parse(split[j]); } reader.Close(); } public Matrics Add(Matrics m) { int a = Math.Max(values.GetLength(0), m.values.GetLength(0)); int b = Math.Max(values.GetLength(1), m.values.GetLength(1)); Matrics matrics = new Matrics(a, b); for (int i = 0; i < a; i++) for (int j = 0; j < b; j++) matrics[i,j] = this.getValueSafe(i, j) + m.getValueSafe(i, j); return matrics; } public Matrics Substract(Matrics m) { int a = Math.Max(values.GetLength(0), m.values.GetLength(0)); int b = Math.Max(values.GetLength(1), m.values.GetLength(1)); Matrics matrics = new Matrics(a, b); for (int i = 0; i < a; i++) for (int j = 0; j < b; j++) matrics[i, j] = this.getValueSafe(i, j) - m.getValueSafe(i, j); return matrics; } public Matrics Multiply(Matrics m) { int a = values.GetLength(0); int a1 = values.GetLength(1); int b = m.values.GetLength(0); int b1 = m.values.GetLength(1); Matrics matrics = new Matrics(a, b1); for (int i = 0; i < a; i++) for (int j = 0; j < b1; j++) { int s = 0; for (int k = 0; k < a1; k++) s += this.getValueSafe(i, k) * m.getValueSafe(k, j); matrics[i, j] = s; } return matrics; } private int getValueSafe(int i, int j) { try { return values[i, j]; } catch { return 0; } } public List<string> View() { List<string> list = new List<string>(); for (int i = 0; i < values.GetLength(0); i++) { StringBuilder str = new StringBuilder(); for (int j = 0; j < values.GetLength(1); j++) str.Append(values[i, j]).Append(" "); list.Add(str.ToString()); } return list; } public override string ToString() { StringBuilder str = new StringBuilder(); for (int i = 0; i < values.GetLength(0); i++) { for (int j = 0; j < values.GetLength(1); j++) str.Append(values[i, j]).Append(" "); str.Append("\n"); } return str.ToString(); } public int this[int i, int j] { get { return values[i, j]; } set { values[i, j] = value; } } public static Matrics operator +(Matrics a, Matrics b) { return a.Add(b); } public static Matrics operator -(Matrics a, Matrics b) { return a.Substract(b); } public static Matrics operator *(Matrics a, Matrics b) { return a.Multiply(b); } }
Editor is loading...