//Массивы динамические двумерные
//Программа находит строку введенного с клавиатуры
//двумерного массива целых чисел, содержащую максимальную
//сумму элементов
#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