Помогите пожалуйста написать код на C++.
Дана вещественная матрица размером N, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом.
Помогите пожалуйста написать код на C++.
Дана вещественная матрица размером N, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом.
В чем именно проблема? Что получилось, что не получилось?
Когда идёт скалярное произведение почему то выбирается столбец и строка в котором большая и меньшая сумма элементов, а нужно с максимальным и минимальным элементом
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int N = 0, i, j;
cout << "Вводите размерность матрицы (должны больше 0):" << endl;
while (N < 1)
{
cout << "\tN = ";
cin >> N;
}
double** a = new double* [N];
cout << "Вводите элементы матрицы:" << endl;
for (i = 0; i < N; i++)
{
a[i] = new double[N];
for (j = 0; j < N; j++)
{
cout << "\ta[" << i + 1 << "][" << j + 1 << "] = ";
cin >> a[i][j];
}
cout << endl;
}
int imaxRow = 0, jminCol = 0;
cout << "Матрица после ввода:" << endl;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
cout << setw(5) << a[i][j];
if (a[imaxRow][j] < a[i][j])
imaxRow = i;
if (a[i][jminCol] > a[i][j])
jminCol = j;
}
cout << endl;
}
long double mulS = 0.0;
for (i = 0; i < N; i++)
mulS += a[imaxRow][i] * a[i][jminCol];
cout << "Скалярное произведение: " << mulS;
cout << endl;
system("pause");
return 0;
}
Это почему так решили?
Чтобы проще было понять в чем проблема для начала стоит добавить вывод номеров этих столбца и строки.
Код, скорее всего, копипащен со смежного какого-то задания и выдается как попытка решения
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int N = 0, i, j;
cout << "Вводите размерность матрицы (должны больше 0):" << endl;
while (N < 1)
{
cout << "\tN = ";
//cin >> N;
N = 5;
}
double** a = new double* [N];
cout << "Вводите элементы матрицы:" << endl;
for (i = 0; i < N; i++)
{
a[i] = new double[N];
for (j = 0; j < N; j++)
{
//cout << "\ta[" << i + 1 << "][" << j + 1 << "] = ";
//cin >> a[i][j];
a[i][j] = -5 + ( std::rand() % ( 20 - 5 + 1 ) );
}
cout << endl;
}
int imaxRow = 0, iminCol = 0;
int jmaxRow = 0, jminCol = 0;
cout << "Матрица после ввода:" << endl;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
cout << setw(5) << a[i][j];
if (a[imaxRow][jmaxRow] < a[i][j])
{
imaxRow = i;
jmaxRow = j;
}
if (a[iminCol][jminCol] > a[i][j])
{
iminCol = i;
jminCol = j;
}
}
cout << endl;
}
cout << "Максимум: " << a[imaxRow][jmaxRow] <<" строка № " << imaxRow << endl;
cout << "Минимум: " << a[iminCol][jminCol] <<" столбец № " <<jminCol << endl;
long double mulS = 0.0;
for (i = 0; i < N; i++)
{
mulS += a[imaxRow][i] * a[i][jminCol];
cout << "a[" << imaxRow << "," << i <<"] * a[" << i<<"," << jminCol << "] = " << a[imaxRow][i] << " * " << a[i][jminCol] << " = " << a[imaxRow][i] * a[i][jminCol] << " SUMA = " << mulS << endl;
}
cout << "Скалярное произведение: " << mulS;
cout << endl;
system("pause");
return 0;
}