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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2010, 16:21   #1
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
Сообщение сортировка массива

Помогите пожалуста с заданием,не могу понять как написть:
В матрице n-го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.
ts-alan вне форума Ответить с цитированием
Старый 07.08.2010, 16:52   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Хм, решать за тебя не буду, ну я скорее всего бы сделал так. Сначала отсортировал бы матрицу по убыванию, то есть первый ряд бы получил все необходимые значения, далее опускал бы счетчиком и заменял бы каждую ячейку колоны: 1col=0swap, 2col=1swap, 3col=2swap и т.д. Визуально это будет выглядеть примерно так:

Первоначальная
PHP код:
0   3  1  4
7   8  6  9
11 10 12 15
24 25 20 21 
После сортировки по убыванию
PHP код:
25 24 21 20
15 12 11 10
9   8  7  6
4   3  1  0 
После второй сортировки
PHP код:
25 12 11 10
15 24  7 6
9   8 21 0
4   3  1 20 
П.с. Первое что пришло в голову, может можно сделать и лучше.

Последний раз редактировалось coNsept; 07.08.2010 в 17:00.
coNsept вне форума Ответить с цитированием
Старый 07.08.2010, 19:43   #3
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

coNsept можно менять только строки, матрицу сортировать нельзя
ts-alan вне форума Ответить с цитированием
Старый 07.08.2010, 22:19   #4
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Ну исходя из того как я понял задание, нужно сделать следующее:
1) Найти наибольшое по абсолютное, то бишьт по модулю число в строке и запомнить его индекс
2) Распределить строки согласно найденым индексам содержащихся в них элементов

Однако возникает вопрос, а как быть если в строках совпадут номера индексов....

Напиши задание мне в аську, посмотрим что можно сделать)
Tema_Crazzzy вне форума Ответить с цитированием
Старый 07.08.2010, 23:29   #5
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;

size_t get_max(int *m, size_t n)
{
	int max = 0;

	for (size_t i = 0; i < n; ++i)
		max = (m[i] > m[max]) ? i : max;
	return max;
}
void swap(size_t v1, size_t v2, int *m)
{
	int tmp = m[v1];
	m[v1] = m[v2];
	m[v2] = tmp;
}
void sort(size_t n, size_t d, int *m)
{
	for (size_t i = 0; i < d; ++i)
		for (size_t j = i; j < d; ++j)
			if (m[i] > m[j])
				swap(i, j, m);
	for (size_t i = d; i < n; ++i)
		for (size_t j = i; j < n; ++j)
			if (m[i] < m[j])
				swap(i, j, m);
}
void show(int (*m)[5], size_t n)
{
	for (size_t i = 0; i < n; ++i) {
		for (size_t j = 0; j < n; ++j)
			cout << m[i][j] << (m[i][j] > 9 ? "" : " ") << ' ';
		cout << endl;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	enum {n = 5};
	int arr[n][n];

	for (size_t i = 0; i < n; ++i)
		for (size_t j = 0; j < 5; ++j)
			arr[i][j] = rand() % 50;
	show(arr, n);
	cout << endl;
	for (size_t i = 0; i < n; ++i)	{ 
		swap(i, get_max(arr[i], n), arr[i]);
		sort(n, i, arr[i]);
	}
	show(arr, n);
	return 0;
}
может разберетесь.
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 08.08.2010, 00:00   #6
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

На сколько я понимаю этот код сортирует элементы в строке, что по заданию не положено как бэ...
Tema_Crazzzy вне форума Ответить с цитированием
Старый 08.08.2010, 01:44   #7
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Короче вот, как задание понял так и код наваял. Код, кстать, простейший - разобраться в нем легко...

Код:
#include <iostream>
#include <conio.h>

int main()
{
	setlocale(0,"Rus");
	
	int i,j,n,*Mas;
	printf("Размерность массива: ");
	scanf("%d",&n);
	
	Mas=(int*)calloc(n*n,sizeof(int)); //Выделяем память и вводим массив ручками))
	for (i=0;i<n;i++)
		for(j=0;j<n;j++)
		{
			printf("Mas[%d][%d]=",i,j);
			scanf("%d",Mas+n*i+j);
		}
	printf("---------------------------------------------------------");	
	printf("Исходный массив: \n");	  //Выводим исходный массив
	for (i=0;i<n;i++)
	{
		for (j=0;j<n;j++)
		{
			printf("%3d",*(Mas+i*n+j));
		}
		printf("\n");
	}

	//Тут начинается самое интересное!!!
	//Если сортировать элементы в строке нельзя, то надо 
	//распологать строки в соответствии с номерами индексов
	//максимальных элементов
	
	int *Ind,max;
	Ind=(int*)calloc(n,sizeof(int)); //Массив для запоминания индекса максимального элемента
	for (i=0;i<n;i++)
	{
		*(Ind+i)=0;
		max=*(Mas+i*n);
		for (j=0;j<n-1;j++)
		{
			if (fabs(*(Mas+i*n+j+1))>fabs(max)) {max=*(Mas+i*n+j+1);*(Ind+i)=j+1;}
		}
	}
	printf("\n\n");

	//Теперь надо проверить, есть ли в массиве Ind повторяющиеся элементы
	//Надеюсь понятно зачем...
	int flag=1;
	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
		if ((i!=j)&&(*(Ind+i)==*(Ind+j))) {flag=0;break;break;}

	if (flag)
	{
		int Buff; //Промежуточная переменная
		
		for (i=0;i<n;i++)
		{
			for (j=0;j<n;j++)
			{
				Buff=*(Mas+i*n+j);
				*(Mas+i*n+j)=*(Mas+*(Ind+i)*n+j);
				*(Mas+*(Ind+i)*n+j)=Buff;
			}
		}
		//Вывод конечной матрицы;
		printf("\nРезультат: \n");
		for (i=0;i<n;i++)
		{
			for (j=0;j<n;j++)
			{
				printf("%3d",*(Mas+i*n+j));
			}
			printf("\n");
		}
	}
		else printf("Данный массив отсортировать невозможно!");
getch();
}
Tema_Crazzzy вне форума Ответить с цитированием
Старый 08.08.2010, 01:47   #8
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Да и еще, для теста программы использовал вот эту матрицу:
|3 4 1 5 0|
|1 8 0 5 2|
|6 3 2 1 4|
|1 0 9 2 1|
|3 2 1 5 7|
Tema_Crazzzy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива chertovka. Помощь студентам 2 15.06.2010 07:06
Сортировка массива. n0rma1 Помощь студентам 9 25.04.2010 17:24
Сортировка массива в С++ olnesm Помощь студентам 1 19.04.2010 19:47
сортировка массива Superlotles Общие вопросы C/C++ 2 05.04.2010 10:21
сортировка массива natasha971929 Помощь студентам 1 14.12.2009 23:49