Как написать многозначную матрицу в программировании на C, используя указатели - PullRequest
0 голосов
/ 29 января 2010

Хорошо, поэтому я не понимаю, как написать эту функцию, она просто берет скаляр и умножает его на матрицу, но я не понимаю, как ее вызвать или что-то в этом роде.

Я создал Матрицу:

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;
}

однако, как мне скалярно умножить, вот что у меня так далеко:

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;
}

спасибо

1 Ответ

2 голосов
/ 29 января 2010

Это выглядит как базовая структура (кроме того, что у вас есть i++, где вы имеете в виду j++). Вам просто нужно получить доступ к h, w и m в качестве членов mx:

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

Ваша подпрограмма создания действительно должна установить для каждой записи в матрице значение 0.0, хотя - память, возвращаемая malloc, может содержать любой случайный мусор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...