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!
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!
não envolve nada ponteiros 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.