I need to do a function that passes an n * m matrix, is transformed into a unidimesional tam n *m vector

Asked

Viewed 83 times

-3

int* Vetor_Unidim(int **matriz, int n, int m){

    int *vetor = (int*)malloc((n*m)*sizeof(int));
    int *p;
    p = *matriz;
    int tam = n*m;
    int i;

   for(i = 0; i<n; i++){
    p = matriz[i];      
    for(j= 0; j<m ; j++, p++){
    vetor[k]= *p;
    k++;
            }
    }
    return vetor;
}

3 answers

1

You don’t need any auxiliary pointer to convert the matrix, check this out:

int * Vetor_Unidim( int ** matriz, int m, int n )
{
    int i, x, y;
    int * vetor = (int*) malloc( n * m * sizeof(int) );

     for( x = 0, i = 0; x < m; x++ )
        for( y = 0; y < n; y++ )
            vetor[i++] = matriz[x][y];

    return vetor;
}
  • 1

    I understood your code, but when it comes to compiling it is giving error.

  • 1

    invalid Conversion from 'void*' to 'int*' [-fpermissive]

  • 1

    To solve this error, it remains to put the cast in front of the malloc(): (int*)malloc( n * m * sizeof(int) );

  • 1

    @Ramilsonsilva: Corrected!

0

by which I intend in your questVoce wants to take this vector[1][1] and pass to that vector[1*1], so:

int n = 0;
int vet[3][3];
int vetB[9];    

for(int x=0;x<3;x++){
   for(int y=0;y<3;y++){
      vet[x][y] = valor;
   }
}

for(x=0;x<3;x++){
   for(y=0;y<3;y++){
      vet[n] = vet[x][y];
      n++;
   }
}
  • It is actually a function that receives a matrix

-1

#include <stdio.h>

/* copiamatrizparavetor
 * Recebe a matriz, as dimensoes (m = altura, n = largura)
 * e devolve o vetor-alvo, de tamanho m x n.
 */
void copiamatrizparavetor(int** matriz, int m, int n, int* vetornovo)
{
    for (int i = 0; i < m; ++i)
        for (int j = 0; j < n; ++j)
            vetornovo[i * n + j] = matriz[i][j];
}

int main(int argc, char* argv[])
{
    int m, n;

    // Entro as dimensoes da matriz e do vetor.
    // m e a altura, n e a largura.
    fflush(stdin);
    scanf("%d %d", &m, &n);

    if (m > 0 && n > 0)
    {
        // Declaro aqui a matriz e o vetor.
        int matriz[m][n], vetor[m * n];

        // Entro os valores da matriz.
        for (int i = 0; i < m; ++i)
            for (int j = 0; j < n; ++j)
                scanf("%d", &matriz[i][j]);

        // Copio o conteudo da matriz para o vetor.
        copiamatrizparavetor(matriz, m, n, vetor);

        // Imprimo o vetor.
        for (int k = 0; k < m * n; ++k)
        {
            // Imprimo o espaco, delimitador de coordenadas do vetor.
            if (k > 0)
            {
                printf(" ");
            }

            // Imprimo a coordenada atual do vetor.
            printf("%d", vetor[k]);

            if (k % n == 0)
            {
                // Quebro a linha para formatar o vetor em 
                // formato de matriz.
                printf("\n");
            }
        }
        // Quebro a linha no final do processamento, para
        // deixar mais legivel.
        printf("\n");
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.