using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication7
{
class Program
{
// функция
public static void SumStolb(int[,] a, int n, int m, int p, int[] sb)
{
int i, j;
int s = 0;
int smax = 0;
for (j = 0; j < m; j++)
{
s = 0;
for (i = 0; i < n; i++)
if (a[i, j] > 0)
{
// нахожд. суммы пол.эл-в каждого столбца
s = s + a[i, j];
}
//нах-е столбца с макс суммой
if (j == 0)
{
smax = s;
}
else
{
if (s > smax)
{
smax = s;
}
}
sb[j] = s; // определение одномерного массива
}
for (i = 0; i < p - 1; i++) //вывод матрицы без столбца макс. суммой элементов
{
while (i <= m) ;
int k = 0;
for (j = 0; j < n; j++)
{
if (a[i, j] < 0)
{
k++;
if (k == n)
{
if (i == m)
{
m = m - 1;
}
else
{
for (p = i; p < m; p++)
{
for (j = 1; j < n; j++)
{
a[p, j] = a[p + 1, j];
m = m - 1;
}
}
}
}
else i++;
}
}
}
}
// головная программа
static void Main(string[] args)
{
int n, m;
Console.Write("n=");
n = Convert.ToInt32(Console.ReadLine());
Console.Write("m=");
m = Convert.ToInt32(Console.ReadLine());
int[,] a = new int[n, m];
int[] ss = new int[m]; //формирование нового массива из сумм пол. эл-в столбцов
int i, j, p;
//ввод элементов
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
Console.Write("a[{0},{1}]=", i, j);
a[i, j] = Convert.ToInt32(Console.ReadLine());
}
}
p = n;
int[,] b;
//вывод элементов
System.Console.WriteLine("Out Array");//текст в консоли
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
Console.Write(a[i, j] + "\t");
}
Console.WriteLine();
}
SumStolb(a, n, p, m, ss);// обращение к функции
System.Console.WriteLine("Out sum pol columns");// текст в консоли
//Вывод массива одномерного
for (i = 0; i < n; i++)
Console.Write(ss + "\t");
Console.WriteLine();
//вывод нового двумерного массива
System.Console.WriteLine("Out Array");//текст в консоли
for (p = 0; p < n; i++)
{
for (j = 0; j < m; j++)
{
if (m==0)
{
Console.Write("все строки удалены");
}
else
Console.Write(a[p, j] + "\t");
Console.WriteLine();
}
//Вывод конечных результатов в явном виде
//окончание
Console.Write("Press any key for continue");
Console.ReadKey();
}
}
}
}
c# удалить строки матрицы с отрицательными элементами
нужно удалить в матрице строки, в которых все элементы отрицательные
я пришла к этому, у меня куча ошибок и проверить на правильном ли я пути не могу
Код:
Оформите код тегами CODE.
спасибо, отредактировала. поможете?
как задаете матрицу? обычным двумерным массивом? как планируете "удалять" строки?
[CODE="C#"] using System;[/CODE]
в начало файла.
Второе:
[CODE="C#"]
// функция
public static void SumStolb(int[,] a, int n, int m, int p, int[] sb, out int indexmax, out int smax, out int[,] b)
{
...
int[,] b;
...
}
[/CODE]
Тут напутано с именами, две переменные b объявляются.
П.С. советую почитать книжки по C#, того же Троелсена. Ну потому что сейчас код мягко говоря не лучший. А решение с удалением строк матрицы (матрицу задаём через int[][]), в которых нет не отрицательных элементов, можно сделать хотя бы так (используется LINQ, что это можешь поискать в гугле или в книжке):
[CODE="C#"]
var m = from line in matr
where line.Any(e => e >= 0)
select line;
[/CODE]
П.С.С. логику вообще не смотрел.
да, Phodopus!) обычный двумерный массив. просто хотела вывести новую матрицу без тех строк, в которых все элементы отрицательные
- при удалении строки создавать временный массив меньшего (на 1) размера, переписывать туда построчно все строки кроме удаляемой и заменять этим временным основной массив
- затирать строку в основном массиве in-place и где-то запоминать что настоящее кол-во строк теперь меньше и пользоваться им
- сменить тип массива
т.к. задачка студенческая, возможно последнее не допускается
вот, я переделала код. теперь без создания новой матрицы. но он что-то не хочет выводить матрицу без отрицательных строк. посмотрите, пожалуйста!! может я вывод неправильно пишу?
Ну у вас n и m меняются разве по ходу программы?
ну помогите, пожалуйста!! как бы вы это решили?? может код другой написать? охота мужскую логику увидеть
Код:
using System;
using System.Linq;
namespace Example
{
class Program
{
static void PrintMatrix(int[][] matrix)
{
for (int i = 0; i < matrix.Length; ++i)
{
for (int j = 0; j < matrix.Length; ++j)
Console.Write("{0,5} ", matrix[j]);
Console.WriteLine();
}
Console.WriteLine();
}
static void Main()
{
int[][] source = {
new int[] { 81, -68, -29, -47, 63 },
new int[] { 10, -2, -9, 93, -56 },
new int[] { -63, -42, -74, -26, -16 },
new int[] { -95, -55, 91, 78, -18 },
new int[] { -75, -62, -32, -65, -4 },
new int[] { 34, 62, 28, 51, 54 }
};
PrintMatrix(source);
var result = (from line in source
where line.Any(e => e >= 0)
select line).ToArray();
PrintMatrix(result);
}
}
}
using System.Linq;
namespace Example
{
class Program
{
static void PrintMatrix(int[][] matrix)
{
for (int i = 0; i < matrix.Length; ++i)
{
for (int j = 0; j < matrix.Length; ++j)
Console.Write("{0,5} ", matrix[j]);
Console.WriteLine();
}
Console.WriteLine();
}
static void Main()
{
int[][] source = {
new int[] { 81, -68, -29, -47, 63 },
new int[] { 10, -2, -9, 93, -56 },
new int[] { -63, -42, -74, -26, -16 },
new int[] { -95, -55, 91, 78, -18 },
new int[] { -75, -62, -32, -65, -4 },
new int[] { 34, 62, 28, 51, 54 }
};
PrintMatrix(source);
var result = (from line in source
where line.Any(e => e >= 0)
select line).ToArray();
PrintMatrix(result);
}
}
}
В данном примере 3-я и 5-я строки содержат только отрицательные числа, и будут удалены.
LINQ предложил использовать Norgat. Одна проблема: многомерные массивы не реализуют интерфейс IEnumerable, поэтому пришлось использовать jagged array - массив массивов.