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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2012, 23:54   #1
inuzen
 
Регистрация: 23.06.2012
Сообщений: 5
По умолчанию Передача матрицы в функцию

Собственно при написании кода столкнулся с проблемой - как передать в функцию матрицу, которую я храню в виде двухмерного массива?
Массив создаю таким образом в main:
Код:
 //создание матрицы
   int** matrix = new int*[str];

   for (int i=0; i<str; i++)
      matrix[i] = new int[stl];
//запись из файла
   in.open("numbers.txt");
   for (int i=0; i<str; i++)
   {
      for (int j=0; j<stl; j++)
	  {
         in>>matrix[i][j];
	  }
   }
число строк str и число столбцов stl типа int.
Дальше хочу передать эту матрицу в функцию для сортировки:
Код:
sortirovka(&matrix[0][0],str,stl);
Сама функция выглядит так:
Код:
void sortirovka(int *matr[],int row,int col)
{
	int sum1, sum2, a,i,j;
for( j = 0;j<col-1;j++)
{
	sum1=0;
	sum2=0;
	for( i = 0; i<row; i++)
	{
		sum1 = sum1 + matr[i][j];
		sum2 = sum2 + matr[i][j+1];
	}
	if(sum1>sum2)
	{
		a = matr[i][j];
		matr[i][j]=matr[i][j+1];
		matr[i][j+1]=a;
	}
}
возможно сортировка написана не верно, но это не главное. Главное, что выдается ошибка:
cannot convert parameter 1 from 'int *' to 'int *[]'
Пожалуйста, научите, как это правильно делать.
inuzen вне форума Ответить с цитированием
Старый 23.06.2012, 23:55   #2
inuzen
 
Регистрация: 23.06.2012
Сообщений: 5
По умолчанию

Ах да, забыл упомянуть. Язык - С++
Пресловутая сортировка заключается в том, чтобы отсортировать СТОЛБЦЫ матрицы по возрастанию СУММЫ элементов в этом столбце.
inuzen вне форума Ответить с цитированием
Старый 24.06.2012, 00:34   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

1. Сишный подход (раздолбайный) - передача указателя, количества строк и столбцов. Сливаешь функции массив, которая принимает на входе указатель на элемент.

2. Приплюснутый подход (безопасный) - передача 2хмерного массива, с гарантированно валидными данными о количестве строк и столбцов

Пишешь шаблонную функцию, которая принимает массив по ссылке.

В твоём коде - первый вариант (кривой правда)
_Bers вне форума Ответить с цитированием
Старый 24.06.2012, 00:39   #4
inuzen
 
Регистрация: 23.06.2012
Сообщений: 5
По умолчанию

А можно для матрицы создать отдельный класс и функцию сделать не передавая ей ничего просто void sortirovka(){} ?


I'm bydlokoder and I know it
inuzen вне форума Ответить с цитированием
Старый 24.06.2012, 01:32   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

можно. 12345
_Bers вне форума Ответить с цитированием
Старый 24.06.2012, 11:05   #6
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Попробуй через вспомогательный массив указателей:

Код:
int *ptr [7] ;
for (j=0; j<7; j++)
	  {
                ptr[j] = matrix[j];
	  }
sortirovka(ptr,str,stl);
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 24.06.2012, 12:15   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Попробуй через вспомогательный массив указателей:

Код:
int *ptr [7] ;
for (j=0; j<7; j++)
	  {
                ptr[j] = matrix[j];
	  }
sortirovka(ptr,str,stl);
Зачем по десять раз копировать данные туда-сюда?
Если можно сделать тоже самое без копирования?
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Передача массивов в функцию vlad-letchik Помощь студентам 0 10.05.2012 00:29
Язык СИ! Динамическое выделение памяти под массивы и матрицы, передача матрицы в функции Андрей! Общие вопросы C/C++ 33 31.01.2012 22:07
Передача структуры в функцию rus_phantom Общие вопросы C/C++ 7 19.10.2011 20:11
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25