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

[Ajuda] Matrizes usando o malloc

Discussão em 'Programação' iniciada por GBarata, 11 de Janeiro de 2013. (Respostas: 2; Visualizações: 701)

  1. Boas, o programa é o seguinte:

    Cálculo da matriz transposta de uma matriz de qualquer dimensão.
    Eis o código que tenho:

    char FicheiroNome[80];
    char FicheiroDrive;
    char drive[80];
    FILE * determinante;
    int opcao,opcao1,p,LinhasTransposta,ColunasTransposta;
    float DetMat_a[2][2],DetMat_c,a,b,c,d,det1,det2,test[4],TranMat_a[30][30],TranMat_b[30][30];
    {
    system("cls");
    ImprimirCabecalho(h, FOREGROUND_GREEN | FOREGROUND_BLUE |FOREGROUND_INTENSITY | BACKGROUND_RED);
    ImprimirTextoCor(h,0,"");
    ResetCorTextConsola(h);
    printf("A Matriz que pretende obter a transposta tem quantas linhas?\n");
    scanf_s(" %d",&LinhasTransposta);
    printf("\nA Matriz que pretende obter a transposta tem quantas Colunas?\n");
    scanf_s(" %d",&ColunasTransposta);
    for (int lin=0;lin<LinhasTransposta;lin++)
    {
    for(int col=0;col<ColunasTransposta;col++)
    {
    printf("\nQual o elemento [%d][%d] da matriz? ",lin+1,col+1);
    scanf_s("%f",&TranMat_a[lin][col]);
    }
    }
    for (int lin=0;lin<10;lin++)
    {
    for(int col=0;col<10;col++)
    {
    TranMat_b[lin][col]=TranMat_a[col][lin];
    }
    printf("\n");
    }
    system("cls");
    printf("A Transposta da Matriz:\n");
    for (int lin=0;lin<LinhasTransposta;lin++)
    {
    for(int col=0;col<ColunasTransposta;col++)
    {
    printf("%4.2f\t",TranMat_a[lin][col]);
    }
    printf("\n");
    }
    printf("eh:\n");
    for (int lin=0;lin<ColunasTransposta;lin++)
    {
    for(int col=0;col<LinhasTransposta;col++)
    {
    printf("%4.2f\t",TranMat_b[lin][col]);
    }
    printf("\n");
    }
    printf("\n\n");
    system("pause");
    system("cls");
    }

    O problema é que só consigo efectuar a transposta definindo um valor limite de entrada mas é pedido para usar o malloc.
    Peço 5/10 minutos do vosso tempo pois fiz imensas pesquisas antes de fazer este post e não tive êxito ate agora.
    Muito obrigado e cumprimentos
     
  2. Depois de muita pesquisa consegui efectuar o programa usando malloc.
    Peço apenas uma pequena verificação, uma vez que quando introduzo o número de colunas maior que o número de linhas o programa fecha e dá um erro. Eis o programa:
    void transposta()
    {
    printf("Pretende apresentar a matriz por:\n(1)Teclado\n(2)Ficheiro\n");
    scanf("%d",&opcao1);
    switch(opcao1)
    {
    case 1:
    {
    int m,n;
    float **trs;
    float **trsfinal;


    printf("Linha?");
    scanf("%d",&m);
    printf("Coluna?");
    scanf("%d",&n);
    trs=(float**)malloc(m*sizeof(float*));
    for (int i=1; i<=m; i++)
    trs=(float*) malloc (n*sizeof(float));
    for (int linha=1; linha<=m; linha++)
    trsfinal=(float**)malloc(m*sizeof(float*));
    for (int i=1; i<=m; i++)
    trsfinal=(float*) malloc (n*sizeof(float));
    for (int linha=1; linha<=m; linha++)
    {
    for (int coluna=1; coluna<=n; coluna++)
    {
    printf (" Qual o valor de: [%d][%d]", linha, coluna);
    scanf_s (" %f", &trs[linha][coluna]);
    }
    printf ("\n");
    }
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=m;j++)
    {
    trsfinal[j]=trs[j];
    printf (" %f\t ", trsfinal[j]);
    }
    printf ("\n");
    }
    }break;
    }
    system("pause");


    }

    Muito obrigado, Cumprimentos.
     
  3. Resolvido, podem fechar.
     

Partilhar esta Página