Другие языки программирования и технологии

Помогите, пожалуйста, решить задачу по С++, тема "Массивы".

Дана вещественная матрица А (N,M). Составить программу замены всех отрицательных элементов матрицы на элемент, имеющий максимальное значение.
Как понимаю, вещественная матрица это двумерный массив, скажем double matrix[n][m];
Ищем вначале максимальный элемент, просто берём переменную max, записываем туда какое-нибудь число, желательно такое, чтобы оно было меньше всех элементов матрицы и идём по циклу и сравниваем, если число больше максимального, то присваиваем максимуму число.
Затем идём и ищем отрицательные элементы, если находим, меняем просто на максимальное.
AM
Andrei Moshkov
28 648
Лучший ответ
Алексей Полушин Максимальное число. Записываем первое число массива и идем по массиву проверяя что бы это число не было меньше. Если находим число большее то записываем его в переменную. Нет смысла писать какое то число в max кроме первого в массиве. Даже если оно и будет максимальным, то остальные числа его не изменят.
алгоритм поиска максимального числа:
int max;
max = arr[0];
for(int i = 1; i < sizeof(arr); i++){
if(max<arr[i]) max = arr[i];
}

алгоритм поиска отрицательных чисел:
for(int i = 0; i<sizeof(arr); i++){
if(arr[i]<0){
//сделать что то
}
}
Леонид Ковалев
Леонид Ковалев
15 388
http://coliru.stacked-crooked.com/a/b59928ddc7d4127f

#include
#include
#include
#include
#include
#include
#include

template
using matrix_t = std::array<std::array, N>;

namespace std
{
template
constexpr auto size(const matrix_t &) noexcept
{
return M * N;
}
}

template
std::ostream & operator <<( std::ostream & os, const matrix_t & matrix )
{
for (auto&& row : matrix) [&]{for (auto&& elem : row) std::cout << std::setw( 7 ) << elem << " ";}(), std::cout << "\n";
return os;
}

int main(int argc, char * argv[])
{
constexpr size_t M = 7;
constexpr size_t N = 3;

using type = double;

matrix_t matrix{};

auto begin = (type *)std::data( matrix );
auto end = (type *)std::data( matrix ) + std::size( matrix );

std::random_device engine;
std::uniform_real_distribution<> dist{-13, 42};
std::generate( begin, end, std::bind(dist, std::ref(engine)) );

std::cout << matrix << std::endl;

if ( auto max_elem = std::max_element( begin, end ); max_elem != end )
{
std::cout << "max_elem: " << *max_elem << std::endl;
std::replace_if( begin, end, [](auto&&v){return v < 0;}, *max_elem );
}

std::cout << matrix << std::endl;
}
Андрей Наумов
Андрей Наумов
14 578