Как найти сумму элементов вещественной матрицы
// . Вычислить сумму элементов вещественной матрицы, находящихся между минимальным и максимальным элементами. Создать функции для:
//¬ определения номера минимального элемента +
//¬ определения номера максимального элемента +
//¬ определения суммы.
// если 1 максимальных и 1 минимальных элементов несколько найти сумму элементов раположеннх между первым минимальным и первым максимальным
#include <iostream>
using namespace std;
int minimum(int** mas, int n, int m) {
int min = mas[0][0];
int str = 1;
int srl = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
if (min > mas[i][j]) {
min = mas[i][j];
str = i + 1;
srl = j + 1;
}
}
cout << "Минимальный номер элемента в массиве\t" << str << srl << endl;
return str, srl;
}
int maximum(int** mas, int n, int m) {
int max = mas[0][0];
int str1 = 0;
int srl1 = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
if (max < mas[i][j]) {
max = mas[i][j];
str1 = i + 1;
srl1 = j + 1;
}
}
cout << "Максимальный номер элемента в массиве\t" << str1 << srl1 << endl;
return str1, srl1;
}
void sum (int str, int srl, int str1, int srl1) {
}
int main() {
int n, m;
setlocale(LC_ALL, "RUS");
cout << "Вводите матрицу" << endl;
cin >> n >> m;
cout << "Вводите значения" << endl;
int** mas = new int* [n];
for (int i = 0; i < n; i++)
mas[i] = new int[m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cin >> mas[i][j];
}
for (int i = 0; i < n; i++) {
cout << "(";
for (int j = 0; j < m; j++)
cout << mas[i][j];
cout << ")" << endl;
}
int str, srl = minimum(mas, n, m);
int str1, srl1 = maximum(mas, n, m);
}
Дан двумерный массив. Вывести номера максимальных и минимальных элементов(это я сделал). И найти сумму между минимальным и максимальными элементам. Подскажите как это сделать.
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Ну, суммировать можно примерно так:
int sum (int** mas, int m, int str, int srl, int str1, int srl1)
{
int s = 0;
for(int i = str*m+srl+1; i <str1*m+srl1; ++i)
s += mas[i/m][i%m];
return s;
}
Только вот тут у нас С++, а значит, такое -
return str, srl;
будет работать не так, как вы думаете... (читай об операторе запятая)
void minimum(int** mas, int n, int m, int& str, int& srl)
{
int min = mas[0][0];
str = srl = 0;
....
if (min > mas[i][j]) {
min = mas[i][j];
str = i;
srl = j;
Ну, и для максимума переписать аналогично... И вызывать надо как
int str, srl;
minimum(mas, n, m, str, srl);
Автор решения: Ayrat Arifullin
→ Ссылка
Я бы использовал такой прекрасный инструмент языка С++ - STL
#include <algorithm>
#include <iostream>
#include <vector>
template<int RowSize, int ColumnSize>
class Matrix {
public:
Matrix() {
std::cout << "Please, enter elements for matrix!" << std::endl;
fillMatrix();
}
template<int RowSize2, int ColumnSize2>
bool operator==(Matrix<RowSize2, ColumnSize2> matrix) {
// Хотел тут продемонстрировать пользу использования шаблонов,
// но к задаче это неотносится
if constexpr (RowSize != RowSize2) {
std::cout << "Row sizes of matrices are different";
return false;
} else if (ColumnSize != ColumnSize2) {
std::cout << "Column sizes of matrices are different";
return false;
} else {
}
}
int getMaxElement() const {
std::vector<int> max_elements_over_all_rows(RowSize);
std::transform(matrix_.begin(), matrix_.end(), max_elements_over_all_rows.begin(), [](const auto& row) {
return *std::max_element(row.begin(), row.end());
});
return *std::max_element(max_elements_over_all_rows.begin(), max_elements_over_all_rows.end());
}
int getMinElement() const {
std::vector<int> max_elements_over_all_rows(RowSize);
std::transform(matrix_.begin(), matrix_.end(), max_elements_over_all_rows.begin(), [](const auto& row) {
return *std::min_element(row.begin(), row.end());
});
return *std::min_element(max_elements_over_all_rows.begin(), max_elements_over_all_rows.end());
}
private:
std::vector<std::vector<int>> matrix_ = std::vector<std::vector<int>>(RowSize, std::vector<int>(ColumnSize));
void fillMatrix() {
for(int i = 0; i < RowSize; i++) {
for(int j = 0; j < ColumnSize; j++) {
int value;
std::cin >> value;
matrix_.at(i).at(j) = value;
}
}
}
};
int main(int argc, char *argv[]) {
Matrix<2, 2> matrix;
std::cout << matrix.getMaxElement() << std::endl;
std::cout << matrix.getMinElement() << std::endl;
}
Прошу прощения, что решение получилось громоздким. В угловых скобочках указываете размерность матрицы. При конструкции матрицы от Вас требуется ее заполнить, иначе программа не продолжит работу