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

  FORUM HardWare.fr
  Programmation
  C

  multiplication de matrices

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

multiplication de matrices

n°1064250
d'jo
Posté le 28-04-2005 à 14:08:15  profilanswer
 

Encore moi ! Bon là pour vous cela doit etre simple à résoudre mais moi je suis trop dedans à mon avis .  
Voila je multiplie des matrices selon les règles normales , mais à l'affichage ... rien je suis bloqué le code est bon sans erreur d'allocation ..  
 
  voila un bout du code  
 
void produit(int N,int M,float **a,float **b,float **c)
{
int i,j;
 
c=(float **)malloc((N)*sizeof(float *));
 
for (i=0 ; i<N ; i++)
 {
 c[i]=(float *)malloc((M)*sizeof(float));    
 }
 
for (i=0 ; i<N ;i++)
{ printf("i=%d",i);
 for (j=0 ; i<M;j++)
 {
 c[i][j]=a[i][j]*b[j][i];
 printf("%f",c[i][j]);
 
 }
}
 
}
 
void affiche(float **c,int N,int M)
{
int i,j;
printf(" \n voici le produit de matrice \n " );
for (i=0 ; i<N ; i++)
 { printf("i=%d",i);
  for(j=0;j<M;j++)
    { printf("j=%d",j);
      printf("%f",c[i][j]);
    }
 }
 
}
 
int main()
{
int *N,*M;
float **a,**b,**c;
saisie(N,M,a,b);
produit(*N,*M,a,b,c);
affiche(c,*N,*M);
 
 return(0);
}
 
Si vous voyez l'erreur merci de me le signaler ..  
 
Pour rappelle je debute 4 seance de C dc ...

mood
Publicité
Posté le 28-04-2005 à 14:08:15  profilanswer
 

n°1064252
d'jo
Posté le 28-04-2005 à 14:09:29  profilanswer
 

les printf suplementaire c'était pour vérifier mais ils n apparaissent pas à l'écran

n°1064278
skelter
Posté le 28-04-2005 à 14:29:40  profilanswer
 

c=(float **)malloc((N)*sizeof(float *));  
->
c = malloc( N * sizeof *c ); plus sur
 
alloue un buffer (NxM) et pas une collection de buffer
 
pourquoi
int *N,*M; ?

n°1064302
Elmoricq
Modérateur
Posté le 28-04-2005 à 14:40:57  profilanswer
 

Problème de passage de paramètre par variable, que ce soit pour saisie() comme pour produit().
 
Pour passer un paramètre par variable, il faut donner son adresse.
 
Exemple :
 
 
 
 
float **c;
produit(N,M,a,b, &c);
 
 
Avec produit() :
void produit(int N, int M, float **a, float **b, float ***c);
 
 
J'imagine, vu le code, que ce sera pareil pour saisie().
 
 
De même, déclare N et M comme des int normaux, et passe leur adresse plutôt, ce sera plus propre :
 
int N, M;
saisie(&N, &M, &a, &b);


Message édité par Elmoricq le 28-04-2005 à 15:05:13
n°1064328
skelter
Posté le 28-04-2005 à 14:53:37  profilanswer
 

c'est du passage par valeur, ca n'existe pas le passage par reference en c

n°1064337
d'jo
Posté le 28-04-2005 à 15:02:43  profilanswer
 

oui je vois bien ce que vous voulez dire mais en fait dans le programme tout passe nikel juste il n'entre dans aucune boucle ni pour le calcul de C[i] ni pour son affichage.
N et M sont des pointeurs car dans la premiere fonction (que vous ne voyez pas )on demande à l'utilisateur d'entrer la taille ligne colonne de la matrice.
Ainsi en utilisant un addressage à l'zide de pointeur N et M ne sont plus intern à la fonction . Dans les deux autres je n'ai pas besoin de les modifier ..

n°1064341
d'jo
Posté le 28-04-2005 à 15:04:17  profilanswer
 

Et pour le malloc c'est equivalent au calloc non ?

n°1064342
Elmoricq
Modérateur
Posté le 28-04-2005 à 15:04:39  profilanswer
 

skelter a écrit :

c'est du passage par valeur, ca n'existe pas le passage par reference en c


 
Ce n'est effectivement pas du passage par référence, qui n'existe pas dans le C mais dans le C++, et qui est un poil différent.
Abus de langage de ma part.
 
Je me permets de corriger ma réponse précédente pour ne plus refléter cette erreur.  :jap:

n°1064347
Elmoricq
Modérateur
Posté le 28-04-2005 à 15:08:32  profilanswer
 

d'jo a écrit :

oui je vois bien ce que vous voulez dire mais en fait dans le programme tout passe nikel juste il n'entre dans aucune boucle ni pour le calcul de C[i] ni pour son affichage.
N et M sont des pointeurs car dans la premiere fonction (que vous ne voyez pas )on demande à l'utilisateur d'entrer la taille ligne colonne de la matrice.
Ainsi en utilisant un addressage à l'zide de pointeur N et M ne sont plus intern à la fonction . Dans les deux autres je n'ai pas besoin de les modifier ..


 
Tu as lu ce que j'ai écrit ?
 
Car de ce que je vois de ton code, ni a, ni b, ni c ne sont jamais initialisés dans main()
 
Les allocations sont sans doute correctes dans les fonctions saisie() ou produit() (quoi que pour saisie() on ne peut pas vérifier), mais main() ne reçoit jamais le contenu de ces variables.
 
De même que pour N et M, je pense que tu n'as pas compris le concept.
 
Pour t'aider :  
http://c.developpez.com/tutcpp/x1659.php


Message édité par Elmoricq le 28-04-2005 à 15:09:53
n°1064376
d'jo
Posté le 28-04-2005 à 15:25:05  profilanswer
 

ok !!
il faut tout initialiser dans le main alors

mood
Publicité
Posté le 28-04-2005 à 15:25:05  profilanswer
 

n°1064378
d'jo
Posté le 28-04-2005 à 15:26:25  profilanswer
 

oui oui en effet je n'ai pas tout compris encore je débute avec les pointeurs et le C d'ailleur

n°1064389
Elmoricq
Modérateur
Posté le 28-04-2005 à 15:29:40  profilanswer
 

Alors vas consulter le lien que j'ai mis, tu en découvriras plus sur le passage par valeur et par variable.
 
Et, non, il ne faut pas tout initialiser dans le main.
Sur le lien que j'ai indiqué, c'est marqué ce que fait la fonction quand elle reçoit une variable : elle recopie la valeur, même si la variable s'appelle pareil, c'est pas la même entre main() et la fonction appelée.
 
Pour avoir la MEME variable, il faut donner son adresse mémoire à la fonction, ce qui se fait avec "&".

n°1064423
d'jo
Posté le 28-04-2005 à 15:43:32  profilanswer
 

ok merci j'ai vu le site il explique bien (toi aussi t'inquiete pas  !) le fonctionnement général. Par contre pour utiliser le malloc j'avoue que j'ai encore du mal mais ça va venir

n°1064460
Emmanuel D​elahaye
C is a sharp tool
Posté le 28-04-2005 à 16:03:16  profilanswer
 

d'jo a écrit :

voila un bout du code


Ta maman, elle t'a jamais dit qu'il fallait déclarer avant d'utiliser ? Mauvaise mère...


main.c: In function `produit':
 
main.c:17: warning: implicit declaration of function `malloc'
main.c:17: warning: nested extern declaration of `malloc'
<internal>:0: warning: redundant redeclaration of 'malloc'
main.c:25: warning: implicit declaration of function `printf'
main.c:25: warning: nested extern declaration of `printf'
 
<internal>:0: warning: redundant redeclaration of 'printf'
 
main.c: In function `affiche':
 
main.c:39: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c: At top level:
main.c:51: warning: function declaration isn't a prototype
main.c: In function `main_':
main.c:54: warning: implicit declaration of function `saisie'
main.c:54: warning: nested extern declaration of `saisie'
 
main.c:52: warning: 'N' might be used uninitialized in this function
 
main.c:52: warning: 'M' might be used uninitialized in this function
main.c:53: warning: 'a' might be used uninitialized in this function
main.c:53: warning: 'b' might be used uninitialized in this function
 
gcc.exe out/main.o out/frmwrk.o  -o "out\ed01.exe" -L"D:/DEV-CPP/lib" -L"d:/clib/ed/devcpp/lib" -led  
 
out/main.o:main.c:(.text+0x149): undefined reference to `saisie'


 
Et les balises code <fixed>, <cpp>, c'est en option ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1064508
d'jo
Posté le 28-04-2005 à 16:19:03  profilanswer
 

RERE je débute et c'est pas ma maman mais un prof assez spécial qui m'apprend!!je connais pas tes balises je suis en C et enfin quand j'execute le programme en entier j'ai AUCUN probleme ??!!  
Voiloo non mais c'est vrai que j'ai quand meme du mal.lol enfin bon 4 td c'est un peu chaud .
J'aimerai également fabriquer une matrice  
 
 a b c d....z
 b c d .....a
 c
 .
 .
 z          a
 
Si quelqu'un à une idée ?
Je pensais utiliser un pointeur de pointeur mais comme je vous le disais c'est encor tres flou dans ma tete !


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

  multiplication de matrices

 

Sujets relatifs
[C] Multiplication de polynômes. Ce code est-il OK ? [Résolu]Faire une multiplication en asp
Gérer les matricesMultiplication
utilisation des pointeurs pour des matrices 2*2Multiplication et somme dans une requete...
multiplication entre plusieurs tablesMultiplication ligne à ligne uniquement en SQL
matrices en Clibrairie sur les matrices comprenant les modulo
Plus de sujets relatifs à : multiplication de matrices


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