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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2012, 19:44   #1
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию Функция, возвращающая массив (С++)

Здравствуйте. Нужны функции для операций с матрицами. У меня есть 2 квадратные матрицы, мне нужно передать функции размер N и две матрицы. Эти две матрицы нужно сложить и вернуть получившуюся в функции матрицу.
Как вернуть матрицу?
Спасибо.
Alendorff вне форума Ответить с цитированием
Старый 08.03.2012, 19:50   #2
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Код:
#define N 50
int* my_func(int a[][N], int b[][N]);
Массив сам по себе является указалем на участок памяти и когда ты его передаешь, то ты передаешь указатель на память, тоесть на массив, а не создаешь новый, как в других случаях.

P.S. немного изменил код
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL

Последний раз редактировалось Inv1s; 08.03.2012 в 22:25.
Inv1s вне форума Ответить с цитированием
Старый 08.03.2012, 21:40   #3
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Alendorff Посмотреть сообщение
Как вернуть матрицу?
Спасибо.
Нельзя вернуть результатирующую матрицу из функции(если неправ, поправьте), полчаса пробывал всячески передать, не получилось. Эх ценный опыт.
Пришлось передать их функции третью матрицу, которая будет являться результатом, но нагуглил, что этот метод является "уродским" (http://http://www.alik.su/articles/1...ng-techniques/)
Код:
void matrix(int matr1[][3], int matr2[][3], int res[][3])
	{
		for(int i = 0; i < 3; i++)
			{
				for(int j = 0; j < 3; j++)
					{
						res[i][j] = matr1[i][j] + matr2[i][j];
					}
			}
	}
halcyon вне форума Ответить с цитированием
Старый 08.03.2012, 22:22   #4
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Код:
Нельзя вернуть результатирующую матрицу из функции(если неправ, поправьте)
А почему нельзя создать эту матрицу в подпрограмме и вернуть указатель на нее?
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 08.03.2012, 22:32   #5
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Inv1s Посмотреть сообщение
Код:
Нельзя вернуть результатирующую матрицу из функции(если неправ, поправьте)
А почему нельзя создать эту матрицу в подпрограмме и вернуть указатель на нее?
Пробовал, указатель указывает лишь на первый элемент массива. Последующие попытки его использования в main(), с инкрементированием привели лишь к выводу мусора на экран.
halcyon вне форума Ответить с цитированием
Старый 08.03.2012, 22:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нельзя вернуть результатирующую матрицу из функции
Смотрим и удивляемся:
http://www.programmersforum.ru/showp...4&postcount=27
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2012, 10:26   #7
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Мне лично не нравится держать параметры матрицы в нулевой строке.

А вообще, всем большое спасибо, буду пробовать, что не будет получаться отпишусь.

А можно ещё вопрос оффтопом? Вот давно интересно было, но никто не рассказывал.

Код:
#include "stdafx.h"
#include <stdlib.h>
Что зависит от формы записи подключения заголовочных файлов? Ещё видел используют using namespace std и тогда, кажется, без .h пишутся названия... Может кто-нибудь прояснить этот момент? )

Последний раз редактировалось Stilet; 09.03.2012 в 11:47.
Alendorff вне форума Ответить с цитированием
Старый 09.03.2012, 11:50   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне лично не нравится держать параметры матрицы в нулевой строке.
Зрив корень - я пример привел про возврат матрицы из функции а не про ее устройство.
Цитата:
#include "stdafx.h"
В ковычках значит сам файл лежит рядом с проектом
Если обрамлено в <..> то хедер лежит в каталоге где лежат все стандартные хедеры.
.h это как я помню атавизм от классического Си. С++ хедеры не имеют расширения, поэтому его не пишут (это если меня память не подводит.)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2012, 12:25   #9
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Цитата:
Сообщение от halcyon Посмотреть сообщение
Нельзя вернуть результатирующую матрицу из функции(если неправ, поправьте), полчаса пробывал всячески передать, не получилось. Эх ценный опыт.
Пришлось передать их функции третью матрицу, которая будет являться результатом, но нагуглил, что этот метод является "уродским" (http://http://www.alik.su/articles/1...ng-techniques/)
Код:
void matrix(int matr1[][3], int matr2[][3], int res[][3])
	{
		for(int i = 0; i < 3; i++)
			{
				for(int j = 0; j < 3; j++)
					{
						res[i][j] = matr1[i][j] + matr2[i][j];
					}
			}
	}
Не понял в чем суть. Ну получил я в этой функции результирующую матрицу, что дальше то? Она же мне в основной программе потом нужна.
Alendorff вне форума Ответить с цитированием
Старый 09.03.2012, 12:40   #10
Alendorff
Форумчанин
 
Аватар для Alendorff
 
Регистрация: 04.06.2011
Сообщений: 104
По умолчанию

Код:
int** sum(int size, int arr1[100][100], int arr2[100][100])
{
   int **sum=new int*[size];
   for (int i=0; i<size; i++)
   {
        sum[i]=new int[size];
        for (int j=0; j<size; j++)
        {
           sum[i][j]=arr1[i][j]+arr2[i][j];
        }
   }
return sum;
}

main()
{
//...
int **summa=sum(N,C,T);
//...
}
О боже, оно заработало :D Спасибо большое за пример!
Alendorff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция возвращающая указатель ]tach[ Общие вопросы C/C++ 1 19.01.2011 14:35
Функция возвращающая char Exeil Общие вопросы C/C++ 2 18.10.2010 19:42
Пользовательская функция,возвращающая массив savraska Microsoft Office Excel 2 20.04.2010 03:12
Функция возвращающая массив babaj Общие вопросы Delphi 8 04.07.2009 17:40
Создание надстроек. Функция, возвращающая массив значений Jarik Microsoft Office Excel 6 13.01.2009 23:11