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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 23:36   #1
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию Передача многомерного массива в функцию

Подскажите пожалуйста как осуществить передачу многомерного массива в функцию.
Вот пример задания(через функцию):
Код:
Дана матрица 6х4 вещественного типа. Создать одномерный массив, содержащий элементы матрицы,
большие среднего арифметического значения положительных элементов матрицы.
И мое решение, которое не работает:
Код:
#include <stdafx.h>
#include <iostream>
#include <iomanip>
#include <math.h>
#include <time.h>
#include <conio.h>
using namespace std;
double sr_arifm(double arr0[][], int n, int m)
{
	int k=0;double b=0,sum=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			if(arr0[i][j]>0)
			{
				sum+=arr0[i][j];k++;
			}
	b=sum/k;
	return b;
}
int _tmain(int argc, _TCHAR* argv[])
{	
	time_t t;
	srand(time(&t));
	setlocale(LC_ALL,"Russian");
	const int n=6, m=4;
	double arr0[n][m],*arr,arr2[n*m],sa=0;
	int p=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			int o=pow(-1.0,rand()%2);
			arr0[i][j]=o*rand()%5;
		}
	for(int i=0;i<n;i++)
	{	
		for(int j=0;j<m;j++)
			cout<<setw(2)<<arr0[i][j]<<" ";
		cout<<endl;
	}
	cout<<"\n\n\n";
	sa=sr_arifm(arr0,n,m);
	_getch();
	return 0;
}
Собственно прервался, при попытке передачи многомерного массива в функцию. Можно и не решать саму задачу(хотя непротив, посмотреть ваш вариант решения, с использованием функции), важней, и лучше, чтобы объяснили как подобное делать. Заранее благодарен.
Aerial вне форума Ответить с цитированием
Старый 08.05.2010, 00:22   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Передавай указатель на указатель
Код:
double sr_arifm(double ** arr0, int n, int m)
полный код
Код:
#include <iostream>
#include <iomanip>
#include <math.h>
#include <time.h>
#include <conio.h>

using namespace std;

double sr_arifm(double ** arr0, int n, int m)
{
	int k=0;double b=0,sum=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			if(arr0[i][j]>0)
			{
				sum+=arr0[i][j];k++;
			}
	b=sum/k;
	return b;
}
int main()
{	
	time_t t;
	srand(time(&t));
	setlocale(LC_ALL,"Russian");
	const int n=6, m=4;
	double **arr0,*arr,arr2[n*m],sa=0;
	arr0 = new double *[n];
	for(int i = 0; i < n; i++)
		arr0[i] = new double[m];
	int p=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			int o=pow(-1.0,rand()%2);
			arr0[i][j]=o*rand()%5;
		}
	for(int i=0;i<n;i++)
	{	
		for(int j=0;j<m;j++)
			cout<<setw(2)<<arr0[i][j]<<" ";
		cout<<endl;
	}
	cout<<"\n\n\n";
	sa=sr_arifm(arr0,n,m);
	_getch();
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 08.05.2010 в 00:26.
Ozerich вне форума Ответить с цитированием
Старый 08.05.2010, 03:46   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Как вариант...
Код:
#include <iostream>

template <typename T, int ROW, int COL>
void foo(const T (&arr)[ROW][COL])
{
	for(int i = 0; i < ROW; ++i)
             {
		std::cout << "[ ";
		for(int j = 0; j < COL; ++j)
			std::cout  << arr[i][j] << " ";
		std::cout << "]\n"; 
	}
}

int main(){


	int arr[2][2] = { {1, 2}, {3, 2} };

	foo(arr);

	return 0;
}
http://codepad.org/JJNTMoVi
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 08.05.2010, 20:27   #4
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию

Ozerich, спасибо большое, разобрался вроде
ISergeyN, также спасибо, пока еще не понял, но обязательно рассмотрю подробнее
Aerial вне форума Ответить с цитированием
Старый 09.05.2010, 09:55   #5
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Удаление делает так
Код:
for(int i = 0; i < n; i++)
    delete arr0[i];
delete arr0;
p.s последний раз отвечаю на вопрос в личке
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.05.2010, 14:06   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Ozerich Посмотреть сообщение
Удаление делает так
Код:
for(int i = 0; i < n; i++)
    delete arr0[i];
delete arr0;
Так нужно..
Код:
for(int i = 0; i < n; i++)
    delete []arr0[i];
delete []arr0;
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си++. Передача массива в функцию. Diamond2107 Помощь студентам 7 03.12.2009 20:15
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
передача массива в функцию JOFRIF Общие вопросы C/C++ 8 02.08.2009 12:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11