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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2010, 08:31   #1
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию Передача двумерного динамического массива в метод

ПОдскажите, что не так. Почему-то в метод Transposing не передаётся двумерный динамический массив. Может передавать нужно как-то иначе?

Код:
#include <conio.h>
#include <stdio.h>
#include <locale.h>


/*Класс содержит функции для выполнения операций над матрицами(двумерный массив)*/
class OperationsOverMatrixes{
public:
	int Transposing(int **a, int k, int n);//метод возвращает транспонированную матрицу
	int** MultiplicationToNumber(int a, int m, int n);//метод возвращает матрицу, умноженную на число
	int** DivisionIntoNumber(int **a, int m, int n);//метод возвращает матрицу, деленную на число
	int** AdditionOfMatrixes(int **a,int **b, int m, int n);//метод возвращает сумму двух матриц
	int** SubtractionOfMatrixes(int **a,int **b, int m, int n);//метод возвращает разность двух матриц
};

int OperationsOverMatrixes::Transposing(int **a, int k, int n)
{
	int tmp = 0;
	int **transp_matr;
	for(int i = 0; i < n; i++){
		for(int j = 0; j < k; j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	transp_matr= new int *[k];
	for(int i = 0; i < n; i++){
		transp_matr[i] = new int [n];
	}
	for(int i = 0; i < n; i++){
		for(int j = 0; j < k; j++){
			transp_matr[i][j] = a[i][j];
		}
	}
	for(int i = 0; i < k; i++){
		for(int j = 0; j < n; j++){
			transp_matr[i][j] = a[j][i];
		}
	}
	for(int i = 0; i < n; i++){
		for(int j = 0; j < k; j++){
			printf("%d ",transp_matr[i][j]);
		}
		printf("\n");
	}
	return **transp_matr;
}


int main()
{
	setlocale(LC_ALL,"Russian");
	int n,m,**a;
	//char operation;
	printf("Введите размерность матрицы(пример: 2 2) = ");
	scanf("%d %d",&n,&m);
	printf("\n");
	a = new int *[n];
	for (int i = 0; i < n; i++){
		a[i] = new int [m];
	}
	printf("Вводите элементы матрицы:\n\n");
	for(int i = 0; i < n*m; i++){
			scanf("%d",&a[i]);
			if((i+1)%n == 0){
				printf("\n");
			}
	}
	OperationsOverMatrixes A;
	A.Transposing(a,m,n);
	//printf("Введите операцию = ");
}
Дырдин вне форума Ответить с цитированием
Старый 19.03.2010, 09:45   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Немного подправил ваш код.

Код:
#include <conio.h>
#include <stdio.h>
#include <locale.h>


/*Êëàññ ñîäåðæèò ôóíêöèè äëÿ âûïîëíåíèÿ îïåðàöèé íàä ìàòðèöàìè(äâóìåðíûé ìàññèâ)*/
class OperationsOverMatrixes{
public:
	int** Transposing(int **a, int k, int n);//ìåòîä âîçâðàùàåò òðàíñïîíèðîâàííóþ ìàòðèöó
	int** MultiplicationToNumber(int a, int m, int n);//ìåòîä âîçâðàùàåò ìàòðèöó, óìíîæåííóþ íà ÷èñëî
	int** DivisionIntoNumber(int **a, int m, int n);//ìåòîä âîçâðàùàåò ìàòðèöó, äåëåííóþ íà ÷èñëî
	int** AdditionOfMatrixes(int **a,int **b, int m, int n);//ìåòîä âîçâðàùàåò ñóììó äâóõ ìàòðèö
	int** SubtractionOfMatrixes(int **a,int **b, int m, int n);//ìåòîä âîçâðàùàåò ðàçíîñòü äâóõ ìàòðèö
};

int** OperationsOverMatrixes::Transposing(int **a, int k, int n)
{
	int tmp = 0, i, j;
	int **transp_matr;
	for(i = 0; i < n; i++){
		for(j = 0; j < k; j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	transp_matr= new int *[k];
	for(i = 0; i < n; i++){
		transp_matr[i] = new int [n];
	}
	for(i = 0; i < n; i++){
		for(j = 0; j < k; j++){
			transp_matr[i][j] = a[i][j];
		}
	}
	for(i = 0; i < k; i++){
		for(j = 0; j < n; j++){
			transp_matr[i][j] = a[j][i];
		}
	}
	for(i = 0; i < n; i++){
		for(j = 0; j < k; j++){
			printf("%d ",transp_matr[i][j]);
		}
		printf("\n");
	}
	return transp_matr;
}


int main()
{
	setlocale(LC_ALL,"Russian");
	int n,m,**a, **b, i, j;
	//char operation;
	printf("Ââåäèòå ðàçìåðíîñòü ìàòðèöû(ïðèìåð: 2 2) = ");
	scanf("%d %d",&n,&m);
	printf("\n");
	a = new int *[n];
	for (i = 0; i < n; i++){
		a[i] = new int [m];
	}
	printf("Ââîäèòå ýëåìåíòû ìàòðèöû:\n\n");
	for(i = 0; i < n; i++)
		for(j = 0; j < m; j++){
			scanf("%d",&a[i][j]);
			if((i+1)%n == 0)
				printf("\n");
			}

	printf("\n");

	OperationsOverMatrixes A;
	b = A.Transposing(a,m,n);

	printf("\n\n");

	for(i = 0; i < n; i++)
		for(j = 0; j < m; j++){
			printf("%d, ",b[i][j]);
			}

	return 0;
}
profi вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки из двумерного динамического массива hidraulik Общие вопросы C/C++ 0 08.12.2009 10:48
Освобождение динамического массива? VintProg Общие вопросы Delphi 15 28.08.2009 10:41
Передача двумерного массива аля матрицы из функции bondik Общие вопросы C/C++ 1 20.05.2009 15:46
Передача динамического массива как параметр ф-ции kurdt Общие вопросы Delphi 2 26.04.2009 17:35
СОХРАНИЯ В ФАЙЛ ДВУМЕРНОГО ДИНАМИЧЕСКОГО МАСИВА!!!! _FL@ER_ Помощь студентам 2 23.06.2007 16:31