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

Большая просьба!! ! помогите с решением задачи с++

Дана матрица B[6;6]. Найти минимальный элемент матрицы и его индексы. Если номер столбца больше номера строки, то все нулевые элементы матрицы заменить на 1, иначе все отрицательные элементы матрицы умножить на найденный минимальный элемент
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
typedef unsigned int index_t;
struct info {
    info() : min(0), index_row(0), index_col(0) { }
    int min;
    index_t index_row;
    index_t index_col;
};
void random(int *, int *);
void show(int *, int *, const size_t);
info search_min(info, int *, int *, const size_t);
void replace(int *, int *);
void replace(int *, int *, const int);
int main() {
    srand(unsigned(time(NULL)));
    const size_t rows = 6, cols = 6;
    int b[rows][cols];
    int * p = &b[0][0], * e = &b[rows - 1][cols - 1];
    random(p, e);
    show(p, e, cols);
    info inf;
    inf = search_min(inf, p, e, cols);
    cout << endl << endl << " index_col = " << inf.index_col << endl << " index_row = " << inf.index_row << endl << endl;
    inf.index_col > inf.index_row? replace(p, e) : replace(p, e, inf.min);
    show(p, e, cols);
    cin.get();
    return 0;
}
void random(int * _beg, int * _end) { do *_beg = rand() % 19 - 9; while (_beg++ < _end); }
void show(int * _beg, int * _end, const size_t _cols) {
    index_t r = 0, c = 0;
    do {
        if (c && !(c % _cols)) cout << endl;
        cout << setw(4) << *_beg;
        ++c;
    } while (_beg++ < _end);
}
info search_min(info _inf, int * _beg, int * _end, const size_t _cols) {
    int min;
    _inf.min = min = *_beg;
    ++_beg;
    index_t r = 0, c = 1;
    _inf.index_col = _inf.index_row = 0;
    do {
        if (c && !(c % _cols)) { c = 0; ++r; }
        if (*_beg < min) { _inf.min = min = *_beg; _inf.index_row = r; _inf.index_col = c; }
        ++c;
    } while (_beg++ < _end);
    return _inf;
}
void replace(int * _beg, int * _end) { do if (!*_beg) ++*_beg; while (_beg++ < _end); }
void replace(int * _beg, int * _end, const int _min) { do if (*_beg < 0) *_beg *= _min; while (_beg++ <= _end); }
АИ
Ахмед Исинов
81 344
Лучший ответ
Помогаю: в цикле стандартным методом находится минимальный элемент и в отдельную переменную записывается индекс. Ну а далее просто с помощью оператора IF определяется нужное действие и опять же в цикле выполняется.
Псевдокод:

min = MAX;
min_i;
min_j;
for(i=0; i<6; i++) for(j=0; j<6; j++) {
    if(B[i][j] < min) {
        min_i = i;
        min_j = j;
        min = B[i][j];
    }
}

if(min_i > min_j) { // в зависимости от того, где столбцы, а где строки
    for(i=0; i<6; i++) for(j=0; j<6; j++) if(B[i][j] == 0) B[i][j] = 1;
} else {
    for(i=0; i<6; i++) for(j=0; j<6; j++) if(B[i][j] < 0) B[i][j] *= min;
}
Владимир Рощин
Владимир Рощин
37 544