Программа не вычисляет среднее арифметическое двухмерного массива
Есть три задачи которые нужно объединить в одну. Только с использованием функций.
Напишите функцию, которая определяет двумерный массив целых чисел:
Сумма всех элементов в массиве;
Среднее арифметическое всех элементов в массиве;
Я изучаю C ++ и только начинаю разбираться в виртуальных функциях.
Для описанной задачи виртуальные функции требуются. Обязательно должен быть 2D-массив.
Нельзя поместить код из функций Sum и Average и поместить в main. Хочу разобраться с головной болью при передаче массивов и результатов.
Исправьте мои ошибки, пожалуйста
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
void FillRandomNumbers
(int** matrix, const size_t rows, const size_t columns)
{
srand(time(0));
for (size_t row = 0; row < rows; row++)
{
for (size_t column = 0; column < columns; column++)
{
matrix[row][column] = rand() % 10;
}
}
}
void Print(int** matrix, const size_t rows, const size_t columns)
{
for (size_t row = 0; row < rows; row++)
{
cout << endl;
for (size_t column = 0; column < columns; column++)
{
cout << matrix[row][column] << " ";
}
}
}
int Sum(int** matrix, const size_t rows, const size_t columns)
{
int sum = 0;
for (size_t row = 0; row < rows; row++)
{
for (size_t column = 0; column < columns; column++)
{
sum += matrix[row][column];
}
}
return sum;
}
int Average(float average, size_t sum, size_t rows, size_t columns)
{
int numbersElements = rows * columns;
average = sum / numbersElements;
return average;
}
int main()
{
size_t rows, columns, sum;
cout << "Enter the number of rows of the matrix:";
cin >> rows;
cout << "Enter the number of columns in the matrix:";
cin >> columns;
int** matrix = new int* [rows];
for (size_t row = 0; row < rows; row++)
{
matrix[row] = new int[columns];
}
FillRandomNumbers(matrix, rows, columns);
cout << "\n matrix:\n";
Print(matrix, rows, columns);
cout << "\nThe sum of all elements of the matrix: "
<< Sum(matrix, rows, columns) << endl;
float average;
cout << "\nThe average of all elements of the matrix: "
<< Average(average, sum, rows, columns) << endl;
}
Ответы (2 шт):
Эта ошибка сразу проявляется компилятором предупреждениями :
mass2.cpp: In function ‘int main()’:
mass2.cpp:50:15: warning: ‘sum’ may be used uninitialized in this
function [-Wmaybe-uninitialized]
average = sum / numbersElements;
~~~~^~~~~~~~~~~~~~~~~
mass2.cpp:59:23: note: ‘sum’ was declared here
size_t rows, columns, sum;
После вычисления суммы, вы результат никуда не сохраняете
cout << "\nThe sum of all elements of the matrix: "
<< Sum(matrix, rows, columns) << endl;
И вычисление среднего значения приводит к неопределённому результату, так как в переменную sum :
size_t rows, columns, sum;
вы никакое значение не задаёте.
Поправляем так :
sum = Sum(matrix, rows, columns) ;
cout << "\nThe sum of all elements of the matrix: "
<< sum << endl;
Написать функцию, определяющую в двумерном массиве целых чисел : Сумму всех элементов массива; Среднее арифметическое всех элементов массива;
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
void FillRandomNumbers
(int matrix[][50], const size_t rows, const size_t columns)
{
srand(time(0));
for (size_t row = 0; row < rows; row++)
{
for (size_t column = 0; column < columns; column++)
{
matrix[row][column] = rand() % 10;
}
}
}
void Print(int matrix[][50], const size_t rows, const size_t columns)
{
for (size_t row = 0; row < rows; row++)
{
cout << endl;
for (size_t column = 0; column < columns; column++)
{
cout << matrix[row][column] << " ";
}
}
}
int Sum(int matrix[][50], const size_t rows, const size_t columns)
{
int sum = 0;
for (size_t row = 0; row < rows; row++)
{
for (size_t column = 0; column < columns; column++)
{
sum += matrix[row][column];
}
}
return sum;
}
double Average( int add[][50], size_t rows, size_t columns)
{
int numbersElements = rows * columns;
double sum = Sum(add, rows, columns);
return sum / numbersElements;;
}
int main()
{
const int rows = 50, columns = 50;
int ro, co;
cout << "Enter the number of rows of the matrix:";
cin >> ro;
cout << "Enter the number of columns in the matrix:";
cin >> co;
int matrix [rows][columns];
FillRandomNumbers(matrix, ro, co);
cout << "\n matrix:\n";
Print(matrix, ro, co);
cout << "\nThe sum of all elements of the matrix: "
<< Sum(matrix, ro, co) << endl;
float average;
cout << "\nThe average of all elements of the matrix: "
<< Average(matrix, ro, co) << endl;
}