Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выбрать столбец из матрицы, и выбрать отрицательные числа

88K
02 декабря 2014 года
Rodevillow
3 / / 02.12.2014
Есть матрица, нужно по очереди в каждом столбце выбрать непарные отрицательные числа, потом взять сумму их модулей и когда будет результат от каждого столбца, сортировать их в возрастающем порядке
88K
02 декабря 2014 года
Roleri
9 / / 02.12.2014
Характеристики столбцов считаем и запоминаем в массиве:
 
Код:
int[] colchar = new int[b];
for (int i = 0; i < a; i++)
{
  for (int j = 0; j < b; j++)
  {
    if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
      colchar[j] += -matr[i,j];
  }
}
Сортируем...
Более сложный момент - как восстановить порядок столбцов, соответствующий найденному порядку характеристик.
Можно поступить так: в паре с характеристикой будем хранить индекс исходного столбца.
Переписываем, используя вместо int[] colchar массив структур:

Код:
struct ValIndexPair
{
  public int val; // characteristic
  public int index; // column index
}

ValIndexPair[] colchari = new ValIndexPair[b];
for (int j = 0; j < b; j++)
  colchari[j].index = j;

for (int i = 0; i < a; i++)
{
   for (int j = 0; j < b; j++)
   {
     if ((matr[i,j] < 0) && (matr[i,j] % 2 != 0)) // negative and odd
       colchari[j].val += -matr[i,j];
   }
}
Сортируем массив структур по характеристике.
Матрицу печатаем в соответствии с тем, как легли индексы после сортировки:
 
Код:
Array.Sort(colchari, (c1, c2) => Math.Sign(c1.val - c2.val)); // sort by val

for (int i = 0; i < a; i++)
{
  for (int j = 0; j < b; j++)
    Console.Write("{0} ", matr[i, colchari[j].index]);
  Console.WriteLine();
}
88K
02 декабря 2014 года
Rodevillow
3 / / 02.12.2014
Характеристикою стовпця цілочисельної матриці назвемо суму модулів його
негативних непарних елементів. Переставляючи стовпці заданої матриці, розташувати їх
відповідно до зростання характеристик.

Это само задание, усомнился что я всё так как надо понял.
Реализовал ввод матрицы, и вывод её (первоначального вида, без обработки)
Что дальше делать, понимаю, но впал в ступор =(

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace l_n_4
{
    class Program
    {
      static void Main(string[] args)
        {
          Console.WriteLine("Вbедите количество строк");
            int a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Вbедите количество столбцов");
            int b = Convert.ToInt32(Console.ReadLine());
            int[,] matr = new int[a,b];
       
            for (int i = 0; i < a; i++)
            {
                for (int j = 0; j < b; j++)
                {
                    Console.Write("matr[{0},{1}] = ", i, j);
                    matr[i,j] = Convert.ToInt32(Console.ReadLine()); // Ввод данных непосредственно в матрицу
                }
            }
            Console.WriteLine("Ваш массив без обработки");
            for (int i = 0; i < matr.GetLength(0); i++)
            {
                for (int j = 0; j < matr.GetLength(1); j++)
                    Console.Write("{0} ", matr[i, j]);
                Console.WriteLine();
            }

            System.Threading.Thread.Sleep(1000000);
 
        }
    }
}
88K
02 декабря 2014 года
Rodevillow
3 / / 02.12.2014
Спасибо большое, направил меня на путь верны, а то я не в ту степь полез =)
Вот такой код вышел
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace l_n_4
{
struct ValIndexPair
{
public int val; // characteristic
public int index; // column index
}

class Program
{

static void Main(string[] args)
{
Console.WriteLine("Вbедите количество строк");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Вbедите количество столбцов");
int b = Convert.ToInt32(Console.ReadLine());
int[,] matr = new int[a,b];
//int srov = 0;
int []sum = new int ;

for (int i = 0; i < b; i++)
{
sum = 0;
}


for (int i = 0; i < a; i++)
{
for (int j = 0; j < b; j++)
{
Console.Write("matr[{0},{1}] = ", i, j);
matr[i, j] = Convert.ToInt32(Console.ReadLine()); // Ввод данных непосредственно в матрицу
}
}
Console.WriteLine("Ваш массив без обработки");

for (int i = 0; i < matr.GetLength(0); i++)
{
for (int j = 0; j < matr.GetLength(1); j++)
Console.Write("{0} ", matr[i, j]);
Console.WriteLine();
}



for(int j = 0; j < b; j++)
{
for (int i = 0; i < a; i++)
{
if(i % 2 != 0 && matr[i,j] < 0 )
{
sum[j] += -matr[i,j];

}
}
}
for (int j = 0; j < b; j++ )
{
Console.Write("Stolb {0}", sum[j]);
Console.WriteLine();
}




System.Threading.Thread.Sleep(100000);




}
}
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог