Multiplication de deux matrices
Résolu/Fermé
shinn
Messages postés
47
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2010
-
10 nov. 2010 à 11:29
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 - 5 janv. 2011 à 21:08
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 - 5 janv. 2011 à 21:08
A voir également:
- Multiplication de deux matrices
- Deux comptes whatsapp - Guide
- Deux ecran pc - Guide
- Itinéraire google map entre deux adresses - Guide
- Excel fusionner deux cellules - Guide
- Fusionner deux fichiers excel - Guide
9 réponses
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
10 nov. 2010 à 11:36
10 nov. 2010 à 11:36
C'est ton algo de multiplication qui a un blème je crois....
Essaye ça :
Essaye ça :
void multimat (int l, int c, int d, int m[10][10], int ma[10][10], int mat[10][10]) { int i,j,k; for (i=0; i<l; i++) { for (j=0; j<c; j++) { mat[i][j] = 0 ; for (k=0; k<d; k++) { mat[i][j]=m[i][k]*ma[k][j]+mat[i][j]; } } } }
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
11 nov. 2010 à 18:03
11 nov. 2010 à 18:03
alors, déjà les matrices sont des int** (donc int**val, int***vale, int**valeu).
int** représente un tableau d'int.
ensuite pour y accéder, c'est pareil que les tableaux normaux donc val[i][j] par exemple.
int** représente un tableau d'int.
ensuite pour y accéder, c'est pareil que les tableaux normaux donc val[i][j] par exemple.
void multimat (int l, int c, int d, int **val, int **vale, int **valeu) { int i,j,k; for (i=0; i<l; i++) { for (j=0; j<c; j++) { valeu[i][j] = 0 ; for (k=0; k<d; k++) { valeu[i][j] = val[i][k]*vale[k][j]+valeu[i][j]; } } } }
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
12 nov. 2010 à 10:37
12 nov. 2010 à 10:37
Alors déjà tu as un problème au niveau de tes malloc : là tu alloues un vecteur en fait (tab[i]) or ce qu'on veut c'est une matrice (tab[i][j]).
Voilà comment il faut faire (bon c'est pas bien je n'ai pas réécrit les tests mais bon il te suffit de les rajouter).
Bien sûr il faut aussi remplir les matrices car là il n'y a rien dedans avec par exemple :
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
mat[i][j] = ..... ;
}
Voilà comment il faut faire (bon c'est pas bien je n'ai pas réécrit les tests mais bon il te suffit de les rajouter).
//Pour allouer une matrice 5x5 (par exemple) il faut faire : int **mat ; int i ; mat = (int**)malloc(5*sizeof(int*)); for (i=0;i<5;i++) { mat[i] = (int*)malloc(5*sizeof(int)); } //Et pour la libération for(i=0;i<5;i++) { free(mat[i]); } free (mat) ;
Bien sûr il faut aussi remplir les matrices car là il n'y a rien dedans avec par exemple :
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
mat[i][j] = ..... ;
}
shinn
Messages postés
47
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2010
8
10 nov. 2010 à 11:50
10 nov. 2010 à 11:50
merci beaucoup, en effet je n'avait pas pensé à la réinitialiser à chaque boucle.
ce programme fonctionne parfaitement.
Merci encore de ton aide très précieuse.
ce programme fonctionne parfaitement.
Merci encore de ton aide très précieuse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
10 nov. 2010 à 11:51
10 nov. 2010 à 11:51
y'a pas de quoi ;)
shinn
Messages postés
47
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2010
8
11 nov. 2010 à 17:45
11 nov. 2010 à 17:45
c'est encore moi. voilà j'ai continué mon exercice et je me retrouve devant un autre problème:
void multimat (int l, int c, int d, int *val, int *vale, int *valeu)
{
int i,j,k;
for (i=0; i<l; i++)
{
for (j=0; j<c; j++)
{
*valeu = 0 ;
for (k=0; k<d; k++)
{
*valeu = *val**vale+*valeu;
}
}
}
}
j'ai du faire une allocation dynamique pour mes matrices.
mon problème est que maintenant je ne sait plus du tout comment prendre ce calcul.
Quelqu'un aurait-il une solution à me proposer?
void multimat (int l, int c, int d, int *val, int *vale, int *valeu)
{
int i,j,k;
for (i=0; i<l; i++)
{
for (j=0; j<c; j++)
{
*valeu = 0 ;
for (k=0; k<d; k++)
{
*valeu = *val**vale+*valeu;
}
}
}
}
j'ai du faire une allocation dynamique pour mes matrices.
mon problème est que maintenant je ne sait plus du tout comment prendre ce calcul.
Quelqu'un aurait-il une solution à me proposer?
shinn
Messages postés
47
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2010
8
12 nov. 2010 à 08:33
12 nov. 2010 à 08:33
voilà j'ai utilisé ta méthode, seulement maintenant lorsque je lance mon programme, ma console beug.
tu me dit de faire des int**, mais lorsque je veut me servir de ces pointeurs, je doit mettre un * devant?
int **pt1,**pt2,**pt3;
pt1 = (int*)malloc(l1*c1*sizeof(int));
pt2 = (int*) malloc (l2*c2*sizeof(int));
pt3 = (int*) malloc (l2*c1*sizeof(int));
if((pt1 == NULL)||(pt2 == NULL)||(pt3 == NULL))
{
printf("Echec allocation memoire");
exit(1);
}
init_val(l1,c1,pt1);
init_val(l2,c2,pt2);
affich_mat(l1,c1,pt1);
affich_mat(l2,c2,pt2);
multimat (l1,c2,c1,pt1,pt2,pt3);
affich_mat(l1,c2,pt3);
free(pt1);
free(pt2);
free(pt3);
En tout cas merci de ton aide
tu me dit de faire des int**, mais lorsque je veut me servir de ces pointeurs, je doit mettre un * devant?
int **pt1,**pt2,**pt3;
pt1 = (int*)malloc(l1*c1*sizeof(int));
pt2 = (int*) malloc (l2*c2*sizeof(int));
pt3 = (int*) malloc (l2*c1*sizeof(int));
if((pt1 == NULL)||(pt2 == NULL)||(pt3 == NULL))
{
printf("Echec allocation memoire");
exit(1);
}
init_val(l1,c1,pt1);
init_val(l2,c2,pt2);
affich_mat(l1,c1,pt1);
affich_mat(l2,c2,pt2);
multimat (l1,c2,c1,pt1,pt2,pt3);
affich_mat(l1,c2,pt3);
free(pt1);
free(pt2);
free(pt3);
En tout cas merci de ton aide
shinn
Messages postés
47
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
8 décembre 2010
8
Modifié par shinn le 8/12/2010 à 15:43
Modifié par shinn le 8/12/2010 à 15:43
rebonjour
Je suis désolé du temps de réponse mais j'étais dans une période d'éxam.
Ta technique fontionne bien une fois que on a un peu pratiqué. merci de ton aide.
est-ce que par hasard tu t'y connaîtrais dans l'utilisation des listes chaînées?
Car je suis devant un petit problème et peut-être que tu pourrais m'aider.
Je doit demander à l'utilisateur de rentrer des nom et des temps, pour une course.
On se place à l'arrivée et on note les arrivées au fur et à mesure.
Les concurents arrive t dans l'ordre, et il y a ceux qui se font éliminer lors de la course.
Voilà ce que je veux c'est que lorsque l'utilisateur rentre un nom et un temps différents de 0 alors les informations sont stockées dans une liste chainees appelées "qualifiés" et que lorsque le temps du concurent = 0, les informations sont stockées dans une autre liste chainée.
j'espère que je suis assez clair dans ce que j'explique, si ce n'est pas le cas merci de me le dire.
merci d'avance.
Je suis désolé du temps de réponse mais j'étais dans une période d'éxam.
Ta technique fontionne bien une fois que on a un peu pratiqué. merci de ton aide.
est-ce que par hasard tu t'y connaîtrais dans l'utilisation des listes chaînées?
Car je suis devant un petit problème et peut-être que tu pourrais m'aider.
Je doit demander à l'utilisateur de rentrer des nom et des temps, pour une course.
On se place à l'arrivée et on note les arrivées au fur et à mesure.
Les concurents arrive t dans l'ordre, et il y a ceux qui se font éliminer lors de la course.
Voilà ce que je veux c'est que lorsque l'utilisateur rentre un nom et un temps différents de 0 alors les informations sont stockées dans une liste chainees appelées "qualifiés" et que lorsque le temps du concurent = 0, les informations sont stockées dans une autre liste chainée.
j'espère que je suis assez clair dans ce que j'explique, si ce n'est pas le cas merci de me le dire.
merci d'avance.
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
5 janv. 2011 à 21:08
5 janv. 2011 à 21:08
Aïe aïe aïe !!!!!!
Cette fois c'est moi qui suit vraiment désolée pour le très très très très long temps de réponse....... mais il y a eu exams et surtout INTERNET QUI FAIT DES SIENNES !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bref galère pour ouvrir une malheureuse page.......
C'est toujours d'actu ?
Cette fois c'est moi qui suit vraiment désolée pour le très très très très long temps de réponse....... mais il y a eu exams et surtout INTERNET QUI FAIT DES SIENNES !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bref galère pour ouvrir une malheureuse page.......
C'est toujours d'actu ?