Program.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using System;
  2. using System.ComponentModel;
  3. using System.Diagnostics;
  4. using peresdacha;
  5. internal class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. string path = "matrix.csv";
  10. string path1 = "post.csv";
  11. string path2 = "potr.csv";
  12. Minimum min = new Minimum(path, path1, path2);
  13. min.Reading();
  14. }
  15. }
  16. namespace peresdacha
  17. {
  18. internal class Minimum
  19. {
  20. public string path;
  21. public string path1;
  22. public string path2;
  23. public Minimum(string path, string path1, string path2)
  24. {
  25. this.path = path;
  26. this.path1 = path1;
  27. this.path2 = path2;
  28. }
  29. public void Reading()
  30. {
  31. int k = 0;
  32. int g = 0;
  33. int h = 0;
  34. int l = 0;
  35. //чтение из файла
  36. using (StreamReader sr = new StreamReader(path))
  37. {
  38. while (sr.EndOfStream != true)
  39. {
  40. string[] array = sr.ReadLine().Split(";");
  41. k++;
  42. g = array.Length;
  43. }
  44. }
  45. int[,] arr = new int[k, g];
  46. using (StreamReader sr = new StreamReader(path))
  47. {
  48. for (int i = 0; i < k; i++)
  49. {
  50. string[] array = sr.ReadLine().Split(";");
  51. for (int j = 0; j < g; j++)
  52. {
  53. arr[i, j] = Convert.ToInt32(array[j]);
  54. }
  55. }
  56. }
  57. using (StreamReader sr = new StreamReader(path1))
  58. {
  59. while (sr.EndOfStream != true)
  60. {
  61. string[] array = sr.ReadLine().Split(";");
  62. h = array.Length;
  63. }
  64. }
  65. using (StreamReader sr = new StreamReader(path2))
  66. {
  67. while (sr.EndOfStream != true)
  68. {
  69. string[] array = sr.ReadLine().Split(";");
  70. l = array.Length;
  71. }
  72. }
  73. int[] post = new int[h];
  74. int[] potr = new int[l];
  75. using (StreamReader sr = new StreamReader(path1))
  76. {
  77. while (sr.EndOfStream != true)
  78. {
  79. string[] array = sr.ReadLine().Split(";");
  80. for (int i = 0; i < h; i++)
  81. {
  82. post[i] = Convert.ToInt32(array[i]);
  83. }
  84. }
  85. }
  86. using (StreamReader sr = new StreamReader(path2))
  87. {
  88. while (sr.EndOfStream != true)
  89. {
  90. string[] array = sr.ReadLine().Split(";");
  91. for (int i = 0; i < l; i++)
  92. {
  93. potr[i] = Convert.ToInt32(array[i]);
  94. }
  95. }
  96. }
  97. Process(arr, k, g, post, potr, h, l);
  98. }
  99. // метод для записи матриц и проверки условия задачи
  100. public void Process(int[,] arr, int n, int m, int[] post, int[] potr, int v, int x)
  101. {
  102. int sum1 = 0;
  103. int sum2 = 0;
  104. Console.WriteLine("Исходная матрица: ");
  105. for (int i = 0; i < n; i++)
  106. {
  107. for (int j = 0; j < m; j++)
  108. {
  109. Console.Write(arr[i, j] + " ");
  110. }
  111. Console.WriteLine();
  112. }
  113. //Первый массив
  114. Console.WriteLine("");
  115. //Jnk Trace.WriteLine("Поставки: ");
  116. Console.WriteLine("");
  117. for (int i = 0; i < v; i++)
  118. {
  119. Console.Write("{0} ", post[i]);
  120. }
  121. Console.WriteLine("");
  122. Debug.WriteLine("Потребление: ");
  123. //Второй массив
  124. Console.WriteLine(" ");
  125. for (int i = 0; i < x; i++)
  126. {
  127. Console.Write("{0} ", potr[i]);
  128. }
  129. Console.WriteLine("");
  130. //Проверка суммы
  131. if (sum1 == sum2)
  132. {
  133. Debug.WriteLine("\nСуммы спроса и предложения совпадают");
  134. }
  135. else
  136. {
  137. Console.WriteLine("\nСуммы спроса и предложения не совпадают, задача не решаема");
  138. return;
  139. }
  140. int max = arr[0, 0];
  141. for (int i = 0; i < n; i++)
  142. {
  143. for (int j = 0; j < m; j++)
  144. {
  145. if (arr[i, j] > max)
  146. {
  147. max = arr[i, j];
  148. }
  149. }
  150. }
  151. int k = 0;
  152. int f = 0;
  153. int[,] nm = new int[n, m];
  154. for (int i = 0; i < n; i++)
  155. for (int j = 0; j < m; j++)
  156. nm[i, j] = 0;
  157. while (k <= max)
  158. {
  159. for (int i = 0; i < n; i++)
  160. {
  161. for (int j = 0; j < m; j++)
  162. {
  163. if (k == arr[i, j])
  164. {
  165. if (post[i] > potr[j])
  166. {
  167. nm[i, j] = potr[j];
  168. post[i] -= potr[j];
  169. potr[j] -= potr[j];
  170. }
  171. else if (post[i] < potr[j])
  172. {
  173. nm[i, j] = post[i];
  174. potr[j] -= post[i];
  175. post[i] -= post[i];
  176. }
  177. else if (post[i] == potr[j])
  178. {
  179. nm[i, j] = post[i];
  180. post[i] -= post[i];
  181. potr[j] -= potr[j];
  182. }
  183. }
  184. f = nm[i, j] * arr[i, j] + f;
  185. }
  186. }
  187. k++;
  188. }
  189. for (int i = 0; i < n; i++)
  190. {
  191. for (int j = 0; j < m; j++)
  192. {
  193. Console.Write("{0}\t", nm[i, j]);
  194. }
  195. Console.WriteLine();
  196. }
  197. //Вывод суммы
  198. Console.WriteLine("");
  199. Console.Write("Общая сумма - " + f);
  200. }
  201. }
  202. }