Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца - C#

Узнай цену своей работы

Формулировка задачи:

Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца. Распечатать часть полученной матрицы, состоящую из n первых строк, не имеющих отрицательных элементов.

Решение задачи: «Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца»

textual
Листинг программы
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        /// <summary>
        /// Вывод матрицы на печать.
        /// </summary>
        static void PrintMatrix(double[,] a)
        {
            for (int i = 0; i < a.GetLength(0); ++i)
            {
                for (int j = 0; j < a.GetLength(1); ++j)
                {
                    Console.Write("{0,3} ", a[i, j]);
                }
                Console.WriteLine();
            }
        }
 
        /// <summary>
        /// Перестановка элементов.
        /// </summary>
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
 
        static void Main(string[] args)
        {
            double[,] a =
                {   { -1, 3, -4, -7},
                    { 4,  5,  9,  4},
                    { 5, -7, -8,  3} };
 
            Console.WriteLine("Исходная матрица: ");
            PrintMatrix(a);
 
            //
            // Формируем матрицу с переставленными элементами.
            //
            for (int j = 0; j < a.GetLength(1); ++j)
            {
                int rowEnd = a.GetLength(0) - 1;
                for (int i = 0; i <= rowEnd;)
                {
                    if (a[i, j] < 0)
                    {
                        Swap(ref a[i, j], ref a[rowEnd, j]);
                        rowEnd--;
                    }
                    else
                    {
                        i++;
                    }
                }
            }
 
            Console.WriteLine();
            Console.WriteLine("Матрица с переставленными элементами: ");
            PrintMatrix(a);
 
            //
            // Определяем число строк с неотрицательными элементами и выводим.
            //
            int nonNegativeRows = 0;
            bool negativeOccur = false;
 
            for (int i = 0; i < a.GetLength(0); ++i)
            {
                for (int j = 0; j < a.GetLength(1); ++j)
                {
                    if (a[i, j] < 0)
                    {
                        negativeOccur = true;
                        break;
                    }
                }
 
                if (negativeOccur)
                    break;
 
                nonNegativeRows++;
            }
 
            Console.WriteLine();
            Console.WriteLine("Часть строк матрицы с неотрицательными элементами: ");
            for (int i = 0; i < nonNegativeRows; ++i)
            {
                for (int j = 0; j < a.GetLength(1); ++j)
                {
                    Console.Write("{0,3} ", a[i, j]);
                }
                Console.WriteLine();
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы