using System; using System.ComponentModel; using System.Diagnostics; using peresdacha; internal class Program { static void Main(string[] args) { string path = "matrix.csv"; string path1 = "post.csv"; string path2 = "potr.csv"; Minimum min = new Minimum(path, path1, path2); min.Reading(); } } namespace peresdacha { internal class Minimum { public string path; public string path1; public string path2; public Minimum(string path, string path1, string path2) { this.path = path; this.path1 = path1; this.path2 = path2; } public void Reading() { int k = 0; int g = 0; int h = 0; int l = 0; //чтение из файла using (StreamReader sr = new StreamReader(path)) { while (sr.EndOfStream != true) { string[] array = sr.ReadLine().Split(";"); k++; g = array.Length; } } int[,] arr = new int[k, g]; using (StreamReader sr = new StreamReader(path)) { for (int i = 0; i < k; i++) { string[] array = sr.ReadLine().Split(";"); for (int j = 0; j < g; j++) { arr[i, j] = Convert.ToInt32(array[j]); } } } using (StreamReader sr = new StreamReader(path1)) { while (sr.EndOfStream != true) { string[] array = sr.ReadLine().Split(";"); h = array.Length; } } using (StreamReader sr = new StreamReader(path2)) { while (sr.EndOfStream != true) { string[] array = sr.ReadLine().Split(";"); l = array.Length; } } int[] post = new int[h]; int[] potr = new int[l]; using (StreamReader sr = new StreamReader(path1)) { while (sr.EndOfStream != true) { string[] array = sr.ReadLine().Split(";"); for (int i = 0; i < h; i++) { post[i] = Convert.ToInt32(array[i]); } } } using (StreamReader sr = new StreamReader(path2)) { while (sr.EndOfStream != true) { string[] array = sr.ReadLine().Split(";"); for (int i = 0; i < l; i++) { potr[i] = Convert.ToInt32(array[i]); } } } Process(arr, k, g, post, potr, h, l); } // метод для записи матриц и проверки условия задачи public void Process(int[,] arr, int n, int m, int[] post, int[] potr, int v, int x) { int sum1 = 0; int sum2 = 0; Console.WriteLine("Исходная матрица: "); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write(arr[i, j] + " "); } Console.WriteLine(); } //Первый массив Console.WriteLine(""); //Jnk Trace.WriteLine("Поставки: "); Console.WriteLine(""); for (int i = 0; i < v; i++) { Console.Write("{0} ", post[i]); } Console.WriteLine(""); Debug.WriteLine("Потребление: "); //Второй массив Console.WriteLine(" "); for (int i = 0; i < x; i++) { Console.Write("{0} ", potr[i]); } Console.WriteLine(""); //Проверка суммы if (sum1 == sum2) { Debug.WriteLine("\nСуммы спроса и предложения совпадают"); } else { Console.WriteLine("\nСуммы спроса и предложения не совпадают, задача не решаема"); return; } int max = arr[0, 0]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (arr[i, j] > max) { max = arr[i, j]; } } } int k = 0; int f = 0; int[,] nm = new int[n, m]; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) nm[i, j] = 0; while (k <= max) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (k == arr[i, j]) { if (post[i] > potr[j]) { nm[i, j] = potr[j]; post[i] -= potr[j]; potr[j] -= potr[j]; } else if (post[i] < potr[j]) { nm[i, j] = post[i]; potr[j] -= post[i]; post[i] -= post[i]; } else if (post[i] == potr[j]) { nm[i, j] = post[i]; post[i] -= post[i]; potr[j] -= potr[j]; } } f = nm[i, j] * arr[i, j] + f; } } k++; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write("{0}\t", nm[i, j]); } Console.WriteLine(); } //Вывод суммы Console.WriteLine(""); Console.Write("Общая сумма - " + f); } } }