Довести до ума программу по перемножению матриц - 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.

  1. Объявлены функции main() и Umn_matr().
  2. В функции main() открываются файлы Vvod_a.txt, Vvod_b.txt и razm.txt для чтения.
  3. Из файла razm.txt считываются размеры матриц a, b и c, а также переменная m.
  4. Выделяется память под матрицы a, b и c.
  5. С помощью цикла считываются значения матрицы a из файла Vvod_a.txt и выводятся на экран.
  6. С помощью цикла считываются значения матрицы b из файла Vvod_b.txt и выводятся на экран.
  7. Выполняется перемножение матриц a и b и результат сохраняется в матрицу c.
  8. Выводится на экран результат перемножения матриц a и b.
  9. Выделяемая память освобождается.
  10. В функции Umn_matr() проверяется условие: если размерность матриц a и b совпадает, то происходит перемножение, иначе выводится сообщение об ошибке и программа завершается. Поскольку код не полностью оформлен, пронумерованы только элементы, выделенные в списке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.533 из 5
Похожие ответы