Умножьте строку матрицы на заданное число - PullRequest
0 голосов
/ 23 октября 2019

Я должен умножить определенную строку (я указываю, какая строка именно в 4-м аргументе функции) данной матрицы на число.

Основная функция:

int main_tp05(int argc, const char *argv[]){
    int mNx100[][MAXCOLS100] = {{1,2,3},{4,5,6},{7,8,9}};
    multiply_matrixNx100_line_by_scalar(mNx100,3,3,1,2);
    return  0;
}

Я пытался решить это так:

void multiply_matrixNx100_line_by_scalar(int mNx100[][MAXCOLS100], int lines, int columns, int line, int scalar){
    for (int i = 0; i < lines; i++) {
        for (int j = 0; j < columns; j++) {
            if(i == line){
                printf("%d\n", mNx100[i*scalar][j] );
            }
        }
        printf("\n");
    }
}

Чтобы отметить, что:

1- I can´t change the parameters.
2- MAXCOLS100 is a macro on the .h file. I put it with the value of 3.
3- The scalar is the number I want to multiply the line by. 

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Я должен умножить определенную строку (я указываю, какая строка именно в 4-м аргументе функции) данной матрицы на число

Обычно «умножить строку матрицы на скаляр» означает умножить каждый элемент строки на определенное скалярное значение. Это не то, что делает опубликованная функция, она умножает index строки на переданный аргумент:

void multiply_matrixNx100_line_by_scalar(int mNx100[][MAXCOLS100], int lines, int columns,
                                         int line, int scalar) {
    for (int i = 0; i < lines; i++) {        // <-- Useless, the row is known
        for (int j = 0; j < columns; j++) {
            if(i == line){
                printf("%d\n", mNx100[i*scalar][j] );
                //                    ^^^^^^^^
            }
        }
        printf("\n");
    }
}

Если целью является печать только измененной строки, предыдущая функция могла быпереписать как

void multiply_matrixNx100_line_by_scalar(int mNx100[][MAXCOLS100], int lines, int columns,
                                         int line, int scalar) {
    if (line < 0  ||  line >= lines)
        return;
    for (int j = 0; j < columns; j++) {
        printf("%d\n", mNx100[line][j] * scalar);
    }
    printf("\n");
}

Если вместо этого предполагается, что функция изменяет только матрицу, не печатая ее, мы можем использовать

mNx100[line][j] *= scalar;

Внутри цикла вместо вызоваprintf.

0 голосов
/ 24 октября 2019

Я написал этот код и верифицировал сам, он работает успешно.

    #include <stdio.h>
    #include <stdlib.h>
    int main() 
    {
        int i,j,a[5][5],b,c,d,m,n,r;
        printf("Enter the number of rows and columns\n");
        scanf("%d %d",&m,&n);
        printf("Enter the matrix\n");
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        printf("Enter the number to multiply the matrix\n");
        scanf("%d",&b);
        printf("Enter 0 to multiply row or 1 to multiply column\n");
        scanf("%d",&d);
        if(d==0)
        {
            printf("Enter the row number to be multiplied\n");
            scanf("%d",&r);
            for(i=r,j=1;j<=n;j++)
            {
                a[i][j]*=b;
            }
        }
        else if(d==1)
        {
            printf("Enter the row number to be multiplied\n");
            scanf("%d",&c);
            for(j=c,i=1;i<=m;i++)
            {
                a[i][j]*=b;
            }
        }
        printf("matrix after multiplied\n");
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            {
                printf("%d  ",a[i][j]);
            }
            printf("\n");
        }
        return 0;
    }

ВЫХОД ЭТОГО КОДИРОВАНИЯ

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