Разместить в динамической памяти 2 массива – матрицу размерностью n на n и вектор длины n, с элементами типа long double (значения n и элементы массивов ввести с кон-соли). Написать функцию, вычисляющую произведение данной матрицы на данный вектор (их передать по указателю) и возвращающую указатель на массив-результат. Выдать на консоль значения полученного вектора. Для языка С
#include <stdio.h> #include <stdlib.h> long double* matrix_vector_mult(long double* matrix, long double* vector, int n) { long double* result = (long double*)malloc(n * sizeof(long double)); for (int i = 0; i < n; i++) { result[i] = 0; for (int j = 0; j < n; j++) { result[i] += matrix[i * n + j] * vector[j]; } } return result; } int main() { int n; printf("Enter the dimension n of the matrix and vector: "); scanf("%d", &n); long double* matrix = (long double*)malloc(n * n * sizeof(long double)); long double* vector = (long double*)malloc(n * sizeof(long double)); printf("Enter the elements of the matrix:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%Lf", &matrix[i * n + j]); } } printf("Enter the elements of the vector:\n"); for (int i = 0; i < n; i++) { scanf("%Lf", &vector[i]); } long double* result = matrix_vector_mult(matrix, vector, n); printf("Resulting vector after matrix-vector multiplication:\n"); for (int i = 0; i < n; i++) { printf("%Lf ", result[i]); } printf("\n"); free(matrix); free(vector); free(result); return 0; }
Примечание: Для компиляции программы необходимо использовать компилятор, поддерживающий стандарт C99 или выше (например, gcc с флагом -std=c99).
Программа сначала запрашивает у пользователя размерность n матрицы и вектора, затем вводит элементы матрицы и вектора. После этого вызывается функция matrix_vector_mult для вычисления произведения матрицы на вектор. Результат выводится на консоль. В конце программы освобождаются выделенные участки памяти.
#include <stdlib.h>
long double* matrix_vector_mult(long double* matrix, long double* vector, int n) {
long double* result = (long double*)malloc(n * sizeof(long double));
for (int i = 0; i < n; i++) {
result[i] = 0;
for (int j = 0; j < n; j++) {
result[i] += matrix[i * n + j] * vector[j];
}
}
return result;
}
int main() {
int n;
printf("Enter the dimension n of the matrix and vector: ");
scanf("%d", &n);
long double* matrix = (long double*)malloc(n * n * sizeof(long double));
long double* vector = (long double*)malloc(n * sizeof(long double));
printf("Enter the elements of the matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%Lf", &matrix[i * n + j]);
}
}
printf("Enter the elements of the vector:\n");
for (int i = 0; i < n; i++) {
scanf("%Lf", &vector[i]);
}
long double* result = matrix_vector_mult(matrix, vector, n);
printf("Resulting vector after matrix-vector multiplication:\n");
for (int i = 0; i < n; i++) {
printf("%Lf ", result[i]);
}
printf("\n");
free(matrix);
free(vector);
free(result);
return 0;
}
Примечание: Для компиляции программы необходимо использовать компилятор, поддерживающий стандарт C99 или выше (например, gcc с флагом -std=c99).
Программа сначала запрашивает у пользователя размерность n матрицы и вектора, затем вводит элементы матрицы и вектора. После этого вызывается функция matrix_vector_mult для вычисления произведения матрицы на вектор. Результат выводится на консоль. В конце программы освобождаются выделенные участки памяти.