[Ajuda] Matrizes usando o malloc

GBarata

Membro
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
 
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.
 
Back
Topo