Матрица m x n. Найти макс значение среди средних значений для каждой строки матрицы. Вернуть номер строки

Здравствуйте. Код есть, но ведет себя не стабильно. Выводит не то, что нужно. Прошу помочь.matrix.cpp
#include <iostream>
#include "matrix.h"
 
using namespace std;
 
Matrix::Matrix(int rows, int cols){
    this->rows = rows;
    this->cols = cols;
 
    mas = new int*[rows];
 
    for(i=0; j<rows; i++){
        mas[i] = new int[cols];
        for(j=0; j<cols; j++){
            mas[i][j]=0;
        }
    }
}
 
 
void Matrix::Middle(int rows){
    this->rows = rows;
    for(i = 0; i < cols; i++)
        max += mas[0][i];
    for(i = 1; i < rows; i++){
        tmp = 0;
        for(j = 0; j< cols; j++)
            tmp = mas[i][j];
        if(tmp > max){
            max = tmp;
            nj = j;
        }
    }
    max/=cols;
}
 
 
void Matrix::Fill(){
 
    for(i = 0; i < rows; i++){
        for(j = 0; j < cols; j++){
            mas[i][j] = (int)rand();
        }
        Middle(i);
    }
    return;
}
 
void Matrix::Display(){
    cout<<endl<<"Matrix"<<endl;
    for(i = 0; i < rows; i++){
        printf("Строка:%i> ", i+1);
        for(j = 0; j < cols; j++){
            printf("%d ", mas[i][j]);
        }
    }
    cout<<max<<endl;
    cout<<nj<<endl;
    return;
}
matrix.h
#pragma once
 
class Matrix{
private:
    int i, j;
    int rows;
    int cols;
    int nj;
    int **mas;
    int max;
    int tmp;
public:
    Matrix(int rows, int cols);
    void Fill();
    void Middle(int rows);
    void Display();
};
main.cpp
//создать класс, для представления и обработки данных по заданию.
//обработка эл прямоугольной матрицы MxN
//найти макс значение среди средних значений для каждой строки матрицы. Вернуть номер строки.
 
#include <iostream>
#include "matrix.h"
 
using namespace std;
 
void main(){
 
    setlocale(0,"");
 
    int rows, cols;
    //Вводим строки и столбцы
    cout<<"Количество строк: ";
    cin>>rows;
    cout<<"Количество столбцов: ";
    cin>>cols;
 
    Matrix Matrix(rows, cols);//Передаем данные
    Matrix.Fill();//Находим максимальное значение среди средних значений для каждой строки матрицы
    Matrix.Display();//Отображаем
 
    system("pause");
}
Некоторая замена matrix.h
int nj;
на
int ni;
matrix.cpp
nj = j;
на
ni++;
и
cout<<nj<<endl;
на
cout<<ni<<endl;
Заметил, что оно тупо не хочет выводить матрицу
1 ответ

#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
 
int main()
{
    int M, N;            // размеры матрицы
    int **A;             // сама матрица
    ****** maxAve;       // максимальное среднее значение
    int indexMaxAve = 0; // индекс строки с максимальным средним значением
    std::cout << "Enter M: ";
    std::cin >> M;
    std::cout << "Enter N: ";
    std::cin >> N;
 
    std::srand(time(0)); // инициализируем ГПСЧ
    // выделяем память, заполняем случайными числами и выводим на экран
    A = new int*[M];
    for (int i=0; i < M; i++)
    {
        A[i] = new int[N];
        ****** sum = 0;
        for (int j=0; j < N; j++)
        {
            A[i][j] = rand() % 100;
            std::cout << std::setw(2) << A[i][j] << " ";
            sum += A[i][j];
        }
        std::cout << std::endl;
        // подсчет среднего, сравнение с текущим максимальным знаением среднего
        ****** ave = sum / N;
        if (i == 0)
            maxAve = ave;
        else if (maxAve < ave)
        {
            maxAve = ave;
            indexMaxAve = i;
        }
        // фактически память больше не нужна - освобождаем её
        delete[] A[i];
    }
    delete[] A;
 
    std::cout << "\nNumber of line with max ave: " << indexMaxAve + 1
              << " with " << maxAve << std::endl;
}
по классам сами разобьете