C/C++

Даны две матрицы разного размера.

Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти среднее арифметическое ненулевых элементов в каждой строке. Составить программу на C++ (заранее большое спасибо)
Alexei Koldyn
Alexei Koldyn
92
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
const int N1 = 4, M1 = 5, N2 = 3, M2 = 6;
int A1[N1][M1], A2[N2][M2], i;
int max1 = 0,max2 = 0;
double moyen;
srand(time(NULL));
for(int x = 0; x < N1; x++)
{
for(int y = 0; y < M1; y++)
{
A1[x][y] = rand() % 21;
cout << A1[x][y] << '\t';
if(A1[x][y] > max1) max1 = A1[x][y];
}
cout << endl;
}
cout << endl;
for(int x = 0; x < N2; x++)
{
for(int y = 0; y < M2; y++)
{
A2[x][y] = rand() % 21;
cout << A2[x][y] << '\t';
if(A2[x][y] > max2) max2 = A2[x][y];
}
cout << endl;
}
cout << endl;
if(max1 >= max2)
{
cout << "Первая матрица." << endl;
for(int x = 0; x < N1; x++)
{
i = 0;
moyen = 0.0;
for(int y = 0; y < M1; y++)
if(A1[x][y] != 0)
{
i++;
moyen += static_cast<double> (A1[x][y]);
}
if(i)
{
moyen /= static_cast<double> (i);
cout << "В строке " << x + 1 << " среднее равно " << moyen << endl;
}
else
{
cout << "В строке " << x + 1 << " нет не нулевых элементов." << endl;
}
}
}
else
{
cout << "Вторая матрица." << endl;
for(int x = 0; x < N2; x++)
{
i = 0;
moyen = 0.0;
for(int y = 0; y < M2; y++)
if(A2[x][y] != 0)
{
i++;
moyen += static_cast<double> (A2[x][y]);
}
if(i)
{
moyen /= static_cast<double> (i);
cout << "В строке " << x + 1 << " среднее равно " << moyen << endl;
}
else
{
cout << "В строке " << x + 1 << " нет не нулевых элементов." << endl;
}
}
}

return 0;
}
Shahidin Pahirdinov
Shahidin Pahirdinov
81 857
Лучший ответ
Alexei Koldyn спасибо огромное!
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int print_matrix(int **a, int x, int y)
{
int i, j, Max = a[0][0];
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
cout << setw(3) << a[i][j];
if (a[i][j] > Max) Max = a[i][j];
}
cout << endl;
}
return Max;
}
void averages(int **a, int x, int y)
{
int i, j, k;
double s;
for (i = 0; i < x; i++)
{
cout << setw(3) << i + 1 << ": ";
k = 0;
s = 0;
for (j = 0; j < y; j++)
if (a[i][j])
{
k++;
s += a[i][j];
}
if (k) cout << setprecision(4) << fixed
<< setw(9) << s / k << endl;
else cout << "no" << endl;
}
}
int main()
{
int i, j, k, l, m, n, maxA, maxB, nozero;
double s;
cout << "k l m n: ";
cin >> k >> l >> m >> n;
srand(time(nullptr));
int **A = new int *[k];
for (i = 0; i < k; i++) A[i] = new int [l];
for (i = 0; i < k; i++) for (j = 0; j < l; j++)
A[i][j] = rand() % 100;
int **B = new int *[m];
cout << "Matrix A:" << endl;
maxA = print_matrix(A, k, l);
cout << "max(A) = " << maxA << endl;
for (i = 0; i < m; i++) B[i] = new int [n];
for (i = 0; i < m; i++) for (j = 0; j < n; j++)
B[i][j]= rand() % 100;
cout << "Matrix B:" << endl;
maxB = print_matrix(B, m, n);
cout << "max(B) = " << maxB << endl;
if (maxA > maxB)
{
cout << "Averages of Matrix A:" << endl;
averages(A, k, l);
}
if (maxB > maxA)
{
cout << "Averages of Matrix B" << endl;
averages(B, m, n);
}
system("pause");
} I
Гриша Заец
Гриша Заец
66 572
Alexei Koldyn Огромное спасибо!

Похожие вопросы