this code should multiply 2 matrixes but it seems it doesn't work how it should.
output:
the first number of C[1][1] should be 0!!!Code:Matrix A : 0 4 7 1 5 5 Matrix B : 0 5 3 6 0 7 1 2 0 3 2 1 Matrix C : 3 103 50 53 0 77 32 35
C[1][1] = 0*0+4*0+7*0 = 0 not 3 !! can soneone help me?
C[1][2] = 0*5+4*7+5*3 = 43 not 103..
and so on..
it works sometimes, other times it does not
source:
Code:#include "stdio.h" #include "stdlib.h" #include "string.h" #define RIGAA 2 #define COLA 3 #define RIGAB 3 #define COLB 4 int A [RIGAA][COLA]; int B [RIGAB][COLB]; int C [RIGAA][COLB]; void GenerateMatrixes(); void GenerateMatrix(int* matrix,int riga,int col); void MultiplyaMatrix(); void PrintMatrix(char* name,int* matrix,int row,int col); void CleanScreen(); int main(int argc, char* argv[]) { int ch=0; //scelta dal menu iterattivo printf("************************************\n"); printf("** Matrix Multiplication **\n"); printf("************************************\n\n"); GenerateMatrixes(); printf("\n\n"); while(ch!=5) //loop cycle, repeat untill user choose to exit with value 5 { //application menu ch=0; printf("Regenerate matrixes : 1 \n"); printf("Multiplicate : 2 \n"); printf("Re-print matrixes : 3 \n"); printf("Clean Screen : 4 \n"); printf("Exit : 5 \n"); printf("Select command: "); scanf("%d",&ch); switch(ch) { case 1: GenerateMatrixes(); break; case 2: { MultiplyaMatrix(); break; } case 3: { PrintMatrix("A",(int*)A,RIGAA,COLA); PrintMatrix("B",(int*)B,RIGAB,COLB); break; } case 4: { //clear the screen CleanScreen(); break; } default: CleanScreen(); break; }; } return 0; } //random generation of matrix values void GenerateMatrixes() { //generate matrixes A B GenerateMatrix((int*)A,RIGAA,COLA); GenerateMatrix((int*)B,RIGAB,COLB); //automatically print of generated matrix printf("\n\n\n"); PrintMatrix("A",(int*)A,RIGAA,COLA); PrintMatrix("B",(int*)B,RIGAB,COLB); printf("\n\n"); } //Print output of the specified matrix void PrintMatrix(char* name,int* matrix,int row,int col) { int i,j; char str[20]; printf("\n\n"); sprintf(str,"Matrix %s : ",name); printf(str); printf("\n\n"); for(i=0;i<row;i++)//ciclo e genero casualmente i valori { for(j=0;j<col;j++) { sprintf(str,"%d ",matrix[(i*col)+j]); printf(str); } printf("\n"); } printf("\n"); } //Matrix multiplication void MultiplyaMatrix() { int i; int j; int m; for (i=0; i<RIGAA; i++) for (j=0; j<COLB; j++) { for(m=0;m<COLA;m++) C[i][j]+= (A[i][m] * B[m][j]); } PrintMatrix("C",(int*)C,RIGAA,COLB); } //Randomly generate velues of a matrix given by pointer void GenerateMatrix(int* matrix,int riga,int col) { int i,j=0; for(i=0;i<riga;i++)//random generation of values for(j=0;j<col;j++) matrix[(i*col)+j]=rand()%8; } void CleanScreen() { system("clear"); // unix system }



LinkBack URL
About LinkBacks





