транспонировать квадратную матрицу с указателем в C. неправильный вывод - PullRequest
1 голос
/ 17 июня 2020

Цель состоит в том, чтобы напечатать транспонирование «Матрицы».

Чтобы создать квадратную матрицу, я получил «строку» с клавиатуры. строка такая же, как и столбец, поэтому я объявил только строку.

проблема, в которой мне нужна помощь, находится прямо под ↓

/*input*/
5 4 1
9 0 1
6 5 7

/*output I want*/
5 9 6
4 0 5 
1 1 7

/*wrong output I get*/
0 4 -30838770
0 7 2
0 5 7

И вот мой код. Матрица в каждой функции должна вызываться по ссылке. Я также хочу знать, правильно ли я понял.

//code start 

int Generate(int row, int (*Matrix)[row])
{
    srand(time(NULL)); //make random number 

    int i, j;
    printf("Matrix = "); 
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            Matrix[i][j] = (rand() % 10); //insert random number from 0 to 10
            printf("%d ", Matrix[i][j]); //print matrix before transposing
        }
        printf("\n");
    }   
    return 0;
}

void Transpose(int row, int (*Matrix)[row])
{
    int i, j;
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            int transpose[i][j];
            transpose[i][j] = Matrix[j][i]; 
            printf("%d ", transpose[i][j]);
        }
        printf("\n");
    }
} 

int main() {

    int input; //for switch case
    int row = 0; //row has to be 2 or 3
    int Matrix[row][row]; //2d array. largest index should be Matrix [row-1][row-1]

    while(1){ 

    scanf("%d", &input);

        switch(input){
            case 1: // Generate random square matrix
                scanf("%d", &row); //insert row
                Generate(row, Matrix); 
                break;
            case 2: //transpose matrix
                Transpose(row, Matrix);
                break;
            default:
                return 0;
        }
    }
}

//code end


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

Пожалуйста, дайте мне знать строки, которые вы не понимаете, потому что я действительно хочу, чтобы этот код работал.

Жду вашей помощи!

1 Ответ

0 голосов
/ 17 июня 2020

Ваша программа пытается print транспонировать, поэтому вам не нужно ничего хранить. удалите все с помощью transpose[i][j] и просто напечатайте Matrix[j][i]. Как указано в комментариях, вы выделяете (в стеке) новую матрицу формы ixj на каждой итерации, что не имеет смысла.

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