2010-01-29 7 views
0

Ok donc je ne comprends pas comment écrire cette fonction il suffit de prendre un scalaire et de le multiplier par la matrice, mais je ne sais pas comment l'appeler ou quoi que ce soit .Comment écrire matrice mutiply en programmation C en utilisant des pointeurs

J'ai créé la matrice:

MX* mxCreate(unsigned int height, unsigned int width) { 
    int i = 0; 
    double** mxPtr; 
    mxPtr = (double**)malloc(sizeof(double*) * height); 
    ASSERT(mx, "Memory allocation failed"); 
    for(i = 0; i < height; i++){ 
     mxPtr[i] = (double *) malloc(sizeof(double) * width); 
     ASSERT(mx[i], "Memory allocaiton failed"); 
    } 
    MX *mx = malloc(sizeof(MX)); 
    ASSERT(mx, "Memory allocation failed"); 
    mx->w = width; 
    mx->h = height; 
    mx->m = mxPtr; 
    return mx; 
} 

cependant comment multiplier dois-je scalaire, voici ce que j'ai jusqu'à présent:

MX* mxScalar(const MX* mx, double scalar) { 
    int i, j; 
    s = scalar; 
    for(i=0; i < h; i++) 
    { 
     for(j=0; j<w; i++) 
     { 
      mx[i][j] = s * m[i][j]; 
     } 
    } 
    return mx; 
} 

grâce

+0

Quel est le type de 'MX'? – kennytm

+2

La boucle interne de votre multiplication incrémente i lorsqu'il doit incrémenter j, ce qui pourrait expliquer pourquoi il ne se comporte pas comme prévu. En outre, la taille devrait être lue de mx, bien sûr. – unwind

+0

Vous devez également initialiser les valeurs dans le tableau - probablement à zéro (bien que zéro multiplié par un scalaire soit remarquablement similaire à zéro). –

Répondre

2

Cela semble OK comme base structure (sauf que vous avez un i++ où vous voulez dire j++). Vous avez juste besoin d'accéder h, w et m en tant que membres de mx:

for(i = 0; i < mx->h; i++) 
{ 
    for(j = 0; j < mx->w; j++) 
    { 
     mx->m[i][j] *= s; 
    } 
} 

Votre création de routine a vraiment besoin de définir la chaque entrée dans la matrice à 0.0, bien que - la mémoire retournée par malloc pourrait avoir une ordure au hasard dans il.

Questions connexes