Довести до ума программу по перемножению матриц - C (СИ)
Формулировка задачи:
помогите пожалуйста довести до ума программу по перемножению матриц
#include <stdio.h> #include <stdlib.h> #include <time.h> # define M 3 # define N 3 # define K 3 void zap1(int mas[M][N]); void zap2(int mas[N][K]); void vuv(int mas[M][N]); void zap1(int mas[M][N]) { int i,j; for (i=0;i<M;i++) { for(j=0;j<N;j++) { mas[i][j] = rand()%20-10; printf("%4d", mas[i][j]); } printf("\n"); } } void zap2(int mas[N][K]) { int i,j; for (i=0;i<M;i++) { for(j=0;j<N;j++) { mas[i][j] = rand()%20-10; printf("%4d", mas[i][j]); } printf("\n"); } } void vuv(int mas3[M][K]) {int i,j; for (i=0;i<M;i++) { for(j=0;j<N;j++) printf("%4d", mas3[i][j]); printf("\n"); } } int main() { int i,j,a,b,g; int mas1[M][N]; int mas2[N][K]; int mas3[M][K]; int sum; zap1(mas1); printf("\n"); printf("\n"); zap2(mas2); printf("\n"); printf("\n"); b=0; for(i=0;i<K;i++) { g=b; for(j=0;j<M;j++) { for(a=0;a<N;a++) { sum=mas1[j][a]*mas2[a][j]; g=g+sum; } mas3[j][i]=g; } } printf("\n"); printf("novai"); printf("\n"); vuv( mas3); system ("PAUSE"); }
Решение задачи: «Довести до ума программу по перемножению матриц»
textual
Листинг программы
#include <conio.h> #include <stdio.h> void Umn_matr(int n, int r, int r1, int m, double **pa, double **pb, double **pc); int main() { int n, r, r1, m,i,j; double **pa, **pb, **pc; FILE *file_a, *file_b, *file_c; file_a = fopen("Vvod_a.txt","r"); file_b = fopen("Vvod_b.txt","r"); file_c = fopen("razm.txt","r"); fscanf(file_c, "%d %d %d %d", &n, &r, &r1, &m); pa = calloc(n,sizeof(double*)); pb = calloc(r1,sizeof(double*)); pc = calloc(n,sizeof(double*)); for(i=0;i<n;i++) { pa[i]= calloc(r,sizeof(double)); pc[i]= calloc(m,sizeof(double)); } for(i=0;i<r1;i++) { pb[i]= calloc(m,sizeof(double)); } for(i=0; i<n; i++) { for(j=0; j<r; j++) { fscanf(file_a, "%lf", &pa[i][j]); printf("pa[%d][%d]=%lf; ",i, j, pa[i][j]); } printf("\n"); } for(i=0; i<r1; i++) { for(j=0; j<m; j++) { fscanf(file_b, "%lf", &pb[i][j]); printf("pb[%d][%d]=%lf; ",i, j, pb[i][j]); } printf("\n"); } for(i=0; i<n; i++) for(j=0; j<m; j++) pc[i][j]=0; Umn_matr(n, r, r1, m, pa, pb, pc); for(i=0; i<n; i++) { for(j=0; j<m; j++) printf("pc[%d][%d]=%lf; ",i, j, pc[i][j]); printf("\n"); } for(i=0;i<n;i++) { free(pa[i]); free(pc[i]); } for(i=0;i<r1;i++) { free(pb[i]); } free(pa); free(pb); free(pc); getch(); fclose(file_a); fclose(file_b); fclose(file_c); return 0; } void Umn_matr(int n, int r, int r1, int m, double **pa, double **pb, double **pc) { int i,j,t; if ((n==m)&&(r==r1)) { for(i=0; i<n; i++) for(j=0; j<m; j++) for(t=0; t<r; t++) { pc[i][j]+= pa[i][t]*pb[t][j]; } } else { printf("\nNevernaya razmernost matric\n"); exit(1); } }
Объяснение кода листинга программы
Код представляет собой программу для перемножения матриц. Он считывает значения матриц a и b из файлов Vvod_a.txt и Vvod_b.txt соответственно, а затем перемножает их и сохраняет результат в матрицу c.
- Объявлены функции main() и Umn_matr().
- В функции main() открываются файлы Vvod_a.txt, Vvod_b.txt и razm.txt для чтения.
- Из файла razm.txt считываются размеры матриц a, b и c, а также переменная m.
- Выделяется память под матрицы a, b и c.
- С помощью цикла считываются значения матрицы a из файла Vvod_a.txt и выводятся на экран.
- С помощью цикла считываются значения матрицы b из файла Vvod_b.txt и выводятся на экран.
- Выполняется перемножение матриц a и b и результат сохраняется в матрицу c.
- Выводится на экран результат перемножения матриц a и b.
- Выделяемая память освобождается.
- В функции Umn_matr() проверяется условие: если размерность матриц a и b совпадает, то происходит перемножение, иначе выводится сообщение об ошибке и программа завершается. Поскольку код не полностью оформлен, пронумерованы только элементы, выделенные в списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д