Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца - 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();
}
}
}
}