How to transform pointer into array

1

I'm doing a program that transforms an array into a transposed array. I'm using 3 functions because I want to learn how to pass parameters from arrays .

The main() function calls the mValores function that prompts the user for the number of rows and columns in the array and assigns the value of each element of that array.

The function mValores in turn passes the parameters matrix, rows, columns; for the mTransposta function that receives the locations of those variables in the *A, *m, *n pointers.

#include <stdio.h>
#include <stdlib.h>

//Tipo de matriz e seus valores
void mValores()
{

    //Declaração de variáveis
    int i, j; // i: Contador de linhas; j: contador de colunas;
    int linhas, colunas;

    //Definindo o tipo de matriz
    printf("\nDigite a quantidade de linhas: \n");
    scanf("%d", &linhas);
    printf("Digite a quantidade de Colunas: \n");
    scanf("%d", &colunas);

    int matriz [linhas] [colunas]; //Declaração do array bidimensional

    //Mostrando o tipo de matriz
    printf("Matriz do tipo: %dx%d ", linhas, colunas);
    if(linhas == colunas){

        printf("(Matriz quadrada).");

    }

    else if(linhas == 1 && colunas > 1){

        printf("(Matriz linha).");

    }

    else if(linhas > 1 && colunas == 1){

        printf("(Matriz coluna).");

    }

    printf("\n");

    for(i = 0; i < linhas; i++){
        for(j = 0; j < colunas; j++){

            printf("a%d%d ", i + 1, j + 1);

        }
        printf("\n");
    }

    //Atribuindo os valores da matriz
    printf("Digite os valores de: \n");
    for(i = 0; i < linhas; i++){
        for(j = 0; j < colunas; j++){

            printf("a%d%d ", i + 1, j + 1);
            scanf("%d", &matriz [i] [j]);

        }
    }

    printf("\n");

    //Mostrando os valores da matriz
    for(i = 0; i < linhas; i++){
        for(j = 0; j < colunas; j++){

                printf("%4d",matriz [i] [j]);

        }
        printf("\n");
    }

    printf("\n");

    mTransposta(matriz , linhas, colunas);

}

void main()
{

    //Declaração de variáveis
    char end;
    printf("\n***CALCULOS DE MATRIZES*** \n");

    do{

        printf("\nMatriz Transposta\n");

        mValores();

        printf("\nDigite 1 para sair ou digite qualquer outro numero para Continuar:\n");
        scanf("%d", &end);

    }while (end != 1);

}

void mTransposta(int *A, int *m, int *n) // A = matriz, m = linhas, n = colunas
{

    int i, j;

    *matrizTransposta [*m] [*n] = A;//Atribuição do local da variável matriz para variável matrizTransposta

    for(i = 0; i < *n; i++){
        for(j = 0; j < *m; j++){

            printf("%4d",matrizTransposta [j] [i]);

        }
        printf("\n");
    }

}

The problem is in the mTransposta function. I wanted to assign the values that are in the array variable [rows] [columns] which is in the mValores() function to the matrizTransposta [*m] [*n] variable that is in the mTransposta() function through the *A pointer.     

asked by anonymous 08.10.2017 / 18:26

1 answer

1

The code has some problems that I fixed. It is also a bit poorly organized so the comments have become necessary. I did not organize everything, but if you do well organized you do not need comments.

There's no way to convert something like that. You must receive a matrix yourself. Or treat everything as a pointer and manually take care of access.

This transport is not necessary in this function, I left it because it can be an exercise. But exercises should focus on one functionality only or else do everything right, which does not happen there.

#include <stdio.h>

void Transposta(int linhas, int colunas, int matriz[][colunas]) {
    int matrizTransposta[colunas][colunas];
     for (int i = 0; i < colunas; i++) {
        for (int j = 0; j < linhas; j++) {
            matrizTransposta[i][j] = matriz[j][i];
        }
        printf("\n");
    }
   for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            printf("%4d", matrizTransposta[i][j]);
        }
        printf("\n");
    }
}

void Valores() {
    int linhas, colunas;
    printf("\nDigite a quantidade de linhas: \n");
    scanf("%d", &linhas);
    printf("Digite a quantidade de Colunas: \n");
    scanf("%d", &colunas);
    int matriz[linhas][colunas];
    printf("Matriz do tipo: %dx%d ", linhas, colunas);
    if (linhas == colunas) {
        printf("(Matriz quadrada).");
    } else if (linhas == 1 && colunas > 1) {
        printf("(Matriz linha).");
    } else if(linhas > 1 && colunas == 1) {
        printf("(Matriz coluna).");
    }
    printf("\n");
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            printf("a%d%d ", i + 1, j + 1);
        }
        printf("\n");
    }
    printf("Digite os valores de: \n");
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            printf("a%d%d ", i + 1, j + 1);
            scanf("%d", &matriz[i][j]);
        }
    }
    printf("\n");
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            printf("%4d", matriz[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    Transposta(linhas, colunas, matriz);
}

int main() {
    int end;
    printf("\n***CALCULOS DE MATRIZES*** \n");
    do {
        printf("\nMatriz Transposta\n");
        Valores();
        printf("\nDigite 1 para sair ou digite qualquer outro numero para Continuar:\n");
        scanf("%d", &end);
    } while (end != 1);
}

See running on ideone . And no Coding Ground . Also put it in GitHub for future reference .

    
08.10.2017 / 19:00