Prototipi e chiamate di funzioni

di il
5 risposte

Prototipi e chiamate di funzioni

Ciao a tutti. Sono novella nella programmazione in c. vorrei capire meglio come usare i prototipi e le chiamate di funzioni. Vi posto un programma che ho provato a scrivere io sul prodotto tra matrici. Sapreste indicarmi come è meglio scrivere prototipi e chiamate di funzioni? Ringrazio chi risponderà.
#include <stdio.h>
/*Costanti*/
#define SIZE 10
/*Prototipi*/
void caricaMatrice(int matrice[][SIZE], int r, int c);
void stampaMatrice(int matrice[][SIZE], int r, int c, int n);
int prodotto(int matrice1[][SIZE], int matrice2[][SIZE], int r1, int c1, int r2, int c2);
/*Funzione main*/
int main()
{
   int matrice1[SIZE][SIZE], matrice2[SIZE][SIZE], matrice3[SIZE][SIZE];
   int r1,r2,c1,c2,i,j;

/*Acquisizione numero righe/colonne matrici*/
do{
   do //Controlli per verificare che non sfori o che le r/c siano maggiori di 0
   {
      printf("N righe prima matrice: \n");
      scanf("%d", &r1);
   }
   while((r1>SIZE)||(r1<=0));
   do
   {
      printf("N colonne prima matrice: \n");
      scanf("%d", &c1);   
   }
   while((c1>SIZE)||(c1<=0));
   do
   {
      printf("N righe seconda matrice: \n");
      scanf("%d", &r2);   
   }
   while((r2>SIZE)||(r2<=0));
   do
   {
      printf("N colonne seconda matrice: \n");
      scanf("%d", &c2);
   }
   while((c2>SIZE)||(c2<=0));
  }while(c1!=r2);
/*Caricamento Matrici*/
   printf("Caricamento prima matrice:\n");
   caricaMatrice(matrice1, r1, c1); 
   printf("\nCaricamento seconda matrice:\n");
   caricaMatrice(matrice2, r2, c2);
/*Stampa delle Matrici*/
   printf("Stampa prima matrice:\n");
   stampaMatrice(matrice1, r1, c1, 1);
   printf("\nStampa seconda matrice:\n");
   stampaMatrice(matrice2, r2, c2, 2);
   prodotto(matrice1,matrice2,r1,c1,r2,c2);
   return 0;
}
void caricaMatrice(int matrice[][SIZE], int r, int c)
{
   int i, h;
   for(i=0;i<r;i++)
   {
      for(h=0;h<c;h++)
      {
         printf("Inserisci il valore nella posizione matrice[%d][%d] :\t",i,h);
         scanf("%d", &matrice[i][h]);
      }
   }   
}

void stampaMatrice(int matrice[][SIZE], int r, int c, int n)
{
   //n corrisponde al numero della matrice, serve per la stampa es: matrice1....2
   int i, h, r1=0, c1; //c1 ed r1 servono per le stampe ma non sono obbligatorie volendo stampare solo il risultato
   printf("La matrice%d e': \n",n);
   for(i=0; i<r; i++)
      {for(h=0;h<c;h++)
           {printf("%d", matrice[i][h]);
           }
        printf("\n");
      }
}

int prodotto(int matrice1[][SIZE], int matrice2[][SIZE], int r1, int c1, int r2, int c2)
{int matrice3[SIZE][SIZE];
 int i,j,somma,h;
 for(i=0;i<r1;i++);
    {for(j=0;j<c2;j++)
        {somma=0;
         for(h=0;h<c1;h++)
            {somma=somma+matrice1[i][h]*matrice2[h][j];
             matrice3[i][j]=somma;
             }
        }
     }
 printf("La matrice prodotto e': \n");
 for(i=0; i<r1; i++)
    {for(j=0;j<c2;j++)
        {printf("%d", matrice3[i][j]);
        }
     printf("\n");
     }
}

5 Risposte

  • Re: Prototipi e chiamate di funzioni

    Mi sembra tutto corretto tranne la funzione

    prodotto

    per cui dovresti passare anche la matrice3 e visualizzare il suo contenuto nel main con stampaMatrice
  • Re: Prototipi e chiamate di funzioni

    Ciao Ho corretto il programma come mi hai consigliato;) L'ho lanciato, il compilatore non da errori però non funziona come dovrebbe. Qual è il problema? Sapresti indicarmelo per favore?
    #include <stdio.h>
    /*Costanti*/
    #define SIZE 10
    /*Prototipi*/
    void caricaMatrice(int matrice[][SIZE], int r, int c);
    void stampaMatrice(int matrice[][SIZE], int r, int c, int n);
    void prodotto(int matrice1[][SIZE], int matrice2[][SIZE], int r1, int c1, int r2, int c2);
    /*Funzione main*/
    int main()
    {
       int matrice1[SIZE][SIZE], matrice2[SIZE][SIZE], matrice3[SIZE][SIZE];
       int r1,r2,c1,c2,i,j,h;
    
    /*Acquisizione numero righe/colonne matrici*/
    do{
       do //Controlli per verificare che non sfori o che le r/c siano maggiori di 0
       {
          printf("N righe prima matrice: \n");
          scanf("%d", &r1);
       }
       while((r1>SIZE)||(r1<=0));
       do
       {
          printf("N colonne prima matrice: \n");
          scanf("%d", &c1);   
       }
       while((c1>SIZE)||(c1<=0));
       do
       {
          printf("N righe seconda matrice: \n");
          scanf("%d", &r2);   
       }
       while((r2>SIZE)||(r2<=0));
       do
       {
          printf("N colonne seconda matrice: \n");
          scanf("%d", &c2);
       }
       while((c2>SIZE)||(c2<=0));
      }while(c1!=r2);
    /*Caricamento Matrici*/
       printf("Carico matrice1: \n");
       caricaMatrice(matrice1, r1, c1);
       printf("Carico matrice2: \n");
       caricaMatrice(matrice2, r2, c2);
    /*Stampa delle Matrici*/
       stampaMatrice(matrice1, r1, c1, 1);
       stampaMatrice(matrice2, r2, c2, 2);
       prodotto(matrice1,matrice2,r1,c1,r2,c2);
       stampaMatrice(matrice3,i,j,3);
       return 0;
    }
    void caricaMatrice(int matrice[][SIZE], int r, int c)
    {
       int i, h;
       for(i=0;i<r;i++)
       {
          for(h=0;h<c;h++)
          {
             printf("Inserisci il valore nella posizione [%d][%d] :\t",i,h);
             scanf("%d", &matrice[i][h]);
          }
       }   
    }
    
    void stampaMatrice(int matrice[][SIZE], int r, int c, int n)
    {
       int i, h; 
       printf("La matrice%d e': \n",n);
       for(i=0; i<r; i++)
          {for(h=0;h<c;h++)
               {printf("%d ", matrice[i][h]);
               }
            printf("\n");
          }
    }
    
    void prodotto(int matrice1[][SIZE], int matrice2[][SIZE], int r1, int c1, int r2, int c2)
    {int matrice3[SIZE][SIZE];
     int i,j,somma,h;
     for(i=0;i<r1;i++);
        {for(j=0;j<c2;j++)
            {somma=0;
             for(h=0;h<c1;h++)
                {somma=somma+matrice1[i][h]*matrice2[h][j];
                 matrice3[i][j]=somma;
                 }
            }
         }
    }
  • Re: Prototipi e chiamate di funzioni

    Non hai modificato la funzione prodotto come ti avevo suggerito ...
  • Re: Prototipi e chiamate di funzioni

    Scusami, allora non ho capito come la devo modificare...
  • Re: Prototipi e chiamate di funzioni

    Matrice3 sta nel main e la devi passare alla funzione prodotto in modo che ci possa scrivere.

    La funzione prodotto non deve avere un'altra matrice3 locale e non deve visualizzare il contenuto della matrice3 perché lo fa in uscita la funzione stampaMatrice
Devi accedere o registrarti per scrivere nel forum
5 risposte