Multiplication matrices de tailles inconnues
Fermé
airstrik
Messages postés
4
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
6 avril 2012
-
Modifié par airstrik le 6/04/2012 à 13:43
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 8 avril 2012 à 00:28
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 8 avril 2012 à 00:28
A voir également:
- Multiplication matrices de tailles inconnues
- Autoriser sources inconnues fire stick tv - Accueil - Guide TV et vidéo
- Application multiplication - Télécharger - Études & Formations
- Dans la présentation à télécharger, déplacez l'image dans le cadre sans en modifier la taille. redressez l'image pour que le niveau de la mer soit à l'horizontale. faites correspondre : la ligne avec le niveau de la mer ; le point avec le sommet de la grande voile. combien d'oiseaux sont dans le cadre ? - Forum Word
- Comment retrouver la taille normale de l'écran windows 10 ✓ - Forum Windows
- Dans le document à télécharger, formatez le texte comme ceci : appliquez une taille de 11 pt à tous les textes sans gras ni italique appliquez une taille de 14 pt à tous les textes en italique après ce formatage, combien de pages le document contient-il ? ✓ - Forum Bureautique
1 réponse
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
8 avril 2012 à 00:28
8 avril 2012 à 00:28
Bonjour,
En utilisant des pointeurs ça peut être plus simple, exemple :
N'oubliez pas de faire le free qui va avec allocm
Une autre idée qui simplifierait encore serait d'utiliser une structure par matrice et éviterait d'avoir à préciser leur taille en paramètre des fonctions :
n'ai pas fais le free là non plus
En utilisant des pointeurs ça peut être plus simple, exemple :
#include <stdio.h> #include <stdlib.h> #include <assert.h> void prodmat(double **A,int ya,int xa,double **B,int yb,int xb){ int i,j; printf("A :\n"); for(i=0;i<ya;i++){ for(j=0;j<xa;j++) printf("%f ",A[i][j]); printf("\n"); } printf("B :\n"); for(i=0;i<yb;i++){ for(j=0;j<xb;j++) printf("%f ",B[i][j]); printf("\n"); } } double **allocm(int y,int x){ double **ptr; int i; ptr=malloc(sizeof(double*)*y); if(ptr){ for(i=0;i<y;i++){ ptr[i]=malloc(sizeof(double)*x); assert(ptr[i]); } } return ptr; } void addstuff(double **ptr,int y,int x){ int i,j,c=1; for(i=0;i<y;i++) for(j=0;j<x;j++){ ptr[i][j]=c; c++; } } int main(void) { double **A,**B; A=allocm(4,5); B=allocm(3,2); addstuff(A,4,5); addstuff(B,3,2); prodmat(A,4,5,B,3,2); return 0; }
N'oubliez pas de faire le free qui va avec allocm
Une autre idée qui simplifierait encore serait d'utiliser une structure par matrice et éviterait d'avoir à préciser leur taille en paramètre des fonctions :
#include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct{ double **m; int y,x; }matx; void prodmat(matx *mA,matx *mB){ int i,j; printf("A :\n"); for(i=0;i<mA->y;i++){ for(j=0;j<mA->x;j++) printf("%f ",mA->m[i][j]); printf("\n"); } printf("B :\n"); for(i=0;i<mB->y;i++){ for(j=0;j<mB->x;j++) printf("%f ",mB->m[i][j]); printf("\n"); } } matx *allocm(int y,int x){ matx *ptr; int i; ptr=malloc(sizeof(matx)); assert(ptr); ptr->y=y,ptr->x=x; ptr->m=malloc(sizeof(double*)*ptr->y); assert(ptr->m); for(i=0;i<ptr->y;i++){ ptr->m[i]=malloc(sizeof(double)*ptr->x); assert(ptr->m[i]); } return ptr; } void addstuff(matx *m){ int i,j,c=1; for(i=0;i<m->y;i++) for(j=0;j<m->x;j++){ m->m[i][j]=c; c++; } } int main(void) { matx *mA,*mB; mA=allocm(4,5); mB=allocm(3,2); addstuff(mA); addstuff(mB); prodmat(mA,mB); return 0; }
n'ai pas fais le free là non plus