Browse Source

Добавьте файлы проекта.

nasty 2 years ago
parent
commit
ca49a8c3b5

+ 25 - 0
Мат_моделирование_1.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32328.378
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Мат_моделирование_1", "Мат_моделирование_1\Мат_моделирование_1.csproj", "{9FBB52D5-2D21-4C47-849A-087096054522}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{9FBB52D5-2D21-4C47-849A-087096054522}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9FBB52D5-2D21-4C47-849A-087096054522}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9FBB52D5-2D21-4C47-849A-087096054522}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9FBB52D5-2D21-4C47-849A-087096054522}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {5CCBC911-0A59-4BC7-8BA3-1B7D2C4CB748}
+	EndGlobalSection
+EndGlobal

+ 344 - 0
Мат_моделирование_1/Program.cs

@@ -0,0 +1,344 @@
+using System;
+
+namespace Мат_моделирование_1
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            while (true)
+            {
+                Console.WriteLine("Сделать первоначальное распределение по методу северо-западного угла в транспортной задаче с учетом преобразования исходной матрицы А в матрицу В по правилу:В = {mахл + 1}-А");
+                uint r, c;//размерности матрицы и векторов
+                while (true)//ввод потребителей(размерности по столбцам)
+                {
+                    try
+                    {
+                        Console.Write("Введите количество потребителей: ");
+                        c = Convert.ToUInt32(Console.ReadLine());
+                        if (c < 2)
+                        {
+                            Console.WriteLine("Потребителей должно быть не менее двух! Повторите ввод");
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                    catch
+                    {
+                        Console.WriteLine("Введены некорректные данные!");
+                    }
+                }
+                while (true)//ввод поставщиков(размерности по стокам)
+                {
+                    try
+                    {
+                        Console.Write("Введите количество поставщиков: ");
+                        r = Convert.ToUInt32(Console.ReadLine());
+                        if (r < 2)
+                        {
+                            Console.WriteLine("Поставщиков должно быть не менее двух! Повторите ввод");
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                    catch
+                    {
+                        Console.WriteLine("Введены некорректные данные!");
+                    }
+                }
+                int i = 0, j = 0;//переменные для циклов
+                uint[,] matrxA = new uint[r, c];//матрица затрат
+                Console.WriteLine("Ввод таблицы затрат на перевозку продукции:");//ввод данных в таблицу затрат
+                for (i = 0; i < matrxA.GetLength(0); i++)
+                {
+                    for (j = 0; j < matrxA.GetLength(1); j++)
+                    {
+
+                        while (true)
+                        {
+                            try
+                            {
+                                Console.Write($"Введите стоимость перевозки от {i + 1} поставщика  к {j + 1} потребителю: ");
+                                matrxA[i, j] = Convert.ToUInt32(Console.ReadLine());
+                                break;
+                            }
+                            catch
+                            {
+                                Console.WriteLine("Введены некорректные данные!");
+                            }
+                        }
+
+                    }
+                    Console.WriteLine();
+                }
+
+                Console.WriteLine("Таблица затрат на перевозку продукции:");//вывод таблицы затрат на экран
+                for (i = 0; i < matrxA.GetLength(0); i++)
+                {
+                    for (j = 0; j < matrxA.GetLength(1); j++)
+                    {
+                        Console.Write(matrxA[i, j] + "\t");
+                    }
+                    Console.WriteLine();
+                }
+                char otv;//переменная для диалога с пользователем
+                //Изменение матрицы
+                while (true)
+                {
+                    while (true)
+                    {
+                        try
+                        {
+                            Console.Write("\nХотите изменить данные о таблице?\nДа(N)/Нет(любая клавиша)\nОтвет: ");
+                            otv = Convert.ToChar(Console.ReadLine());
+                            break;
+                        }
+                        catch
+                        {
+                            Console.WriteLine("Введены некорректные данные!");
+                        }
+                    }
+                    if (otv.Equals('n') || otv.Equals('т') || otv.Equals('N') || otv.Equals('Т'))
+                    {
+                        break;
+                    }
+                    else
+                    {
+                        Console.Write("Введите номер поставщика, затем номер потребителя, который вы хотите изменить\nОтвет:\n");
+                        while (true)
+                        {
+                            i = Convert.ToInt32(Console.ReadLine());
+                            j = Convert.ToInt32(Console.ReadLine());
+                            if (i < c + 1 && j < r + 1)
+                            {
+                                while (true)
+                                {
+                                    try
+                                    {
+                                        Console.Write("Введите новое значение: ");
+                                        uint temp = Convert.ToUInt32(Console.ReadLine());
+                                        if (temp != 0)
+                                        {
+                                            Console.WriteLine($" Была изменена {i} {j} ячейка таблицы c {matrxA[i - 1, j - 1]} на {temp}");
+                                            matrxA[i - 1, j - 1] = temp;
+                                            break;
+                                        }
+                                        else
+                                        {
+                                            Console.WriteLine("Вы ввели нулевое значение! Повторите ввод");
+                                        }
+                                    }
+                                    catch
+                                    {
+                                        Console.WriteLine("Введены некорректные данные!");
+                                    }
+                                }
+                                break;
+                            }
+                            else
+                            {
+                                Console.WriteLine("Введенная размерность не соответствует матрице! Повторите ввод");
+                            }
+                        }
+                    }
+                }
+
+                Console.Clear();
+                uint max = 0;//нахождение максимальной затраты на перевозку
+                for (i = 0; i < matrxA.GetLength(0); i++)
+                {
+                    for (j = 0; j < matrxA.GetLength(1); j++)
+                    {
+                        if (matrxA[i, j] > max)
+                        {
+                            max = matrxA[i, j];
+                        }
+                    }
+                }
+                Console.WriteLine($"Максимальная затрата на перевозку равна - {max}");
+                uint[,] matrxB = new uint[r, c];//новая таблица затрат, пересчитанная по правилу, указанному в задании
+                for (i = 0; i < matrxB.GetLength(0); i++)
+                {
+                    for (j = 0; j < matrxB.GetLength(1); j++)
+                    {
+                        matrxB[i, j] = (max + 1) - matrxA[i, j];
+                    }
+
+                }
+                Console.WriteLine("Пересчитанная таблица затрат:");//вывод на экран новой таблицы затрат
+                for (i = 0; i < matrxB.GetLength(0); i++)
+                {
+                    for (j = 0; j < matrxB.GetLength(1); j++)
+                    {
+                        Console.Write(matrxB[i, j] + "\t");
+                    }
+                    Console.WriteLine();
+                }
+                uint[] m = new uint[r];//вектор мощности поставщиков
+                uint[] n = new uint[c];//вектор спроса потребителей
+                uint valueM = 0, valueN = 0;
+                while (true)
+                {
+                    Console.WriteLine("Ввод данных о количестве продукции поставщиков (m):");//ввод данных в вектор мощности поставщиков
+                    for (i = 0; i < m.Length; i++)
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                Console.Write($"Введите количество продукции у {i + 1} поставщика: ");
+                                m[i] = Convert.ToUInt32(Console.ReadLine());
+                                break;
+                            }
+                            catch
+                            {
+                                Console.WriteLine("Введены некорректные данные!");
+                            }
+                        }
+                    }
+                    Console.WriteLine("Ввод данных о запрашиваемом количестве продукции потребителями(n):");//ввод данных в вектор спроса потребителей
+                    for (i = 0; i < n.Length; i++)
+                    {
+                        while (true)
+                        {
+                            try
+                            {
+                                Console.Write($"Введите количество необходимой продукции для {i + 1} потребителя: ");
+                                n[i] = Convert.ToUInt32(Console.ReadLine());
+                                break;
+                            }
+                            catch
+                            {
+                                Console.WriteLine("Введены некорректные данные!");
+                            }
+                        }
+                    }
+                    for (i = 0; i < m.Length; i++)
+                    {
+                        valueM += m[i];
+                    }
+                    for (i = 0; i < n.Length; i++)
+                    {
+                        valueN += n[i];
+                    }
+                    if (valueM == valueN)
+                    {
+                        break;
+                    }
+                    else//проверка на равенство суммы элементов векторов
+                    {
+                        Console.WriteLine("Вектор мощности (m) и cпроса (n) должны быть равны, повторите ввод!");
+                        valueM = 0;
+                        valueN = 0;
+                    }
+                }
+                Console.WriteLine("Вектор мощности (m):");//вывод на экран
+                for (i = 0; i < m.Length; i++)
+                {
+                    Console.Write($"{m[i]} ");
+                }
+                Console.WriteLine("\nВектор спроса (n):");//вывод на экран
+                for (i = 0; i < n.Length; i++)
+                {
+                    Console.Write($"{n[i]} ");
+                }
+
+                Console.WriteLine("\nМатрица тарифов:");//вывод на экран матрицы и векторов
+                Console.Write("  ");
+                for (i = 0; i < n.Length; i++)
+                {
+                    Console.Write($"{n[i]} ");
+                }
+                Console.WriteLine();
+                for (i = 0; i < matrxB.GetLength(0); i++)
+                {
+                    Console.Write($"{m[i]} ");
+                    for (j = 0; j < matrxB.GetLength(1); j++)
+                    {
+                        Console.Write($"{matrxB[i, j]} ");
+                    }
+                    Console.WriteLine();
+                }
+                uint[,] raspr = new uint[r, c];//массив для распределения
+                for (i = 0; i < raspr.GetLength(0); i++)
+                {
+                    for (j = 0; j < raspr.GetLength(1); j++)
+                    {
+                        raspr[i, j] = 0;
+                    }
+                }
+                i = 0;
+                j = 0;
+                //алгоритм распределения
+                while (i < r && j < c)
+                {
+                    if (n[j] > m[i])
+                    {
+                        raspr[i, j] = m[i];
+                        n[j] -= m[i];
+                        m[i] = 0;
+                        i++;
+                    }
+                    else
+                    {
+                        raspr[i, j] = n[j];
+                        m[i] -= n[j];
+                        n[j] = 0;
+                        j++;
+                    }
+                }
+                Console.WriteLine();
+                for (i = 0; i < raspr.GetLength(0); i++)
+                {
+                    for (j = 0; j < raspr.GetLength(1); j++)
+                    {
+                        Console.Write($"{raspr[i, j]} ");
+                    }
+                    Console.WriteLine();
+                }
+                uint F = 0;//нахождение функции распределения
+                for (i = 0; i < raspr.GetLength(0); i++)
+                {
+                    for (j = 0; j < raspr.GetLength(1); j++)
+                    {
+                        if (raspr[i, j] != 0)
+                        {
+                            F += raspr[i, j] * matrxB[i, j];
+                        }
+                    }
+                }
+                Console.WriteLine($"F = {F} у.д.е");
+                while (true)
+                {
+                    try
+                    {
+                        Console.Write("\nПовторить программу?\nДа(Y)/Нет(N)\nОтвет: ");
+                        otv = Convert.ToChar(Console.ReadLine());
+                        break;
+                    }
+                    catch
+                    {
+                        Console.WriteLine("Введены некорректные данные!");
+                    }
+                }
+                if (!(otv.Equals('Y') || otv.Equals('y') || otv.Equals('н') || otv.Equals('Н')))
+                {
+                    break;
+                }
+                if (!(otv.Equals('N') || otv.Equals('N') || otv.Equals('Т') || otv.Equals('т')))
+                {
+                    Console.Clear();
+                }
+                else
+                {
+                    Console.Clear();
+                }
+            }
+
+        }
+    }
+}

+ 10 - 0
Мат_моделирование_1/Мат_моделирование_1.csproj

@@ -0,0 +1,10 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>