
Мне потребовалось уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Затем было необходимо найти номер первой из строк, содержащих хотя бы один положительный элемент. Все это я реализовал на языке C#. Для начала, я создал двумерный массив и заполнил его случайными числами. Затем я прошелся по каждой строке и столбцу матрицы, и если все элементы в текущей строке или столбце были равны нулю, я исключал их из дальнейшего анализа. Для этого я создал два списка — rowsToDelete и columnsToDelete. В цикле я проверял каждую строку на наличие положительных элементов. Если находился хотя бы один положительный элемент, я сохранял номер этой строки в списке rowsToDelete. Таким образом, в конце цикла в списке rowsToDelete были сохранены номера всех строк, содержащих положительные элементы. Аналогичным образом я выполнял проверку для каждого столбца, сохраняя номера столбцов c положительными элементами в списке columnsToDelete. После того, как я получил списки строк и столбцов, которые нужно удалить, я создал новую матрицу размером, уменьшенным на количество строк и столбцов, которые требовалось удалить, и скопировал в нее только те элементы из исходной матрицы, которые не попали в списки на удаление.
В конце программы я вывел номер первой строки, содержащей положительный элемент, если таковая была найдена. Если все строки матрицы содержали только нулевые элементы, я выводил сообщение об отсутствии положительных элементов.Вот как это выглядит на языке C#⁚
csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
int[,] matrix new int[5, 5];
Random random new Random;
// Заполнение матрицы случайными числами
for (int i 0; i < matrix.GetLength(0); i )
{
for (int j 0; j < matrix.GetLength(1); j )
{
matrix[i, j] random.Next(-10, 10);
}
}
List
for (int i 0; i < matrix.GetLength(0); i )
{
bool containsPositiveElement false;
for (int j 0; j < matrix.GetLength(1); j )
{
if (matrix[i, j] > 0)
{
containsPositiveElement true;
break;
}
}
if (!containsPositiveElement)
{
rowsToDelete.Add(i);
}
}
for (int j 0; j < matrix.GetLength(1); j )
{
bool containsPositiveElement false;
for (int i 0; i < matrix.GetLength(0); i )
{
if (matrix[i, j] > 0)
{
containsPositiveElement true;
break;
}
}
if (!containsPositiveElement)
{
columnsToDelete.Add(j);
}
}
// Удаление строк и столбцов из матрицы
int[,] newMatrix new int[matrix.GetLength(0) — rowsToDelete.Count, matrix.GetLength(1) ― columnsToDelete.Count];
int newRow 0;
for (int i 0; i < matrix.GetLength(0); i )
{
if (!rowsToDelete.Contains(i))
{
int newColumn 0;
for (int j 0; j < matrix.GetLength(1); j )
{
if (!columnsToDelete.Contains(j))
{
newMatrix[newRow, newColumn] matrix[i, j];
newColumn ;
}
}
newRow ;
}
}
bool positiveElementFound false;
for (int i 0; i < newMatrix.GetLength(0); i )
{
for (int j 0; j < newMatrix.GetLength(1); j )
{
if (newMatrix[i, j] > 0)
{
Console.WriteLine($″Номер первой строки с положительным элементом⁚ {i 1}″);
positiveElementFound true;
break;
}
}
if (positiveElementFound)
{
break;
}
}
if (!positiveElementFound)
{
Console.WriteLine(″Нет строк с положительными элементами″);
}
}
}
Я надеюсь, что мой опыт поможет вам в решении вашей задачи по уплотнению матрицы и поиску строки с положительным элементом на языке C#. Удачи!