Program.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.IO;
  8. namespace MinElKuzminEkz
  9. {
  10. internal class Program
  11. {
  12. private static StreamWriter traceWriter;
  13. private static StreamWriter debugWriter;
  14. public static void Main(string[] args)
  15. {
  16. try
  17. {
  18. // Открываем файлы для записи trace и debug логов
  19. traceWriter = new StreamWriter("trace_log.txt");
  20. debugWriter = new StreamWriter("debug_log.txt");
  21. // Добавляем слушателя для Trace
  22. Trace.Listeners.Add(new TextWriterTraceListener(traceWriter));
  23. Trace.AutoFlush = true;
  24. // Добавляем слушателя для Debug
  25. Debug.Listeners.Add(new TextWriterTraceListener(debugWriter));
  26. Debug.AutoFlush = true;
  27. Trace.WriteLine("Файл успешно считан");
  28. // Чтение данных из файла
  29. string[] lines = File.ReadAllLines("C:\\Users\\7\\source\\repos\\methodMinimalElKuzmin\\methodMinimalElKuzmin\\test.txt");
  30. // Инициализация массивов на основе данных из файла
  31. int[] a = Array.ConvertAll(lines[0].Split(','), int.Parse);
  32. int[] b = Array.ConvertAll(lines[1].Split(','), int.Parse);
  33. double[,] costs = new double[3, 3];
  34. // Заполнение матриц costs и supply_plan
  35. int index = 2; // начинаем с третьей строки файла
  36. for (int i = 0; i < 3; i++)
  37. {
  38. string[] costValues = lines[index].Split(',');
  39. for (int j = 0; j < 3; j++)
  40. {
  41. costs[i, j] = double.Parse(costValues[j]);
  42. }
  43. index++;
  44. }
  45. Trace.WriteLine("Матрица инициализирована");
  46. if (Utility.CheckClosure(a, b))
  47. {
  48. Console.WriteLine("Транспортная задача является закрытой");
  49. }
  50. else
  51. {
  52. Console.WriteLine("Транспортная задача является открытой");
  53. }
  54. // Применение метода
  55. int[,] supply_plan = Utility.MinElementMethod(a, b, costs); //MinElementMethod
  56. // Вывод плана поставок
  57. for (int i = 0; i < supply_plan.GetLength(0); i++)
  58. {
  59. for (int j = 0; j < supply_plan.GetLength(1); j++)
  60. {
  61. Console.Write($"{supply_plan[i, j]} ");
  62. }
  63. Console.WriteLine();
  64. }
  65. // Проверка на вырожденность опорного плана
  66. if (Utility.CheckIfVyrozhdeno(supply_plan))
  67. {
  68. Console.WriteLine("Опорный план вырожденный.");
  69. }
  70. else
  71. {
  72. Console.WriteLine("Опорный план невырожденный.");
  73. }
  74. // Расчёт целевой функции
  75. Console.WriteLine($"Целевая функция: {Utility.CalculateCelevayaFunction(costs, supply_plan)}");
  76. Console.WriteLine("Опорный план оптимален.");
  77. Trace.WriteLine("Программа успешно завершила рассчет");
  78. }
  79. catch (Exception ex)
  80. {
  81. Trace.WriteLine($"Error: {ex.Message}");
  82. Console.WriteLine($"Error: {ex.Message}");
  83. }
  84. finally
  85. {
  86. // Закрываем файлы после использования
  87. traceWriter.Close();
  88. debugWriter.Close();
  89. Console.ReadKey();
  90. }
  91. }
  92. }
  93. //класс utility
  94. internal class Utility
  95. {
  96. }
  97. }