Пример программы на обработку двумерного массива (матрицы)
//Массивы динамические двумерные
//Программа находит строку введенного с клавиатуры
//двумерного массива целых чисел, содержащую максимальную
//сумму элементов
#include<iostream.h>
#include <locale.h>
//using namespace std;
typedef int telem ; //определение типа элементов массива
typedef telem *tstr ; //определение типа "указатель на telem"
typedef tstr *tmatr; //определение типа "указатель на указатель на telem"
void inputmatr(tmatr a, int str, int sto) ;
void outputmatr(tmatr a, int str, int sto) ;
telem poisk_str(tmatr a, int str, int sto, int &imax) ;
int main()
{ int i, j ;
int imax; //номер строки с максимальной суммой элементов
int n ; //число строк матрицы
int m ; //число столбцов матрицы
tmatr a ; //объявляется переменная-указатель на указатель на telem
telem max ; //максимальная сумма элементов
setlocale(LC_ALL,"Russian") ;
cout << "\nВведите количество строк и столбцов матрицы: " ;
cin >> n >> m;
a = new tstr [n] ; //выделение динамической памяти под массив
//указателей на строки массива
for(i = 0; i < n; i++) //цикл выделения памяти под каждую строку
*(a + i) = new telem [m] ; //каждому элементу массива указателей
//на строки присваивается адрес начала
//области памяти, выделяемой под строку
inputmatr(a, n, m) ;
cout << "Исходная матрица:\n" ;
outputmatr(a, n, m) ;
max = poisk_str(a, n, m, imax) ;
cout << "Максимальная сумма=" << max << " элементов строки содержится" ;
cout << endl << "в " << imax << "-й строке исходного массива " << endl ;
cout << endl << "Для завершения нажмите <Enter>" ;
//Освобождение динамической памяти
for(i = 0; i < n; i++)
delete a[i] ;
delete a ;
return 0 ;
}
void inputmatr(tmatr a, int str, int sto)
{ cout << "Введите построчно через пробел элементы" << endl ;
cout << "двумерного массива размера " << str << "x" << sto << endl ;
cout << "После ввода строки нажимайте <Enter>" << endl ;
for(int i = 0 ; i < str ; i++)
for(int j = 0 ; j < sto ; j++)
cin >> *(*(a + i) + j) ;
}
telem poisk_str(tmatr a, int str, int sto, int &imax)
{telem max, //максимальная сумма элементов
pr ; //текукущая сумма
imax = 0 ; //предполагаем, что максимальная сумма элементов в 0-ой строке
max = 0 ;
for(int j = 0 ; j < sto ; j++)
max += *(*(a + 0) + j) ;
for(int i = 1 ; i < str ; i++)
{pr = 0 ;
for(j = 0 ; j < sto ; j++)
pr += *(*(a + i) + j) ;
if(max < pr)
{imax = i ;
max = pr ;
}
}
return max ;
}
void outputmatr(tmatr a, int str, int sto)
{ int i, j ;
for(i = 0; i < str; i++)
{for(j = 0; j < sto; j++)
cout << *(*(a + i) + j) << ' ' ;
cout << '\n';
}
}
Лабораторная работа №6