Exemplo n.º 1
0
        IMatrixData <int, SolutionData> IMatrixWriteStorage <int, SolutionData> .SaveMatrix(string name, IMatrix <int> matrix, SolutionData data)
        {
            Directory.CreateDirectory(Path + @"data\matrixes\");
            Directory.CreateDirectory(Path + @"data\solutions\");
            string filename        = "1";
            int    currentFilename = 1;

            while (File.Exists(Path + @"data\" + filename + ".xml"))
            {
                currentFilename++;
                filename = currentFilename.ToString();
            }

            var sizes = new int[matrix.Dimensions];

            for (int i = 0; i < matrix.Dimensions; i++)
            {
                sizes[i] = matrix.Size(i);
            }

            var matrixData = new FileMatrixData(Path, name, @"data\matrixes\" + filename, sizes, @"data\solutions\" + filename);

            using (var stream = File.OpenWrite(Path + @"data\" + filename + ".xml"))
                using (var textwriter = new StreamWriter(stream))
                    using (var xml = new XmlTextWriter(textwriter))
                    {
                        var serializer = new XmlSerializer(typeof(FileMatrixData));
                        serializer.Serialize(xml, matrixData);
                    }

            using (var stream = File.OpenWrite(Path + @"data\matrixes\" + filename))
                using (var writer = new BinaryWriter(stream))
                {
                    foreach (var index in MultiDimensionMatrixEnumerator.Indexes(matrix))
                    {
                        writer.Write(matrix[index]);
                    }
                }

            using (var stream = File.OpenWrite(Path + @"data\solutions\" + filename))
                using (var writer = new BinaryWriter(stream))
                {
                    for (int i = 0; i < data.Item1.Dimensions; i++)
                    {
                        writer.Write(data.Item1[i]);
                    }

                    for (int i = 0; i < data.Item1.Dimensions; i++)
                    {
                        foreach (int j in data.Item2[i])
                        {
                            writer.Write(j);
                        }
                    }

                    writer.Write(data.Item3);
                }

            return(matrixData.AsSolutionData());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Сумма элементов матрицы
        /// </summary>
        /// <param name="matrix">Матрица</param>
        /// <returns>Сумма элементов</returns>
        public static long Sum(IMatrix <int> matrix)
        {
            long sum = 0;

            foreach (IIndex index in MultiDimensionMatrixEnumerator.Indexes(matrix))
            {
                sum += matrix[index];
            }
            return(sum);
        }
Exemplo n.º 3
0
 public static T Max <T>(IMatrix <T> matrix, T max)
     where T : IComparable <T>
 {
     foreach (IIndex index in MultiDimensionMatrixEnumerator.Indexes(matrix))
     {
         if (max.CompareTo(matrix[index]) < 0)
         {
             max = matrix[index];
         }
     }
     return(max);
 }
Exemplo n.º 4
0
 public static T Min <T>(IMatrix <T> matrix, T min)
     where T : IComparable <T>
 {
     foreach (IIndex index in MultiDimensionMatrixEnumerator.Indexes(matrix))
     {
         if (min.CompareTo(matrix[index]) > 0)
         {
             min = matrix[index];
         }
     }
     return(min);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Минимальное значение в матрице
        /// </summary>
        /// <typeparam name="T">Тип хранимых в матрице данных</typeparam>
        /// <param name="matrix">Матрица</param>
        /// <returns>Минимальное значение в матрице</returns>
        public static T Min <T>(IMatrix <T> matrix)
            where T : IComparable <T>
        {
            T min = default(T);

            var enumerator = MultiDimensionMatrixEnumerator.Indexes(matrix).GetEnumerator();

            if (enumerator.MoveNext())
            {
                min = matrix[enumerator.Current];

                while (enumerator.MoveNext())
                {
                    if (min.CompareTo(matrix[enumerator.Current]) > 0)
                    {
                        min = matrix[enumerator.Current];
                    }
                }
            }

            return(min);
        }