Циклы. Инициализация массива размерности n случайными целыми положительными значениями от 0 до 32767, страница 14

Пример поиска максимального элемента и его номера в заданной строке динамической матрицы с использованием механизма функций:

//динамическая матрица передается в функцию в качестве параметра

#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;

}