copiar vectores para matrizes em C

fac182

Membro
boas!
na universidade foi-me pedido num exercicio, que criasse um vector onde seria o utilizador a
inserir os valores neste caso era um vector de 100 inteiros,seguidamente teria de passar este vector de 100 inteiros para uma matriz de 10 por 10..
ora eu pa testar resolvi fazer o teste apensa com um vector de 9 elementos e inseri-lo numa matriz de 3 por 3..
aqui está o codigo


Código:
#include<stdio.h>
main(){

    int X[9],M[3][3],i,j;

        for(j=0;j<=8;j++){
                printf("introduza o valor para o indice %d\n",j);
                scanf("%d",&X[j]);
        }
        for(i=0;i<1;i++){ //preenchimento da primeira linha da matriz
                for(j=0;j<=2;j++) //com os valores do vector de 0 a 2
                M[i][j]=X[j];
        }

        for(i=1;i<2;i++){ //preenchimento da segunda linha da matriz
                for(j=0;j<=2;j++) //com os valores do vector de 3 a 5
                M[i][j]=X[j+3];
        }
        for(i=2;i<3;i++){ //preenchimento da terceira linha da matriz
                for(j=0;j<=2;j++) //com os valores do vector de 6 a 8
                M[i][j]=X[j+6];
        }

        for(i=0;i<=2;i++){ //mostra a matriz para o ultilizador
                for(j=0;j<=2;j++)
                printf("%d\t",M[i][j]);
                printf("\n");
        }
}



isto da certo..
agora a minha questao é se nao haverá uma maneira mais simples de copiar um vector para uma matriz sem ser da maneira que eu fiz porque por exemplo se tivesse feito para os 100 valores do vector,como era pedido, teria demorado bem mais...portanto se alguem souber de uma maneira mais simples e menos trabalhosa que me diga..
obrigado!
 
Última edição pelo moderador:
Sim há uma maneira muito mais fácil:

Código:
    int array[MATRIX_SIDE_SIZE * MATRIX_SIDE_SIZE];
    int matrix[MATRIX_SIDE_SIZE][MATRIX_SIDE_SIZE];
    
    for(size_t i = 0; i < MATRIX_SIDE_SIZE * MATRIX_SIDE_SIZE; i++) {
        int matrixX = i % MATRIX_SIDE_SIZE;
        int matrixY = i / MATRIX_SIDE_SIZE;
        matrix[matrixY][matrixX] = array[i];
    }
 
ok obrigado mas eu ainda nao cheguei tao longe na linguagem C...
estamos agora a entrar em funçoes...penso q envolveste ja ponteiros na tua resolução e nós ainda nao é suposto sabermos isso embora eu ja saiba mais ou menos ou o q são...portanto calculo q nao haja uma maneira mais facil de resolver o meu exercicio mas obrigado na mesma!
 
ok obrigado mas eu ainda nao cheguei tao longe na linguagem C...
estamos agora a entrar em funçoes...penso q envolveste ja ponteiros na tua resolução e nós ainda nao é suposto sabermos isso embora eu ja saiba mais ou menos ou o q são...portanto calculo q nao haja uma maneira mais facil de resolver o meu exercicio mas obrigado na mesma!

não envolve nada ponteiros :P o código é só uma questão de raciocínio ;)

aqueles asteriscos designam "produto" ;)
 
A maneira mais fácil e eficiente é esta:
Código:
#include <memory.h>

//...

int array[MATRIX_SIDE_SIZE * MATRIX_SIDE_SIZE];
int matrix[MATRIX_SIDE_SIZE][MATRIX_SIDE_SIZE];

//...

memcpy(matrix, array, MATRIX_SIDE_SIZE*MATRIX_SIDE_SIZE*sizeof(int));

Mas se não podes usar apontadores e funções, o melhor é ficares com a solução do IComeFromBehind.
 
Back
Topo