Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
732 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Appel d'une matrice dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appel d'une matrice dans une fonction

n°2165214
tropconten​t
Posté le 22-11-2012 à 23:29:44  profilanswer
 

Bonjour  :jap:  
 
 
J'ai écrit un petit programme permettant de faire quelques opérations basiques sur les matrices (addition, soustraction, multiplication). Lors de la compilation, il indique une erreur au niveau de l'appel de la fonction saisie indiqué en commentaire : impossible de convertir un int [3][3] en int **
 
Voici le programme :
 

Code :
  1. #include <stdio.h>
  2. #define DIM 3
  3. /*********/
  4. void saisie(int **);
  5. void addition(int **,int **,int **);
  6. void soustraction(int **,int **,int **);
  7. void multiplication(int **,int **,int **);
  8. /*********/
  9. void main()
  10. {
  11. int matA[DIM][DIM], matB[DIM][DIM], matC[DIM][DIM], choix, i,j;
  12. printf("Nous allons entrer les elements de votre premiere matrice\n" );
  13. saisie(matA);/*ERREUR COMPILATION : IMPOSSIBLE DE CONVERTIR UN INT [3][3] EN INT **     */
  14. printf("Nous allons entrer les elements de votre seconde matrice\n" );
  15. saisie(matB);/*ERREUR COMPILATION : IMPOSSIBLE DE CONVERTIR UN INT [3][3] EN INT **      */
  16. printf("Quelle operation voulez-vous faire sur vos matrices ? (addition=1, soustraction=2, multiplication=3)" );
  17. scanf("%d",&choix);
  18. switch (choix)
  19. {
  20.  case 1:{addition(matA,matB,matC);break;}
  21.  case 2:{soustraction(matA,matB,matC);break;}
  22.  case 3:{multiplication(matA,matB,matC);break;}
  23.  default:{printf("Error" );choix=0;}
  24. }
  25. if (choix!=0)
  26. {
  27.  printf("Voici la matrice resultante : \n" );
  28.  for (i=0;i<DIM;i++)
  29.  {
  30.   for (j=0;j<DIM;j++) printf("%d ",matC[i][j]);
  31.   printf("\n" );
  32.  }
  33. }
  34. }
  35. /*************/
  36. void saisie(int mat1[DIM][DIM])
  37. {
  38. int i,j;
  39. for (i=0;i<DIM;i++)
  40.  for (j=0;j<DIM;j++)
  41.   {
  42.   printf("Entrer mat1[%d][%d]: \n",i,j);
  43.   scanf("%d",&mat1[i][j]);
  44.   }
  45. }
  46. void addition(int mat1[DIM][DIM], int mat2[DIM][DIM], int mat3[DIM][DIM])
  47. {
  48. int i,j;
  49. for (i=0;i<DIM;i++)
  50.  for (j=0;j<DIM;j++)
  51.    mat3[i][j]=mat1[i][j]+mat2[i][j];
  52. }
  53. void soustraction(int mat1[DIM][DIM], int mat2[DIM][DIM], int mat3[DIM][DIM])
  54. {
  55. int i,j;
  56. for (i=0;i<DIM;i++)
  57.  for (j=0;j<DIM;j++)
  58.   mat3[i][j]=mat1[i][j]-mat2[i][j];
  59. }
  60. void multiplication(int mat1[DIM][DIM], int mat2[DIM][DIM], int mat3[DIM][DIM])
  61. {
  62. int i,j,k;
  63. for (i=0;i<DIM;i++)
  64.  for (j=0;j<DIM;j++)
  65.  {
  66.   mat3[i][j]=0;
  67.   for (k=0;k<DIM;k++) mat3[i][j]+=mat1[i][k]*mat2[k][j];
  68.  }
  69. }


 
Pourtant, j'ai vérifié et normalement pour les matrices, comme pour les tableaux à une dimension, il faut bien mettre matA en argument de la fonction "saisie" (idem pour matB). Je dois forcément me tromper quelque part. Quelqu'un pourrait-il m'éclairer ? Merci !


Message édité par tropcontent le 23-11-2012 à 13:06:30
mood
Publicité
Posté le 22-11-2012 à 23:29:44  profilanswer
 

n°2165217
Farian
Posté le 22-11-2012 à 23:54:05  profilanswer
 

Dans votre prédéclaration, ligne 4, vous indiquez :
 
void saisie(int);
 
Et ensuite, vous la définissez correctement :  
void saisie(int mat1[DIM][DIM])
{
   ...
}
 
Pendant la compilation du "main", le compilateur ne connait que la pré-déclaration (void saisie(int)) et déclare donc que les paramètres sont incorrects.
 
Bonne continuation :)

n°2165261
tropconten​t
Posté le 23-11-2012 à 13:00:49  profilanswer
 

Merci pour votre réponse.
J'ai changé les paramètres du prototypage des fonctions, en mettant int **. Mais il ne compile toujours pas et me dit : "impossible de convertir un int [3][3] en int **. Lorsque j'enlève le prototypage (donc le problème du int **) et que je mets directement les définitions des fonctions avant le main, tout marche très bien. J'écris donc une nouvelle erreur dans le prototypage de mes fonctions. J'ai édité le code de mon premier message pour indiquer les modifications.
Merci !

n°2165353
tropconten​t
Posté le 24-11-2012 à 19:25:07  profilanswer
 

Quelqu'un aurait-il une idée de comment je devrais faire le prototypage des fonctions ?
Merci !  :jap:

n°2165355
Farian
Posté le 24-11-2012 à 19:48:21  profilanswer
 

Utilisez dans la pré-déclaration ce que vous mettez par la suite dans la définition, soit  :  
void saisie(int mat1[DIM][DIM]);
void addition(int mat1[DIM][DIM]);
void soustraction(int mat1[DIM][DIM]);
void multiplication(int mat1[DIM][DIM]);
 

n°2165431
tropconten​t
Posté le 26-11-2012 à 05:46:39  profilanswer
 

Bonjour,
 
 
Effectivement, c'est ce que je pensais faire, pour être sûr que ça marche.
Mais étant donné que dans mes prototypages, j'écris uniquement le type de la variable (pas la variable), par exemple :
void permute(int *, int *);
Je me demandais comment faire dans le cas des matrices. Je pensais que
void saisie(int **);
marcherait mais non. Je suis donc obligé d'écrire :
void saisie(int mat1[DIM][DIM]);
 
?
 
Merci.

n°2165437
Terminapor
I'll see you rise.
Posté le 26-11-2012 à 09:29:19  profilanswer
 

C'est pas exactement la même chose ça : void foo(int ** T) et ça : void foo (int T[SIZE][SIZE])
 
Un prototype doit avoir exactement les même variables que le corps :  
 
void saisie(int T[DIM][DIM]);
void addition(int T1[DIM][DIM],int T2[DIM][DIM],int T3[DIM][DIM]);
 
etc,etc.
 
Ou alors, changer les types de variables dans tes corps pour passer d'un Tab2D à un pointer sur pointer.


---------------
Perhaps you don't deserve to breathe
n°2165960
tropconten​t
Posté le 28-11-2012 à 22:15:31  profilanswer
 

Merci !  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Appel d'une matrice dans une fonction

 

Sujets relatifs
Pb fonction RechercheV ExcelUtilisation d'une variable dans un appel de SQL (avec un "@" )
EXCEL alternative a la fonction SIElements Finis : Assemblage matrice
autoriser une annimation en fonction de la date du jour sous powerpoinQuadrature de Gauss sur une matrice
[C] Fonction gotoligcolfonction qui appelle une fonction de la même classe
[VBA] Fonction find avec plusieurs criteresFonction excel
Plus de sujets relatifs à : Appel d'une matrice dans une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR