Ir ao conteúdo

Posts recomendados

Postado

Gente, até ontem o meu programa estava funcionando que era uma beleza!

mas eu fiz algo nele por questões estéticas e não tá funcionando que nem antes, eu tenho que mostrar para o meu professor de manhã... 

já fiz tudo que pede no trabalho no papel(análise das funções, medição de tempo....)

mas gostaria de tê-lo como antes, desconfio que o erro seja algo que eu tentei fazer na função de alocação dinâmica para ela receber uma só variavel:

enfim, se puderem consertar para mim, seria de bom agrado!


float **aloc_matriz(int linhas , int colunas)
{
    int i;
    float **Matriz;
    Matriz = (float **)malloc(linhas*sizeof(float));
    for (i=0; i<linhas; i++)
    {
        Matriz[i] = (float *)malloc(colunas*sizeof(float));
    }
    return Matriz;
}

void desaloc_matriz(float **Matriz , int linhas)
{
    int i;
    for(i=0; i<linhas; i++)
    {
        free(Matriz[i]);
    }
}


int identidade(int n, float **matriz)
{
    int i, j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
            if(i==j)
            {
                if(matriz[i][j] != 1)
                {
                    return 0;
                }
            }
            else
            {
                if(matriz[i][j] != 0)
                {

                    return 0;
                }
            }
        }
    }

    return 1;
}

int ortogonal(int n, float **matriz)
{
    int i, j, k;
    float **identidade = aloc_matriz(n,n);;
    float **transposta = aloc_matriz(n,n), **ortogonal = aloc_matriz(n,n);

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            transposta[i][j]=matriz[j][i];

            if(i==j)
            {
                identidade[i][j]=1;
            }
            else
            {
                identidade[i][j]=0;
            }
        }
    }
    desaloc_matriz(identidade, n);
    desaloc_matriz(transposta, n);

    for (i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            for(k=0; k<n; k++)
            {
                ortogonal[i][j] += matriz[i][k]*transposta[k][j];

                if(ortogonal[i][j] != identidade[i][j])
                {
                return 0;
                }
            }
        }
    }

    return 1;

}

int traco(int n, float **matriz)
{
    int i, j;
    float soma = 0;

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(i==j)
            {
                soma += matriz[i][j];
            }
        }
    }

    if(soma>0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    int n, i, j;
    int I, II, III;
    float **matriz;
    printf("Digite o tamanho da matriz: ");
    scanf("%d", &n);
    matriz = aloc_matriz(n,n);

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("Digite o elemento de Matriz[%d][%d]: ",i+1, j+1);
            scanf("%f", &matriz[i][j]);
        }
    }

    desaloc_matriz(matriz , n);


    printf("\n\nSua matriz eh: ");
    for(i=0; i<n; i++)
    {
       printf("\n");
        for(j=0; j<n; j++)
        {
            printf("%f\t", matriz[i][j]);
        }

    }


    I = identidade(n, matriz);
    if (I == 1)
    {
        printf("\nA matriz eh a identidade!\n\n");
    }
    else
    {
        printf("\nA matriz nao eh identidade!\n\n");
    }

    II = ortogonal(n, matriz);
    if (II == 1)
    {
        printf("\nA matriz eh a ortogonal!\n\n");
    }
    else
    {
        printf("A matriz nao eh ortogonal!\n\n");
    }

    III = traco(n, matriz);
    if(III==1)
    {
        printf("O traco eh positivo!\n\n");
    }
    else
    {
        printf("O traco nao eh positivo!\n\n");
    }
}

 

Postado

É necessário enviar a matriz para alocar/retornar, e use:

float **aloc_matriz(float **Matriz, int linhas , int colunas){
return Matriz;
}

na alocação:

Matriz = (float **)malloc(linhas*sizeof(float*));

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...