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;
}