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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 18:51   #1
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию Создание функции.Не компилит код.

Проверьте код пожалуйста.Не могу разобраться в чём проблема.Вроде всё логично....Особенно не понятен сам вызов создаваемой ф-ции.

Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
//Описание функции, меняющей местами максимальные элементы матриц A и B
//произвольного порядка.
 
void Repl(int* A[][], int* B[][], int* n, int* m)
 
{
int A[n][n], B[m][m], i, j;
 
//Заполнение матриц в цикле посредством генератора случайных чисел.
 
for(i=0; i<n; i++){
for(j=0; j<n; j++){
A[i][j] = rand();
 
cout << "Matrix №1" << endl << A[i][j] << " ";
cout << endl;
}}
 
 
for(i=0; i<m; i++){
for(j=0; j<m; j++){
B[i][j] = rand();
 
cout << "Matrix №2" << endl << B[i][j] << " ";
cout << endl;
}}
 
//Поиск максимальных элементов матриц.
 
int max1 = A[0][0];
for(i=0; i<n; i++){
for(j=0; j<n; j++){
if ((A[i][j]) > max1) max1=A[i][j];
cout << "Max.element of matrix №1: " << max1;
 
}}
 
int max2 = B[0][0];
for(i=0; i<m; i++){
for(j=0; j<m; j++){
if ((B[i][j]) > max2) max2=B[i][j];
cout << "Max.element of matrix №2: " << max2;
 
}}
 
//Обмен максимальных элементов между матрицами XOR-ом.
 
A[i][j] ^= B[i][j] ^= A[i][j] ^= B[i][j];
 
//Вывод результата на экран.
 
for(i=0; i<n; i++){
for(j=0; j<n; j++){
cout << A[i][j] << " ";
cout << endl;
}}
 
for(i=0; i<m; i++){
for(j=0; j<m; j++){
cout << B[i][j] << " ";
cout << endl;
}}
 
 
getch ();
 
 }
 
 void main()
 {
//Вызываем функцию несколько раз.
 Repl(A[8][8],B[13][13]);
 Repl(A[12][12],B[4][4]);
};

Последний раз редактировалось Stilet; 28.10.2009 в 11:33.
toybike вне форума Ответить с цитированием
Старый 28.10.2009, 11:09   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вот здесь
Код:
void main()
{
//Вызываем функцию несколько раз.
Repl(A[8][8],B[13][13]);
Repl(A[12][12],B[4][4]);
};
; -Это лишнее
Код:
Repl(A[8][8],B[13][13])
, а где остальные аргументы?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 28.10.2009, 18:01   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Вот пример Вашей программы, но для определенных значений столбца.
Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

//Описание функции, меняющей местами максимальные элементы матриц A и B
//произвольного порядка.

void fRepl(int A[][4],int n, int B[][7], int m);

 void main()
 {
//Вызываем функцию несколько раз.
 int C[4][4];
 int D[7][7];
 fRepl(C,4,D,7);
 //fRepl(A[12][12],B[4][4]);
 getch ();
 }
void fRepl(int A[][4],int n, int B[][7], int m)

{
int  i, j;

//Заполнение матриц в цикле посредством генератора случайных чисел.
cout << "Matrix Num1" << endl;
cout << endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
A[i][j] = rand();

cout<< A[i][j] << '\t';
}
cout << endl;
}

cout << "Matrix Num2" << endl;
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
B[i][j] = rand();

cout << B[i][j] << '\t';

}
cout << endl;
}
cout << endl;

//Поиск максимальных элементов матриц.

int max1 = A[0][0];
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if ((A[i][j]) > max1) max1=A[i][j];
}
}
cout << "Max.element of matrix Num1: " << max1<<endl;
cout << endl;
int max2 = B[0][0];
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
if ((B[i][j]) > max2) max2=B[i][j];
}
}
cout << "Max.element of matrix Num2: " << max2<<endl;
cout << endl;
//Обмен максимальных элементов между матрицами XOR-ом.

A[i][j] ^= B[i][j] ^= A[i][j] ^= B[i][j];

//Вывод результата на экран.

for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
cout << A[i][j] << '\t';
}
cout << endl;
}
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
cout << B[i][j] << '\t';
}
cout << endl;
}
}
Наберите для поиска "указатели как аргументы" и почитайте про передачу многомерных массивов как аргументов.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 28.10.2009, 19:34   #4
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию

большое спасибо!
всё отлично, но почему-то в вашем коде не происходит обмен между максимальными элементами?
Пробовал через 3-ю переменную, тоже самое......

Последний раз редактировалось toybike; 28.10.2009 в 19:38.
toybike вне форума Ответить с цитированием
Старый 07.11.2009, 16:55   #5
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию

Вот код поправил, всё работает, но как избавиться от определённых значений столбца?????Почитал то, что посоветовали выше, и ничего толком не понял, может кто занет как надо???)))))

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

//Прототип функции, меняющей местами максимальные элементы матриц A и B
//произвольного порядка.

void Repl(int A[][4],int n, int B[][7], int m);

 void main()
 {
//Вызываем функцию несколько раз.
 int A[4][4];
 int B[7][7];
 Repl(A,4,B,7);
 getch ();
 }
void Repl(int A[][4],int n, int B[][7], int m)

{
int  i, j;

//Заполнение матриц в цикле посредством генератора случайных чисел.
cout << "Matrix Num1" << endl;
cout << endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
A[i][j] = rand() %120;

cout<< A[i][j] << '\t';
}
cout << endl;
}
cout << endl;
cout << "Matrix Num2" << endl;
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
B[i][j] = rand() %150;

cout << B[i][j] << '\t';

}
cout << endl;
}
cout << endl;

//Поиск максимальных элементов матриц.

int max1 = A[0][0];
int i_A=0, j_A=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if ((A[i][j]) > max1) {max1=A[i][j]; i_A=i; j_A=j;}
}
}
cout << "Max.element of matrix Num1: " << max1 << endl;
cout << endl;
int max2 = B[0][0];
int i_B=0, j_B=0;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
if ((B[i][j]) > max2) {max2=B[i][j]; i_B=i; j_B=j;}
}
}
cout << "Max.element of matrix Num2: " << max2 <<endl;
cout << endl;
//Обмен максимальных элементов между матрицами.

{
int temp=A[i_A][j_A];
A[i_A][j_A]=B[i_B][j_B];
B[i_B][j_B]=temp;
}


//Вывод результата на экран.

cout << "Matrix Num1 with Max.element of matrix Num2" << endl;
cout << endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
cout << A[i][j] << '\t';
}
cout << endl;
}
cout << endl;

cout << "Matrix Num2 with Max.element of matrix Num1" << endl;
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
cout << B[i][j] << '\t';
}
cout << endl;
}
}
toybike вне форума Ответить с цитированием
Старый 15.11.2009, 02:08   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 534
По умолчанию

Цитата:
как избавиться от определённых значений столбца?
Код:
	
	int str = 6 ; 
	int col = 5 ; //избавились от конкретного значения столбца

	int **arr = new int*[str] ;
	for (int i=0; i<str; i++) 
		arr[i] = new int[col] ;

	func(arr, str, col) ; //спокойно передали в функцию все

	for(int i=0; i<str; i++) 
		delete[]arr[i] ;
	delete[] arr ;
функция будет выглядеть примерно так
Код:
void func(int** arr, int str, int col)
{}
m0nax вне форума Ответить с цитированием
Старый 15.11.2009, 18:48   #7
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию

спасибо большое!
toybike вне форума Ответить с цитированием
Старый 17.11.2009, 00:45   #8
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию

написал вроде правильно,но что-то не так,посмотрите плиззззз!!!
Код:
#include <iostream.h>
#include <stdlib.h>



void Repl(int** A, int** B, int n, int m)

{
int  i, j;

//Заполнение матриц в цикле посредством генератора случайных чисел.
cout << "Matrix Num1" << endl;
cout << endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
A[i][j] = rand() %120;

cout<< A[i][j] << '\t';
}
cout << endl;
}
cout << endl;
cout << "Matrix Num2" << endl;
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
B[i][j] = rand() %150;

cout << B[i][j] << '\t';

}
cout << endl;
}
cout << endl;

//Поиск максимальных элементов матриц.

int max1 = A[0][0];
int i_A=0, j_A=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if ((A[i][j]) > max1) {max1=A[i][j]; i_A=i; j_A=j;}
}
}
cout << "Max.element of matrix Num1: " << max1 << endl;
cout << endl;
int max2 = B[0][0];
int i_B=0, j_B=0;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
if ((B[i][j]) > max2) {max2=B[i][j]; i_B=i; j_B=j;}
}
}
cout << "Max.element of matrix Num2: " << max2 <<endl;
cout << endl;
//Обмен максимальных элементов между матрицами.

{
int temp=A[i_A][j_A];
A[i_A][j_A]=B[i_B][j_B];
B[i_B][j_B]=temp;
}


//Вывод результата на экран.

cout << "Matrix Num1 with Max.element of matrix Num2" << endl;
cout << endl;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
cout << A[i][j] << '\t';
}
cout << endl;
}
cout << endl;

cout << "Matrix Num2 with Max.element of matrix Num1" << endl;
cout << endl;
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
cout << B[i][j] << '\t';
}
cout << endl;

}
}


 int main()
 {
int n = 6 ;
int m = 5 ;

	int **A = new int*[n] ;
	for (int i=0; i<n; i++)
		A[i] = new int[m] ;

        int **B = new int*[m] ;
	for (int i=0; i<m; i++)
		B[i] = new int[n] ;

	Repl(A, B, n, m) ;

	for(int i=0; i<n; i++)
		delete[]A[i] ;
	delete[] A ;

 for(int i=0; i<m; i++)
		delete[]B[i] ;
	delete[] B ;
 }
toybike вне форума Ответить с цитированием
Старый 17.11.2009, 11:49   #9
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 534
По умолчанию

создана матрица n*m, т.е 6 строк и 5 столбцов
Код:
int **A = new int*[n] ;
	for (int i=0; i<n; i++)
		A[i] = new int[m] ;
а обрабатываешь как будто она n*n (6 строк*6 столбцов)
Код:
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
m0nax вне форума Ответить с цитированием
Старый 17.11.2009, 18:30   #10
toybike
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 10
По умолчанию

неее, там две матрицы: A[n][n] и B[m][m].
кажется понял,ошибка тут
Код:
int **A = new int*[n] ;
	for (int i=0; i<n; i++)
		A[i] = new int[m] ;
так правильно,да?
Код:
int **A = new int*[n] ;
	for (int i=0; i<n; i++)
		A[i] = new int[n] ;
toybike вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить код одной функции... hen Помощь студентам 3 12.04.2009 23:10
Помогите исправить код одной функции... hen Общие вопросы C/C++ 1 12.04.2009 21:58
C++ Помогите оформить код через функции... hen Помощь студентам 1 11.04.2009 13:27
Помогите оформить код через функции... hen Общие вопросы C/C++ 4 11.04.2009 10:57