Aiuto su matrici ed array in C

di il
2 risposte

Aiuto su matrici ed array in C

Ciao. Ho creato un programma che prende in ingresso due matrici A e B e ne calcola il prodotto A*B (i cui elementi sono dati dal prodotto righe per colonne tra A e B).

Questa parte del programma prende gli elementi da tastiera:
#include<stdio.h>
#include<stdlib.h>

int prod(int *A, int *B, int M, int L);

int main()
{
    int M;
    int N;
    int L;
    int i;
    int j;
    int *A;
    int *B;
    
    
    printf("Inserisci il numero di colonne di A. Deve essere uguale al numero di righe di B\n");
    scanf("%d",&M);
    printf("Inserisci il numero di righe di A\n");
    scanf("%d",&N);
    printf("Inserisci il numero di colonne di B\n");
    scanf("%d",&L);
    
    A=(int *)malloc(M*N*sizeof(int));
    B=(int *)malloc(L*M*sizeof(int));
    
    //Acquisisce elementi di A
    for(i=0;i<N;i++)
       {
                    for(j=0;j<M;j++)
                       {
                                    printf("Inserisci l'elemento a%d%d della matrice A  ",i+1,j+1);
                                    scanf("%d",&A[i*M+j]);
                       }
       }
       
     //Acquisisce elementi di B
    for(i=0;i<M;i++)
       {
                    for(j=0;j<L;j++)
                       {
                                    printf("Inserisci l'elemento a%d%d della matrice B  ",i+1,j+1);
                                    scanf("%d",&B[i*L+j]);
                       }
       }  

 
    
    prod(A,B,M,L);          
       
       system("PAUSE");
       return 0;
}
La funzione mi calcola non tutti gli elementi della matrice A*B, ma solo l'elemento di riga p e colonna q, con p e q in input:
int prod(int *A, int *B, int M, int L)
{
    int p;
    int q;
    int k;
    int h;
    int C;
    C=0;
    
   

    printf("Inserisci l'elemento che vuoi visualizzare della matrice A*B\n\nInserisci indice riga\n");
    scanf("%d",&p);
    printf("Inserisci indice colonna\n");
    scanf("%d",&q);

    for(k=0,h=1;k<=M;k++,h++)
       {
                    C+=A[M*(q-1)+k]*B[L*(h-1)+(p-1)];
               
       }             
    
    printf("%d",&C);
    return 1;
}
Sono stato attento a far scorrere gli indici con il for visto che ho salvato ciascuna matrice su un array monodimensionale a partire da A[0] e da B[0].

Però alla fine l'elemento stampato a schermo non è corretto (cioè non è il prodotto della p-esima riga di A per la q-esima colonna di B).
Qualcuno mi può aiutare? Non so veramente che fare anche perchè ho ricontrollato tutto compreso il for della funzione e credo sia corretto.
Grazie.

2 Risposte

  • Re: Aiuto su matrici ed array in C

    Ne ho ftt uno semplice che fa il prodotto riga per colonna data in input..
    #include <stdio.h>
    void main ()
    {
         int a[3][3]={{1,2,3},
                      {4,5,6},
                      {7,8,9}};
         int b[3][3]={{1,2,3},
                      {4,5,6},
                      {7,8,9}};             
         int i,j,r,c,res=0;
         
         for(i=0;i<3;i++)
         {
            for(j=0;j<3;j++)
            {
                printf("%d ",a[i][j]);
            }
           printf("\n");
         }
         
         printf("\nNumero riga e di colonna: ");
         scanf("%d%d",&r,&c);
         j=0;
         i=0;
         do
         {
               res=res+a[r][j]*b[i][c];
               j++;
               i++;
         } while (j<=2);
         
         printf("Risultato %d\n\n",res);
         
         getch();
    }   
    
    trasformatelo come serve a te.. a me funziona
  • Re: Aiuto su matrici ed array in C

    Tonix ha scritto:


    trasformatelo come serve a te.. a me funziona
    Ti ringrazio per il tuo sforzo, ma a quel punto c'ero arrivato anche io. Le tue due matrici 3x3 non possono essere modificate come dici te visto che non hai usato la malloc per allocarle dinamicamente. Nel post avevo scritto che prendevo in ingresso due matrici A e B. E poi hai usato array multidimensionali, mentre io ho scelto la rappresentazione monodimensionale.
Devi accedere o registrarti per scrivere nel forum
2 risposte