static void Main(string[] args)
        {
            double upperW;
            ushort minSumLineId;

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

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

            upperW = me.CalcUpperW();
            System.Console.WriteLine(String.Format("Srednee arifmeticheskoe el-tov vyshe glavnoy diagonali {0,5:0.###}", upperW));

            minSumLineId = me.getMinSumLineId();
            System.Console.WriteLine(String.Format("V {0} stroke minimalnaya summa elementov", minSumLineId + 1));

            // Умножаем элементы строки minSumLineId на среднее арифметическое элементов выше диагонали upperW
            me.Multiply(minSumLineId, upperW);
            me.Print();

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            if(me.IsTriangular())
            {
                // Выводим среднее арифметическое положительных элементов
                System.Console.WriteLine(String.Format("Sredneye arifmet polozhitelnyh elementov: {0,6:0.####}", me.CalcPosW()));
            }
            else
            {
                // Среднее арифметическое элементов выше главной диагонали
                System.Console.WriteLine(String.Format("Vyshe glavnoy diagonaly sredn arifmet: {0,6:0.####}", me.CountUpElsW()));
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            if(me.IsSymmetric())
            {
                System.Console.WriteLine("Matrica symmetrichna");
                // Обнуляем элементы выше главной диагонали
                me.Triangulate();
                me.Print();
                // Показать сумму элементов ниже главной диагонали
                System.Console.WriteLine(String.Format("Summa elementov ravna {0,5:0.###}", me.CountDownSum()));
            }
            else
            {
                System.Console.WriteLine("Matrica ne symmetrichna");
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            me.DownNegatives();
            me.Print();

            ushort eN = me.GetN();
            if(eN > 0)
            {
                System.Console.WriteLine(String.Format("Do N-noy stroki vkluchitelno otricatelnyh elementov net. N = {0}", eN));
                // Отрезаем матрицу снизу, метод унаследован из класса базовой матрицы
                me.Truncate(eN, 0);
                me.Print();
            }
            else
                System.Console.WriteLine("Odin ili neskolko stolbcov sostoyat tolko iz otricatelnyh el-tov");

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            double[] sums;
            ushort minRow;
            ushort maxRow;

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

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

            // Считаем суммы элементов по строкам матрицы и запоминаем результат - пригодится
            sums = me.GetElementsSums();

            maxRow = me.GetMaxLineNumber(sums);

            minRow = me.GetMinLineNumber(sums);

            me.SwapRows(minRow, maxRow);
            me.Print();

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

            // Создаём объект матрицы, адаптированной для текущей задачи (14 строк, 4 столбца)
            MatrixEx me = new MatrixEx(144, 8);

            // Выводим таблицу, метод Print описан в классе базовой матрицы и унаследован
            me.Print();

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

            // Чистим чтобы старое не мешалось :)
            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));

            // Определяем столбец в котором максимальное количество отрицательных элементов
            mneg = me.WhichIsMaxNegative();
            System.Console.WriteLine(String.Format("V {0} stolbce bolshe vsego otricatelnyh elementov", mneg + 1));

            me.AbsoluteAfter(mneg);
            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));

            Console.ReadKey(); // Ждём выброс и валим нахер!
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            if(me.IsMoreThanHalfPrimes())
            {
                System.Console.WriteLine("V massive bolshe poloviny prostyh chisel");
                me.SortLastCol();
                me.Print();
            }
            else
            {
                System.Console.WriteLine("V massive menshe poloviny prostyh chisel");
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            if(me.IsTriangular())
            {
                // Выводим среднее арифметическое матрицы
                System.Console.WriteLine(String.Format("Sredneye arifmet: {0,6:0.####}", me.CalcW()));
            }
            else
            {
                // Показать количество элементов выше главной диагонали, отличных от нуля
                System.Console.WriteLine(String.Format("Vyshe glavnoy diagonaly {0} el-tov ne ravny 0", me.CountUpEls()));
            }

            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(); // Ждём выброс и валим нахер!
        }
        static void Main(string[] args)
        {
            // Заданные по условию задачи величины (менять в коде, либо дописывать чтение ввода пользователя)
            double excParam1 = Constants.PARAM1;

            double[] sums;

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

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

            // Считаем суммы элементов по строкам матрицы и запоминаем результат - пригодится
            sums = me.GetElementsSums();

            ushort maxcol = me.GetMaxColNumber(sums);

            if(maxcol > excParam1)
            {
                // Условие задачи соблюдено
                me.Truncate(0, maxcol);
                me.Print();
            }
            else
            {
                // По условию задачи номер строки с максимальной суммой элементов не больше заданного числа
                double[] ncol = me.GetColAsArray(maxcol);
                foreach(double nval in ncol)
                {
                    System.Console.WriteLine(String.Format("| {0,5:0.##} |", nval));
                }
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Заданная по условию задачи величина (менять в коде, либо дописывать чтение ввода пользователя)
            uint excParam1 = Constants.PARAM1;

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

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

            if(me.IsInCircle(excParam1))
            {
                System.Console.WriteLine("Vse tochki v krugu");
                // Все точки плоскости попали в круг, печатаем средние координаты
                me.PrintWs();
            }
            else
            {
                System.Console.WriteLine("Ne vse tochki v krugu");
                // Не все точки плоскости попали в круг, печатаем номера исключений
                me.PrintExceptions(excParam1);
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Заданная по условию задачи величина (менять в коде, либо дописывать чтение ввода пользователя)
            int excParam1 = Constants.PARAM1;

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

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

            // Первое действие по условию задачи - в каждом столбце максимальный элемент на первое место
            me.MaxFirst();
            // И сразу проверяем
            me.Print();

            if(me.FrontLineBigger(excParam1))
            {
                // Крайнее условие задачи соблюдено, делим последнюю строку на первую:
                me.DivideLastByFirst();
                me.Print();
            }
            else
            {
                System.Console.WriteLine("Est' elementy po modulu menshe zadannogo chisla");
            }

            Console.ReadKey(); // Ждём выброс и валим нахер!
        }
        static void Main(string[] args)
        {
            uint excParam1 = Constants.PARAM1;

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

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

            if(me.IsMoreThanXPrimes(excParam1))
            {
                System.Console.WriteLine(String.Format("V massive bolshe {0} prostyh chisel", excParam1));
                System.Console.WriteLine(String.Format("Summa polozhitelnyh elementov: {0}", me.SumPos()));
            }
            else
            {
                System.Console.WriteLine(String.Format("V massive ne bolee {0} prostyh chisel", excParam1));
            }

            Console.ReadKey();
        }
        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)
        {
            // Заданная по условию задачи величина (менять в коде, либо дописывать чтение ввода пользователя)
            ushort excParam1 = Constants.PARAM1;

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

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

            if(me.IsMinSumIn((ushort) (excParam1 - 1)))
            {
                System.Console.WriteLine(String.Format("Summa v {0} stolbce minimalna", excParam1));
                // В k-ом столбце минимальная сумма элементов, ищем сумму до k столбца
                System.Console.WriteLine(String.Format("Summa do {0} stolbca ravna: {1,5:0.##}", excParam1, me.GetColSum(0, (ushort) (excParam1 - 1))));
            }
            else
            {
                System.Console.WriteLine(String.Format("Summa v {0} stolbce ne minimalna", excParam1));
                // Не максимальная сумма, ищем сумму после k
                System.Console.WriteLine(String.Format("Summa posle {0} stolbca ravna: {1,5:0.##}", excParam1, me.GetColSum((ushort)(excParam1 - 1), 0)));
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

            // Создаём прямоугольную матрицу, в конструктор передаём размер матрицы
            MatrixEx me = new MatrixEx(Constants.MATRIX_ROWS, Constants.MATRIX_COLS);
            // Выводим таблицу, метод Print описан в классе базовой матрицы и унаследован
            me.Print();
            if(me.IsAsc())
            {
                // Ищем сколько всего нулей, это условие выполняется редко, ~ 1 раз из 10
                System.Console.WriteLine("Kolvo nulevih elementov po vozrastaniu");
                System.Console.WriteLine(String.Format("Vsego nuley: {0}", me.CountNulls()));
            }
            else
            {
                // По условию определяем номер столбца в котором максимум нулей
                System.Console.WriteLine(String.Format("V {0} stolbce maximum nuley", (ushort) (me.MaxNullsColumn() + 1)));
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Заданные по условию задачи величины (менять в коде, либо дописывать чтение ввода пользователя)
            double excParam1 = Constants.PARAM1;
            double excParam2 = Constants.PARAM2;

            double[] sums;

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

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

            // Считаем суммы элементов по строкам матрицы и запоминаем результат - пригодится
            sums = me.GetElementsSums();

            if(me.CheckCond(sums, excParam1, excParam2))
            {
                // Все суммы элементов строк попадают на заданный отрезок
                System.Console.WriteLine("Vse summy elementov popadaut na zadanny otrezok");
                me.PrintMaxLineNumber(sums);
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // Чистим чтобы старое не мешалось :)
            Console.Clear();

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

            me.MoveMinNullzFirst();
            me.DownNullz();
            me.Print();

            Console.ReadKey();
        }