• Domingo 17 de Noviembre de 2024, 20:28

Autor Tema:  Calculadora De Matrices Usando Estructuras  (Leído 1421 veces)

amedinadiaz

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Calculadora De Matrices Usando Estructuras
« en: Miércoles 18 de Febrero de 2004, 10:41 »
0
Al final pude lograr sacar la forma de hacer la multiplicacion de matrices (ejem, gracias x nada:P) y aki os dejo el programa completo, una calculadora de matrices, para al que le pueda servir de ayuda:

/*********************************************/
/* Author: Antonio Medina and Fawzan Ghulam           */
/* Date: 8-2-04                                                        */
/* EE1E2 LAB 4                                                         */
/* MATRIX CALC PROGRAM                                       */
/*********************************************/

#include <stdio.h>
#include <stdlib.h>

struct matrix
{
   int row;
   int col;
   float** data;
};
void allocate(struct matrix *p1)
{
   int row, col;

   p1->data=(float**)(malloc(p1->row*sizeof(float*)));

   for (row=0; row<p1->row; row++)
      p1->data[row]=(float*)(malloc(p1->col*sizeof(float)));

   printf("Enter matrix data:\n");
      for(row=0; row<p1->row; row++)
         for(col=0; col<p1->col; col++)
            scanf("%f", &p1->data[row][col]);

   for(row=0; row<p1->row; row++)
   {
      for(col=0; col<p1->col; col++)
         printf("%.2f ", p1->data[row][col]);
         printf("\n");
   }

}
void de_allocate(struct matrix *p1)
{
   int row;

   for(row=0; row<p1->row; row++)
         free(p1->data[row]);

   free(p1->data);
   
}
void add_matrix(struct matrix* pA, struct matrix* pB)
{
   int row, col;   

   if((pA->row==pB->row)&&(pA->col==pB->col))
   {

   
      for(row=0; row<pA->row; row++)
      {
         for(col=0; col<pA->col; col++)
            printf(" %.2f", pA->data[row][col]+ pB->data[row][col]);
            printf("\n");
      }
   }
   else
      printf("Error. Matrices must have the same number of rows and cols.\n");
   


}
void sub_matrix(struct matrix* pA, struct matrix* pB)
{
   int row, col;   

   
   if((pA->row==pB->row)&&(pA->col==pB->col))
   {

   
      for(row=0; row<pA->row; row++)
      {
         for(col=0; col<pA->col; col++)
            printf(" %.2f", pA->data[row][col]- pB->data[row][col]);
            printf("\n");
      }
   }
   else
      printf("Error. Matrices must have the same number of rows and cols.\n");
   


}

void multp_matrix(struct matrix* pA, struct matrix* pB)
{
   int i,j,k;
    float C=0.0;

   
    if(pA->col==pB->row)
   {
      for(i=0; i<pA->row; i++)
      {
         for(j=0; j<pA->row; j++)
         {
            C=0;
            
            for(k=0; k<pA->col; k++)
            {   
               C+=pA->data[k]*pB->data[k][j];
            }
            printf(" %.2f", C);
         }
         printf("\n");
   
      }

   }
   else
      printf("The number of cols in A has to be equal to the number of rows in B\n");
}

int main(void)
{
   struct matrix A,B;
   int menu=0;
   int flag=0;
   
   printf("Matrix Calculator 1.0\n");
   printf("---------------------\n");
   printf("\n");
   printf("1 - Enter matrices A & B\n");
   printf("2 - Add matrices\n");
   printf("3 - Subtract matrices\n");
   printf("4 - Multiply matrices\n");
   printf("5 - Quit program\n");

   while(menu!=5)
   {
      printf("\n");
      printf("Option:");
      scanf("%d", &menu);
      printf("\n");   
      switch(menu)
      {
         case 1:
            if(flag==1)
            {
                  de_allocate(&A);
                  de_allocate(&B);
            }
               printf("Number of rows in A:");
               scanf("%d", &A.row);
               printf("Number of columns in A:");
               scanf("%d", &A.col);
               allocate(&A);

               printf("\n");
               printf("Number of rows in B:");
               scanf("%d", &B.row);
               printf("Number of columns in B:");
               scanf("%d", &B.col);
               allocate(&B);

               flag=1;
           
               printf("\n");
               printf("1 - Enter matrices A & B\n");
               printf("2 - Add matrices\n");
               printf("3 - Subtract matrices\n");
               printf("4 - Multiply matrices\n");
               printf("5 - Quit program\n");

         break;
         case 2:
            printf("A + B=\n");

            add_matrix(&A, &B);

            break;
         case 3:
            printf("A - B=\n");

            sub_matrix(&A, &B);

            break;
         case 4:
            printf("A * B=\n");

            multp_matrix(&A, &B);

            break;
         case 5:
            return 0;
            break;
         default:
            printf("Not a valid input. Try again.\n");
            break;
      }

   }
      return 0;
}
He visto cosas que vosotros no creeriais...
Todos esos momentos...se perderan en el tiempo...
como lagrimas en la lluvia...

Por no comprarme la dichosa camara digital!!

JoRDi-18

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Calculadora De Matrices Usando Estructuras
« Respuesta #1 en: Domingo 22 de Febrero de 2004, 01:12 »
0
Sé lo que se siente al no ser ayudado en estos foros pero... es lo que hay. La gente, o no sabe, o no le apetece estudiar el problema (además, hay problemas que son ya complejos como el tuyo, y aún da más pereza ponerse a pensar.

De todas formas, gracias por el código. Le echaré un ojo porque hay partes del código que me interesan especialmente.
[size=109]Pensamientos elevados deben tener un lenguaje elevado.[/size]
Llamamé Jordi. Cuando me llames así, sonríe.