Задана квадратная матрица А размерности n. Найти наименьшее среди значений элементов столбца с наибольшей суммой модулей элементов. Если таких столбцов несколько, выбрать самый первый из них.
(если будет возможность, объясните свой код, пожалуйста, ибо при всём желании просто не понимаю что и как делать ((()
Другие языки программирования и технологии
Очень срочно нужна помощь в написании кода С++. Всё не вмещается, поэтому задание в пояснении. Помогите, пожалуйста!!
1 Найдём столбцы с наибольшей суммой модулей элементов
2 Если таких столбцов несколько, выбрать самый первый из них
3 найдём наименьшее среди значений элементов столбца
всё просто )
2 Если таких столбцов несколько, выбрать самый первый из них
3 найдём наименьшее среди значений элементов столбца
всё просто )
Andrej Kotov
Прекрасный код...
долго все это
хотя бы этот урок почитайте: kvodo.ru/urok-9-matritsyi-obshhie-svedeniya.html
только у вас одна размерность будет N, а не N и M. соотв-но измените код и вводите элементы.
потом уже обрабатываете их в цикле. по требуемым условиям задания
хотя бы этот урок почитайте: kvodo.ru/urok-9-matritsyi-obshhie-svedeniya.html
только у вас одна размерность будет N, а не N и M. соотв-но измените код и вводите элементы.
потом уже обрабатываете их в цикле. по требуемым условиям задания
Andrej Kotov
спасибо)
я бы так сделал. так понятнее. безовсяких **
квадратная матрица размером N
int N;
cin >> N;
// строка
struct row{
int* data; данные
};
struct matrix2d{
row* rows; // строки
};
matrix2d m;
m.rows = new row[N];
// проходимся по строкам.
выделяем память
for(int i = 0; i < N; ++i){
m.rows[i]->data = new int[N];
}
проход по столбцам
просто проход по строкам, и берём первое значение каждой строки
for(int i = 0; i < N; ++i){
m.rows[i]->data[0] - 0 значит первый столбец
}
сумма элементов по модулю значит просто сложить число. а если оно с минусом, то нужно минус убрать.
например 5 + -5 будет 10
минус можно убрать математически -5 * -1 = 5;
можно использовать функцию std::abs(); std::fabs();
-----
цель найти наименьшее в столбце с наибольшей суммой
значит нужна переменная которая хранит наименьшее
int minimum = m.row[0]->data[0];
и макс сумму
int maxsumm = 0;
int ID = 0; // тут хранится индекс столбца с максимальной суммой
for(int i = 0; i < N; ++i){
нужно проходить по столбцам, складывая значение
int summ = 0;
for(int o = 0; o < N; ++o){
summ += std::abs( m.row[o]->data[i] );
}
if(summ>maxsumm) // если сумма текущего столбца больше чем было ранее
{
maxsumm = summ;
ID = i;
}
}
нашли индекс столбца с максимальной суммой.
осталось пройти по столбцу в поиске наименьшего значения.
int mininmum = m.rows[0]->data[ID];
for(int i = 0; i < N; ++i){
if( m.rows[i]->data[ID] < minimum) minimum = m.rows[i]->data[ID];
}
удаление
for(int i = 0; i < N; ++i){
delete []m.rows[i]->data;
}
delete []m.rows;
квадратная матрица размером N
int N;
cin >> N;
// строка
struct row{
int* data; данные
};
struct matrix2d{
row* rows; // строки
};
matrix2d m;
m.rows = new row[N];
// проходимся по строкам.
выделяем память
for(int i = 0; i < N; ++i){
m.rows[i]->data = new int[N];
}
проход по столбцам
просто проход по строкам, и берём первое значение каждой строки
for(int i = 0; i < N; ++i){
m.rows[i]->data[0] - 0 значит первый столбец
}
сумма элементов по модулю значит просто сложить число. а если оно с минусом, то нужно минус убрать.
например 5 + -5 будет 10
минус можно убрать математически -5 * -1 = 5;
можно использовать функцию std::abs(); std::fabs();
-----
цель найти наименьшее в столбце с наибольшей суммой
значит нужна переменная которая хранит наименьшее
int minimum = m.row[0]->data[0];
и макс сумму
int maxsumm = 0;
int ID = 0; // тут хранится индекс столбца с максимальной суммой
for(int i = 0; i < N; ++i){
нужно проходить по столбцам, складывая значение
int summ = 0;
for(int o = 0; o < N; ++o){
summ += std::abs( m.row[o]->data[i] );
}
if(summ>maxsumm) // если сумма текущего столбца больше чем было ранее
{
maxsumm = summ;
ID = i;
}
}
нашли индекс столбца с максимальной суммой.
осталось пройти по столбцу в поиске наименьшего значения.
int mininmum = m.rows[0]->data[ID];
for(int i = 0; i < N; ++i){
if( m.rows[i]->data[ID] < minimum) minimum = m.rows[i]->data[ID];
}
удаление
for(int i = 0; i < N; ++i){
delete []m.rows[i]->data;
}
delete []m.rows;
Andrej Kotov
спасииииибо)) и правда намного понятней
https://pastebin.com/fYw7ZG2B
#include "cstdlib"
#include "locale"
#include "iostream"
#include "iomanip"
#define CONST_ABS_ELEM_VALUE 20
#define DEFAULT_VALUE_SETW 5
int** initialize_new_matrix_with_random_values(int n, int m);
void delete_matrix(int** matrix, int m);
void output_full_matrix(int const n, int const m, int** const a, int setw_value);
void init_io_threads();
int find_max_sum_and_column_index_by_abs(int** const src_matrix, const int n, int & sum);
int find_min_element_in_column(int ** const scr_matrix, const int n, const int i);
void find_min_elem_of_max_sum_column();
int main()
{
find_min_elem_of_max_sum_column();
}
void find_min_elem_of_max_sum_column()
{
srand(NULL);
init_io_threads();
auto n = 12;
std::wcout << L"Введите размерность матрицы: ";
std::cin >> n;
std::wcout << std::endl << L"Введена матрица " << n << L" x " << n << L"." << std::endl;
std::wcout << L"Матрица заполняется случайными значениями." << std::endl;
const auto matrix = initialize_new_matrix_with_random_values(n, n);
output_full_matrix(n, n, matrix, DEFAULT_VALUE_SETW);
std::wcout << L"Находим столбец с наибольшей суммой ." << std::endl;
auto sum = 0;
const auto index = find_max_sum_and_column_index_by_abs(matrix, n, sum);
std::wcout << L"Индекс столбца:" << index + 1 << std::endl << L"Сумма модулей: " << sum << std::endl;
std::wcout << L"Находим наименьший элемент в " << index + 1 << L" столбце ." << std::endl;
const auto min_value = find_min_element_in_column(matrix, n, index);
std::wcout << L"Минимальное значение элемента: " << min_value << std::endl;
std::wcout << L"Освобождаем память." << std::endl;
delete_matrix(matrix, n);
system("pause");
}
int find_min_element_in_column(int ** const scr_matrix, const int n, const int i)
{
int index = 0;
for (int j = 1; j < n; j++)
{
if (scr_matrix[j][i] < scr_matrix[index][i])
{
index = j;
}
}
return scr_matrix[index][i];
}
int find_max_sum_and_column_index_by_abs(int** const src_matrix, const int n, int & sum)
{
auto index = -1;
auto final_sum = INT_MIN;
for (auto i = 0; i < n; i++)
{
auto temp_sum = 0;
for (int j = 0; j < n; ++j)
{
temp_sum += abs(src_matrix[j][i]);
}
if (temp_sum > final_sum)
{
final_sum = temp_sum;
index = i;
}
}
sum = final_sum;
return index;
}
int** initialize_new_matrix_with_random_values(const int n, const int m)
{
const auto matrix = new int *[n];
for (auto i = 0; i < n; i++)
{
matrix[i] = new int[m];
for (auto j = 0; j < m; j++)
{
matrix[i][j] = rand() % CONST_ABS_ELEM_VALUE * (rand() % 2 == 1? 1 : -1);
}
}
return matrix;
}
void delete_matrix(int** matrix, const int n)
{
for (auto i = 0; i < n; i++)
{
delete[] matrix[i];
}
delete[] matrix;
}
void init_io_threads()
{
std::ios_base::sync_with_stdio(false);
std::wcout.imbue(std::locale("rus_RUS.866"));
}
void output_full_matrix(int const n, int const m, int** const a, const int setw_value)
{
std::wcout << L"Вывод матрицы:" << std::endl << std::setw(setw_value + 1) << L"";
for (auto i = 0; i < m; i++)
{
std::wcout << std::setw(setw_value) << i + 1;
}
std::wcout << std::endl;
for (auto i = 0; i < n; i++)
{
std::wcout << std::endl << std::setw(setw_value) << i + 1 << L":";
for (auto j = 0; j < m; j++)
{
std::wcout << std::setw(setw_value) << a[i][j];
}
}
std::wcout << std::endl << L"Конец вывода." << std::endl;
}
#include "cstdlib"
#include "locale"
#include "iostream"
#include "iomanip"
#define CONST_ABS_ELEM_VALUE 20
#define DEFAULT_VALUE_SETW 5
int** initialize_new_matrix_with_random_values(int n, int m);
void delete_matrix(int** matrix, int m);
void output_full_matrix(int const n, int const m, int** const a, int setw_value);
void init_io_threads();
int find_max_sum_and_column_index_by_abs(int** const src_matrix, const int n, int & sum);
int find_min_element_in_column(int ** const scr_matrix, const int n, const int i);
void find_min_elem_of_max_sum_column();
int main()
{
find_min_elem_of_max_sum_column();
}
void find_min_elem_of_max_sum_column()
{
srand(NULL);
init_io_threads();
auto n = 12;
std::wcout << L"Введите размерность матрицы: ";
std::cin >> n;
std::wcout << std::endl << L"Введена матрица " << n << L" x " << n << L"." << std::endl;
std::wcout << L"Матрица заполняется случайными значениями." << std::endl;
const auto matrix = initialize_new_matrix_with_random_values(n, n);
output_full_matrix(n, n, matrix, DEFAULT_VALUE_SETW);
std::wcout << L"Находим столбец с наибольшей суммой ." << std::endl;
auto sum = 0;
const auto index = find_max_sum_and_column_index_by_abs(matrix, n, sum);
std::wcout << L"Индекс столбца:" << index + 1 << std::endl << L"Сумма модулей: " << sum << std::endl;
std::wcout << L"Находим наименьший элемент в " << index + 1 << L" столбце ." << std::endl;
const auto min_value = find_min_element_in_column(matrix, n, index);
std::wcout << L"Минимальное значение элемента: " << min_value << std::endl;
std::wcout << L"Освобождаем память." << std::endl;
delete_matrix(matrix, n);
system("pause");
}
int find_min_element_in_column(int ** const scr_matrix, const int n, const int i)
{
int index = 0;
for (int j = 1; j < n; j++)
{
if (scr_matrix[j][i] < scr_matrix[index][i])
{
index = j;
}
}
return scr_matrix[index][i];
}
int find_max_sum_and_column_index_by_abs(int** const src_matrix, const int n, int & sum)
{
auto index = -1;
auto final_sum = INT_MIN;
for (auto i = 0; i < n; i++)
{
auto temp_sum = 0;
for (int j = 0; j < n; ++j)
{
temp_sum += abs(src_matrix[j][i]);
}
if (temp_sum > final_sum)
{
final_sum = temp_sum;
index = i;
}
}
sum = final_sum;
return index;
}
int** initialize_new_matrix_with_random_values(const int n, const int m)
{
const auto matrix = new int *[n];
for (auto i = 0; i < n; i++)
{
matrix[i] = new int[m];
for (auto j = 0; j < m; j++)
{
matrix[i][j] = rand() % CONST_ABS_ELEM_VALUE * (rand() % 2 == 1? 1 : -1);
}
}
return matrix;
}
void delete_matrix(int** matrix, const int n)
{
for (auto i = 0; i < n; i++)
{
delete[] matrix[i];
}
delete[] matrix;
}
void init_io_threads()
{
std::ios_base::sync_with_stdio(false);
std::wcout.imbue(std::locale("rus_RUS.866"));
}
void output_full_matrix(int const n, int const m, int** const a, const int setw_value)
{
std::wcout << L"Вывод матрицы:" << std::endl << std::setw(setw_value + 1) << L"";
for (auto i = 0; i < m; i++)
{
std::wcout << std::setw(setw_value) << i + 1;
}
std::wcout << std::endl;
for (auto i = 0; i < n; i++)
{
std::wcout << std::endl << std::setw(setw_value) << i + 1 << L":";
for (auto j = 0; j < m; j++)
{
std::wcout << std::setw(setw_value) << a[i][j];
}
}
std::wcout << std::endl << L"Конец вывода." << std::endl;
}
Andrej Kotov
спасибо огромное!!!
Похожие вопросы
- ОЧЕНЬ СРОЧНО НУЖНА ПОМОЩЬ В C++ БУДУ ОЧЕНЬ БЛАГОДАРЕН !!!
- Очень срочно нужна помощь!! мне знает ли кто нибудь программу, чтобёпределять схожесть текста? конктерней эст список
- очень срочно нужна помощь по паскалю сижу на экзамене. дома буду обязательно отблагодарю и скину деньги если что
- Срочно нужна помощь, С# накрылся ноутбук, нужно написать простенький код, помогите пожалуйста!
- Срочно нужна помощь. помогите пожалуйста найти ошибку
- Нужна помощь по HTML коду!
- Срочно нужна помощь WEB-программиста, который мог бы состряпать сайт
- Есть кто нибудь кто знает язык С ?? срочно нужна помощь !!
- Нужна помощь по написанию программки.
- Очень срочно нужна Ваша помощь!!!