1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

copiar vectores para matrizes em C

Discussão em 'Programação' iniciada por fac182, 6 de Dezembro de 2008. (Respostas: 4; Visualizações: 2403)

  1. 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: 8 de Dezembro de 2008
  2. IComeFromBehind

    IComeFromBehind Power Member

    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];
        }
    
     
  3. 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!
     
  4. sportingdan

    sportingdan I'm cool cuz I Fold

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

    aqueles asteriscos designam "produto" ;)
     
  5. The_True_Eue

    The_True_Eue Power Member

    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.
     

Partilhar esta Página