task21
unknown
c_cpp
2 years ago
1.7 kB
19
Indexable
#include <iostream>
#include <locale.h>
/*21. Дана квадратная вещественная матрица размерности n x n. Найти скалярное
произведение строки на столбец, на пересечении которых находится последний
минимальный элемент матрицы. */
double** allocateMemSq(int n) {
double** a = new double*[n];
for (int i = 0; i < n; i++) {
a[i] = new double[n];
}
return a;
}
void deleteMem(double** a, int n) {
for (int i = 0; i < n; i++) {
delete[] a[i];
}
delete[] a;
}
double scalarProd(double** a,int n, int line, int column) {
double prod = 0;
for (int k = 0; k < n; k++) {
prod += a[line][k] * a[k][column];
}
return prod;
}
void lastMinIndex(double** a, int n, int& lastMinL, int& lastMinC) {
lastMinL = lastMinC = 0;
double lastMin = a[0][0];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] <= lastMin) {
lastMinL = i;
lastMinC = j;
}
}
}
}
int main() {
setlocale(LC_ALL, "");
printf("Введите порядок матрицы: ");
int n;
scanf_s("%d", &n);
double** arr = allocateMemSq(n);
printf("Введите элементы матрицы:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
scanf_s("%lf", &arr[i][j]);
}
int l,c;
lastMinIndex(arr, n, l, c);
double res = scalarProd(arr, n, l, c);
printf("Скалярное произведение строки на столбец, на пересечении которых находится последний минимальный элемент матрицы, равно: %lf\n", res);
deleteMem(arr, n);
return 0;
}Editor is loading...
Leave a Comment