static void Main(string[] args)
        {
            uint exParam1 = Constants.PARAM1;
            double minPos;
            double maxNeg;

            // Чистим чтобы старое не мешалось :)
            Console.Clear();

            // Создаём прямоугольную матрицу, в конструктор передаём размер матрицы
            MatrixEx me = new MatrixEx(Constants.MATRIX_ROWS, Constants.MATRIX_COLS);
            // Выводим таблицу, метод Print описан в классе базовой матрицы и унаследован
            me.Print();

            minPos = me.GetMinPos();
            maxNeg = me.GetMaxNeg();
            System.Console.WriteLine(String.Format("Minimalny polozhit: {0,5:0.###}, maximalny otricat: {1,5:0.###}", minPos, maxNeg));

            // Проверяем условие задачи
            double diff = Math.Abs(Math.Abs(minPos) - Math.Abs(maxNeg));
            System.Console.WriteLine(String.Format("Elementy otlichautsa na {0,5:0.###}", diff));
            if(diff < exParam1)
            {
                /* Так как элементы по модулю отличаются меньше, чем на заданную величину, то меняем
                 * элементы матрицы на их модули, после чего выводим изменённую матрицу
                 */
                me.Absolute();
                me.Print();
            }
            else
            {
                System.Console.WriteLine("Elementy otlichautsa bolshe chem na zadannuy velichinu ili rovno na nee");
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Среднее арифметическое матрицы для сравнения
            double oldW = 0;

            // Чистим чтобы старое не мешалось :)
            Console.Clear();

            // Создаём прямоугольную матрицу, в конструктор передаём размер матрицы
            MatrixEx me = new MatrixEx(Constants.MATRIX_ROWS, Constants.MATRIX_COLS);
            // Выводим таблицу, метод Print описан в классе базовой матрицы и унаследован
            me.Print();
            // Выводим среднее арифметическое изначально сгенерированной матрицы
            oldW = me.CalcW();
            System.Console.WriteLine(String.Format("Sredneye arifmet: {0,6:0.####}", oldW));

            // Проверяем первое условие задачи
            if(me.IsFirstMaxNegative())
            {
                /* Так как в первой строке оказалось максимальное количество отрицательных элементов, меняем
                 * элементы матрицы на их модули, после чего выводим изменённую матрицу, считаем новое среднее
                 * арифметическое и выводим его тоже:
                 */
                me.Absolute();
                me.Print();

                // Отвечаем на вопрос о том, как изменилось среднее арифметическое
                double newW = me.CalcW();
                if(newW == oldW)
                    System.Console.WriteLine(String.Format("Srednee arifmeticheskoe ne izmenilos': {0,6:0.####}", newW));
                if(newW < oldW)
                    System.Console.WriteLine(String.Format("Srednee arifmeticheskoe umenshilos': {0,6:0.####}", newW));
                if(newW > oldW)
                    System.Console.WriteLine(String.Format("Srednee arifmeticheskoe vozroslo: {0,6:0.####}", newW));
            }
            else
            {
                System.Console.WriteLine("V pervoi stroke matricy ne maximalnoe kol-vo otricatelnyh elementov");
            }

            Console.ReadKey(); // Ждём выброс и валим нахер!
        }