Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2015, 17:51   #1
shadow155
Пользователь
 
Регистрация: 11.06.2015
Сообщений: 14
По умолчанию Сортировка столбцов матриц

Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.
(Как отсортировать столбцы без индексов?)
Код:
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include "iostream"
using namespace std;
void main()
{
int a[20][20]={0},i,j,ch[20]={0},tmp,index[20],m,n; 
 cout<<"vvedite razmernost\n"<<endl;
 cin>>n>>m;
 for(i=0;i<n;i++)
 {
     for(j=0;j<m;j++)
     {
         cin>>a[i][j];
     }
 }
 cout<<"\n\n";
 for(i=0;i<n;i++)
 {
     for(j=0;j<m;j++)
         
     {
         if (a[i][j]<0 && a[i][j]%2)
         {
             ch[j]+=abs(a[i][j]);
         }
         printf("%4d ",a[i][j]);
     index[i]=i;}
     cout<<endl;
}    
 for(i=0;i<n-1;i++)
     for(j=i+1;j<m;j++)
         if (ch[index[j]]<ch[index[i]])
         {
             tmp=index[j];
             index[j]=index[i];
             index[i]=tmp;
         }
         cout<<endl;
         for(i=0;i<n;i++)
         {
             for(j=0;j<m;j++)
             {
                 printf("%4d ",a[i][index[j]]);
             }
             cout<<endl;
         }
         cout<<endl;    
 
_getch();
}

Последний раз редактировалось Stilet; 11.06.2015 в 19:03.
shadow155 вне форума Ответить с цитированием
Старый 11.06.2015, 19:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Опиши массив как int a[20+1][20]={0}
Далее найдем сумму модулей его отрицательных нечетных элементов.
Код:
 for(i=0;i<n;i++)
 {
     for(j=0;j<m;j++)
     {
         cin>>a[i][j];
         a[20][j]+=(a[i][j]<0)?abs(a[i][j]):0;
     }
 }
Далее сортировка:
Код:
 for(i=0;i<m;i++)
 {
     for(j=0;j<m;j++)
     {
         if(a[20][j]<a[20][i]){ меняем местами столбцы};
     }
 }
Идею понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2015, 20:43   #3
shadow155
Пользователь
 
Регистрация: 11.06.2015
Сообщений: 14
По умолчанию Не совсем

Цитата:
Не совсем понял, можешь помочь подправить?
Код:
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include "iostream"
using namespace std;
void main()
{
int a[20][20]={0},i,j,ch[20]={0},tmp,index[20],sam=0,st=0,m,n; 
 cout<<"vvedite razmernost\n"<<endl;
 cin>>n>>m;
 for(i=0;i<n;i++)
 {
	 for(j=0;j<m;j++)
	 {
		 cin>>a[i][j];
	 }
 }
 cout<<"\n\n";
 for(i=0;i<n;i++)
 {
	 for(j=0;j<m;j++)
		 
	 {
		 if (a[i][j]<0 && a[i][j]%2)
		 {
			 ch[j]+=abs(a[i][j]);
		 }
		 printf("%4d ",a[i][j]);
	 index[i]=i;}
	 cout<<endl;
}	 
 for(i=0;i<n-1;i++)
	 for(j=i+1;j<m;j++)
		 if (ch[index[j]]<ch[index[i]])
		 {
			 tmp=index[j];
			 index[j]=index[i];
			 index[i]=tmp;
		 }
		 cout<<endl;
		 for(i=0;i<n;i++)
		 {
			 for(j=0;j<m;j++)
			 {
				 printf("%4d ",a[i][index[j]]);
			 }
			 cout<<endl;
		 }
		 cout<<endl;
		 for(int j=0;j<m;j++)
		 {
			 sam=0;
			 for(int i=0;i<n;i++)
			 {
if(a[i][j]<0&&abs(a[i][j])%2==1)
{
	sam+=abs(a[i][j]);
}
			 }
			 cout<<"stolbec : "<<j<<" summa "<<sam<<endl;
		 }
		 for(int j=0;j<m;j++)
		 {st=0;
			 for(int i=0;i<n;i++)
			 {
				 if(a[i][j]<0)
				 {
					 for(int i=0;i<n;i++)
					 {
						 st+=a[i][j];
					 }
					 break;
				 }
			 }
		 cout<<"\n Stolbec : "<<j<<" Summa "<<st; }

_getch();
}

Последний раз редактировалось Stilet; 11.06.2015 в 21:27.
shadow155 вне форума Ответить с цитированием
Старый 11.06.2015, 21:26   #4
shadow155
Пользователь
 
Регистрация: 11.06.2015
Сообщений: 14
По умолчанию

Не совсем понятна идея сортировки.
shadow155 вне форума Ответить с цитированием
Старый 11.06.2015, 22:36   #5
shadow155
Пользователь
 
Регистрация: 11.06.2015
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Опиши массив как int a[20+1][20]={0}
Далее найдем сумму модулей его отрицательных нечетных элементов.
Код:
 for(i=0;i<n;i++)
 {
     for(j=0;j<m;j++)
     {
         cin>>a[i][j];
         a[20][j]+=(a[i][j]<0)?abs(a[i][j]):0;
     }
 }
Далее сортировка:
Код:
 for(i=0;i<m;i++)
 {
     for(j=0;j<m;j++)
     {
         if(a[20][j]<a[20][i]){ меняем местами столбцы};
     }
 }
Идею понял?
Не совсем.
shadow155 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка матриц 123456789igor Общие вопросы C/C++ 0 03.10.2011 17:00
сортировка матриц Максикок Помощь студентам 4 07.12.2010 21:56
Сортировка матриц VD1988 Помощь студентам 2 15.06.2010 15:29
Сортировка матриц в С SeregaF1 Помощь студентам 0 03.06.2010 08:41