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(); // Ждём выброс и валим нахер!
        }