Ir ao conteúdo
  • Cadastre-se

Matriz com ponteiros 3


rs40

Posts recomendados

Estou precisando de ajuda neste programa

Ele deve calcular o produto da diagonal principal de uma matriz qualquer

Eu estou fazendo a seguinte fórmula para calcular o produto da diagonal principal ma matriz.


//verifica a diagonal secundaria
if (j==n-i)
produto_diagonal_secundaria = produto_diagonal_secundaria * mat[i][j];

No entanto o programa só me mostra como resultado o valor de n e não mostra a multiplicação da diagonal principal como deveria.

Segue o código


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

float produto_diagonal_secundaria( float **, int ); /*protótipo da função*/

int main(void)
{

int i = 0;
int j = 0;
float **mat; /** Um ponteiro para x e outro para y **/
int n = 0;

printf( "\nDigite o tamanho da matriz: " );
scanf( "%d", &n );

mat = malloc( sizeof(float *) * n );

for( i = 0; i < n; i++ )
mat[i] = malloc( sizeof(float) * n );

printf( "\n\nO produto dos elementos da diagonal principal da matriz é: %f ", produto_diagonal_secundaria(mat, n) );

/** Liberar memoria apenas depois de usar a matriz **/
for( i = 0; i < n; i++ )
free( mat[i] );

free( mat );

return 0;
}

/*Programa principal*/
float produto_diagonal_secundaria( float **mat, int n )
{

float produto_diagonal_secundaria = 1; //inicializa o produto da diagonal principal com 1
int i, j;

//processar matriz
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
{
printf( "Digite os valores da matriz: " );
scanf( "%f", &mat[i][j] );

//verifica a diagonal secundaria
if (j==n-i)
produto_diagonal_secundaria = produto_diagonal_secundaria * mat[i][j];

}
}
//monta a matriz
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
{
printf( "%0.f ", mat[i][j] );
}
printf( "\n" );
}

printf("O valor da multiplicacao da diagonal secundaria é %0.f", produto_diagonal_secundaria);

getche();
// return 0; /** Informar qual valor sera retornado **/
}

Link para o comentário
Compartilhar em outros sites

Não entendi direito se você quer calcular a diagonal principal ou a secundária.

Se for a principal, basta trocar a comparação para:


if( i == j )
produto_diagonal_principal = produto_diagonal_principal * mat[i][j];

Se for a secundária, dá pra fazer assim:


for( i = 1; i < n; i++ ) /** Comeca na linha de baixo e vai até a ultima **/
{
for( j = 0; j < n; j++ )
{
if( i-1 == j )
produto_diagonal_secundaria = produto_diagonal_secundaria * mat[i][j];
}
}

Link para o comentário
Compartilhar em outros sites

Eu quero calcular a diagonal secundária

Eu fiz como você sugeriu para calcular a diagonal secundária

no entanto o programa não calcula o valor correto da diagonal secundária

Eu coloquei o código que você sugeriu assim:


//processar matriz
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
{
printf( "Digite os valores da matriz: " );
scanf( "%f", &mat[i][j] );
}
}

//verifica a diagonal secundaria
for( i = 1; i < n; i++ ) /** Comeca na linha de baixo e vai até a ultima **/
{
for( j = 0; j < n; j++ )
{
if( i-1 == j )
produto_diagonal_secundaria = produto_diagonal_secundaria * mat[i][j];
}
}

E fiz os seguintes testes

Entre com o tamanho da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

22

22

O valor da multiplicação da diagonal secundaria é: 2

Teste 2

Entre com o tamanho da matriz: 3

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

Digite os valores da matriz: 2

O valor da multiplicação da diagonal secundaria é: 4

O que fazer para o programa calcular o valor correto da diagonal secundária?

Link para o comentário
Compartilhar em outros sites

Achei na wikipedia sobre calculo da diagonal secundária:

http://pt.wikipedia.org/wiki/Diagonal_de_uma_matriz

Baseado no artigo, os valores a serem calculados são:


2 2 [COLOR=Red]2[/COLOR]
2 [COLOR=Red]2[/COLOR] 2
[COLOR=Red]2[/COLOR] 2 2

Para resolver nesse sentido, fiz o seguinte código:



for( i = 0; i < n; i++ )
{
for ( j = 0; j < n; j++ ) /** Carrega os dados **/
{
printf( "Digite os valores da matriz: " );
scanf( "%f", &mat[i][j] );
}

produto_diagonal_secundaria = produto_diagonal_secundaria * mat[i][(n-1) - i]; /** Calcula diagonal secundária **/
}

Acho que vai te ajudar.

Link para o comentário
Compartilhar em outros sites

Acho que consegui resolver o problema


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

float produto_diagonal_secundaria( float **, int ); /*protótipo da função*/

int main(void)
{

int i = 0;
int j = 0;
float **mat; /** Um ponteiro para x e outro para y **/
int n = 0;

printf( "\nDigite o tamanho da matriz: " );
scanf( "%d", &n );

mat = malloc( sizeof(float *) * n );

for( i = 0; i < n; i++ )
mat[i] = malloc( sizeof(float) * n );

printf( "\n\nO produto dos elementos da diagonal principal da matriz é: %f ", produto_diagonal_secundaria(mat, n) );

/** Liberar memoria apenas depois de usar a matriz **/
for( i = 0; i < n; i++ )
free( mat[i] );

free( mat );

return 0;
}

/*Programa principal*/
float produto_diagonal_secundaria( float **mat, int n )
{

float produto_diagonal_secundaria = 1; //inicializa o produto da diagonal principal com 1
int i, j;

//processar matriz
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
{
printf( "Digite os valores da matriz: " );
scanf( "%f", &mat[i][j] );
}
}


int s = 0, p = n-1;
for(; s<n; s++, p--)
produto_diagonal_secundaria *= mat[s][p];

//monta a matriz
for( i = 0; i < n; i++ )
{
for( j = 0; j < n; j++ )
{
printf( "%0.f ", mat[i][j] );
}
printf( "\n" );
}

printf("O valor da multiplicacao da diagonal secundaria é %0.f", produto_diagonal_secundaria);

getche();
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!