123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- 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);
- }
- }
- }
|