Другие языки программирования и технологии
Большая просьба!! ! помогите с решением задачи с++
Дана матрица 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); }
#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); }
Помогаю: в цикле стандартным методом находится минимальный элемент и в отдельную переменную записывается индекс. Ну а далее просто с помощью оператора 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;
}
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;
}
Похожие вопросы
- Помогите с решение задачи по информатике!!!
- Помогите с решением задачи на C++
- помогите с решением задачи на языке делфи..задача ниже
- помогите с решение задачи на Турбо паскале
- Помогите в решении задачи на Pascal
- помогите в решении задачи, программу надо написать в турбо паскале
- Помогите плз решение задачи по Паскулю!!! Дано натуральное число и определить яв-ся ли оно простым.
- Помогите написать решение задачи на Двумерный массив ( Borland С++)
- Здравствуйте! Помогите в решении задачи на язике С
- Помогите с решением задачи (в Лазарусе) Паскаль