Пример поиска максимального элемента и его номера в заданной строке динамической матрицы с использованием механизма функций:
//динамическая матрица передается в функцию в качестве параметра
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
void MaxInStr(char **, int, int, char&, int& ); //прототип функции
main ()
{int i, j, nmax;
char max;
const int r= 3; //размеры матрицы
const int c=4;
static char **a = new char* [r]; //выделение памяти под массив указателей
for (i=0; i<r; i++)
a[i] = new char[c]; //выделение памяти под строки
for (i=0; i<r; i++) //цикл для ввода элементов матрицы
for (int j=0; j<c; j++)
cin >> a[i][j];
for (i=0; i<r; i++) //цикл для вывода элементов матрицы
{for (j=0; j<c; j++)
cout <<setw(7) << a[i][j];
cout <<endl;
}
for( i=0; i< r; i++) //цикл по строкам
{
MaxInStr (a, i, c, max, nmax); //вызов функции и передача ей // матрицы (а) , номера строки ( i)для поиска max, //значения второго размера матрицы (с) //и по ссылке переменных для возврата //максимального значения и его номера в строке
cout << i << " " << max << " " << nmax << endl;
}
for (i=0; i<r; i++)
delete a[i]; //освобождение памяти, занимаемой строками
delete [] a; //освобождение памяти, выделенной под массив указателей
return 0;
}
void MaxInStr (char *pA[ ], int k, int c, char &MaxEl, int &NMax) //матрица объявлена как массив указателей
{
MaxEl = pA[k][0]; // есть не что иное, как *(*(pA+k)+0)
NMax = 0;
for (int j= 1; j< c; j++) //цикл по строке матрицы
if (pA[k][j] > MaxEl)
{ MaxEl =pA[k][j]; NMax = j; }
}
Рассмотрим возможность возврата в вызывающую программу двумерного массива, как результата выполнения функции:
#include <iostream.h>
#include <process.h>
int **single_matr (int n) ; //прототип функции
void main()
{int n;
cout << “\n Input n:”;
cin >> n;
int **matr;
matr = single_matr(n); //вызов функции
for (int i=0; i<n; i++) //цикл для вывода на экран значений матрицы
{ cout << “\n stroka “ << (i+1) << “:”;
for (int j=0; j<n; j++)
cout << “\t” << matr[i] [j];
cout << endl << endl;
}
for (i=0; i<n; i++) //освобождение памяти, занимаемой динамической матрицей
delete matr [i]; //происходит здесь
delete [ ] matr;
}
int **single_matr (int n) //определение функции
{ int **p;
p=new int*[n]; //выделение памяти под массив указателей
if (p==NULL) //если память не выделена
{cout << “не создан динамический массив“;
exit(1);
}
for (int i=0; i<n; i++)
{p[i] = new int [n]; //выделение памяти под строку матрицы
if (p[i] ==NULL) //если память не выделена
{ cout << “не создан динамический массив”;
exit(1);
}
for (int j=0; j<n; j++)
if (j!=i)
p[i][j] = 0;
else p[i][j] = 1;
}
return p;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.