task21

mail@pastecode.io avatar
unknown
c_cpp
7 months ago
1.7 kB
3
Indexable
Never
#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;
}
Leave a Comment