Prodotto righe per colonne tra due matrici

di il
2 risposte

Prodotto righe per colonne tra due matrici

Salve,

ho da fare un piccolo programma dove devo effettuare il prodotto righe per colonne tra due matrici allocate dinamicamente..

Il codice che ho scritto funziona a metà e non riesco a capire il perchè visto che ho seguito passo passo quello che mi era stato detto di fare..

Ecco il codice:
#include <stdio.h>
#include <stdlib.h>

void prodRC (short *a, short *b, short *c, int R, int C, int P);
void main()
{
     short *a,*b,*c;
     short x=1,y=1,i,j;
     int R,C,RR,CC,P;
     
     printf("Inserisci numero righe prima matrice: "); scanf("%d",&R);
     printf("Inserisci numero colonne prima prima matrice: "); scanf("%d",&C);
     RR=C;
     P=C;
     printf("Inserisci numero colonne seconda matrice: "); scanf("%d",&CC);
     printf("\n\n");
     
     a=malloc(R*C*sizeof(short));
     b=malloc(RR*CC*sizeof(short));
     c=malloc(R*CC*sizeof(short));
     
     for(i=0;i<R;i++) //inserisco elementi nella prima matrice
     {
       for(j=0;j<C;j++)
       {
           *(a+i*C+j)=x;
           x=x+1;
       }
     }
     
     for(i=0;i<RR;i++) //inserisco elementi nella seconda matrice
     {
       for(j=0;j<CC;j++)
       {
           *(b+i*CC+j)=y;
           y=y+1;
       }
     }
     
     printf("Prima matrice: \n\n");
     for(i=0;i<R;i++) //visualizzo la prima matrice
     {
       for(j=0;j<C;j++)
       {
           printf("\t%d ",*(a+i*C+j));
       }
       printf("\n\n");
     }
     
     printf("\n\nSeconda matrice: \n\n");
     for(i=0;i<RR;i++) //visualizzo la seconda matrice
     {
       for(j=0;j<CC;j++)
       {
           printf("\t%d ",*(b+i*CC+j));
       }
       printf("\n\n");
     }
     
     prodRC (a,b,c,R,CC,P);
     
     printf("\n\nMatrice prodotto: \n\n");
     for(i=0;i<R;i++) //visualizzo la prima matrice
     {
       for(j=0;j<CC;j++)
       {
           printf("\t%d ",*(c+i*CC+j));
       }
       printf("\n\n");
     }
     
     printf("\n\n\n"); system("pause");     
          
}

void prodRC (short *a, short *b, short *c, int R, int C, int P)
{
     short i,j,k;
     
     for(i=0;i<R;i++) //inserisco tutti 0 nella matrice prodotto
     {
       for(j=0;j<C;j++)
       {
           *(c+i*C+j)=0;
       }
     }
     
     for(i=0;i<R;i++) //inserisco elementi nella prima matrice
     {
       for(j=0;j<C;j++)
       {
         for(k=0;k<P;k++)
         {
            *(c+i*C+j)=*(c+i*C+j)+(*(a+i*C+k))*(*(b+k*C+j));
         }
       }
     }
}
Ecco invece l'output errato :



Ci sbatto la testa ma non riesco a capire dove sbaglio..

Grazie per eventuali consigli.

2 Risposte

  • Re: Prodotto righe per colonne tra due matrici

    Impara ad utilizzare il debug o in sua assenza i printf
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void prodRC (short *a, short *b, short *c, short R, short C, short P);
    void main()
    {
    	short *a,*b,*c;
    	short x=1,y=1,i,j;
    	short R,C,RR,CC,P;
    
    	printf("Inserisci numero righe prima matrice: "); scanf("%d",&R);
    	printf("Inserisci numero colonne prima prima matrice: "); scanf("%d",&C);
    	RR=C;
    	P=C;
    	printf("Inserisci numero colonne seconda matrice: "); scanf("%d",&CC);
    	printf("\n\n");
    
    	
    
    	a=malloc(R*C*sizeof(short));
    	b=malloc(RR*CC*sizeof(short));
    	c=malloc(R*CC*sizeof(short));
    
    	for(i=0;i<R;i++) //inserisco elementi nella prima matrice
    	{
    		for(j=0;j<C;j++)
    		{
    			*(a+(i*C)+j)=x;
    			x=x+1;
    		}
    	}
    
    	for(i=0;i<RR;i++) //inserisco elementi nella seconda matrice
    	{
    		for(j=0;j<CC;j++)
    		{
    			*(b+(i*CC)+j)=y;
    			y=y+1;
    		}
    	}
    
    	printf("Prima matrice: \n\n");
    	for(i=0;i<R;i++) //visualizzo la prima matrice
    	{
    		for(j=0;j<C;j++)
    		{
    			printf("\t%d ",*(a+(i*C)+j));
    		}
    		printf("\n\n");
    	}
    
    	printf("\n\nSeconda matrice: \n\n");
    	for(i=0;i<RR;i++) //visualizzo la seconda matrice
    	{
    		for(j=0;j<CC;j++)
    		{
    			printf("\t%d ",*(b+(i*CC)+j));
    		}
    		printf("\n\n");
    	}
    
    	prodRC (a,b,c,R,CC,P);
    
    	printf("\n\nMatrice prodotto: \n\n");
    	for(i=0;i<R;i++) //visualizzo la prima matrice
    	{
    		for(j=0;j<CC;j++)
    		{
    			printf("\t%d ",*(c+(i*CC)+j));
    		}
    		printf("\n\n");
    	}
    
    	printf("\n\n\n"); system("pause");     
    
    }
    
    void prodRC (short *a, short *b, short *c, short R, short C, short P)
    {
    	short i,j,k;
    
    	for(i=0;i<R;i++) //inserisco tutti 0 nella matrice prodotto
    	{
    		for(j=0;j<C;j++)
    		{
    			*(c+(i*C)+j)=0;
    		}
    	}
    
    	for(i=0;i<R;i++) //inserisco elementi nella prima matrice
    	{
    		for(j=0;j<C;j++)
    		{
    			for(k=0;k<P;k++)
    			{
    				printf("%d,%d,%d\t%d * %d = %d\n",i,j,k, *(a+(i*P)+k), *(b+(k*C)+j), *(a+(i*P)+k)*(*(b+(k*C)+j)));
    
    				*(c+(i*C)+j)=*(c+(i*C)+j)+(*(a+(i*P)+k))*(*(b+(k*C)+j));
    			}
    			printf("c[%d][%d] = somma dei 3 numeri sopra\n\n", i, j);
    		}
    	}
    }
    
    solo così puoi trovare gli errori. Ma utilizzare le matrici in forma canonica a[j] ecc non era meglio?
  • Re: Prodotto righe per colonne tra due matrici

    Eh lo so.. La prof sta rendendo difficili esercizi semplicissimi.. Forse per farci capire come lavora il computer.. Fatto sta che sto impazzendo xD

    Comunque grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte