Ir para conteúdo
Fórum Script Brasil
  • 0

Média de elementos de uma matriz


Henrique0352

Pergunta

Olá!

Estou com um problema no cálculo da média dos elementos de uma matriz qualquer, por meio de uma função. O código que segue faz o seguinte, na função principal: lê, na primeira linha de um arquivo externo de texto, dois valores inteiros referentes à quantidade de linhas e de colunas de uma matriz, criando a matriz logo em seguida. No mais, ele lê os elementos da matriz (localizados no mesmo arquivo, logo abaixo da linha que contém o tamanho da matriz) e os mostra, a fim de testar a leitura. O arquivo de texto seria algo assim, por exemplo:

2 2 => linhas e colunas
1 2 => elementos
3 4 => elementos
Bom, a matriz é passada como parâmetro para a função "media_matriz", mas ela não retorna o valor correto. Creio que o erro esteja na variável soma. (lembrando que a função "media_matriz" só aceita matrizes quadradas, e o primeiro parâmetro "n" é justamente o número de linhas e de colunas).
Enfim, eu costumava fazer esse tipo de exercício em linguagens como o C#, e em IDEs como o Visual Studio, então me parece que sem os auxílios de conversão de variáveis, concatenação e gerenciamento de memória, fiquei perdido :P.
Agradeço desde já!
float media_matriz(int n, float mat[][100]) {
    // variaveis
    int i, j;
    float soma = 0.0, media = 0.0;

    // processamento
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            soma += mat[i][j];

    media = soma/((float)n*(float)n);

    // saida
    return(media);
}

int main(void) {
    // variaveis
    FILE* arquivo = fopen("texto.txt", "r");
    int j, i, l, c;

    // entrada
    fscanf(arquivo, "%i %i", &l, &c);
    float m[l][c];

    // processamento
    for(i = 0; i < l; i++)
        for(j = 0; j < c; j++)
            fscanf(arquivo, "%f", &m[i][j]);

    // saida
    for(i = 0; i < l; i++) {
        for(j = 0; j < c; j++)
            printf("M[%d, %d]: %f ", i, j, m[i][j]);
        printf("\n");
    }

    printf("media: %f", media_matriz(l,m));

    fclose(arquivo);
    return(0);
}
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

basta passar 2 parametros,e tambem passar a matriz por referencia;

float media_matriz(int x,int y, float mat[][100]) {
// variaveis
int i, j;
float soma = 0.0, media = 0.0;

// processamento
for(i = 0; i < x; i++)
for(j = 0; j < y; j++)
soma += mat[j];

media = soma/((float)n*(float)n);

// saida
return(media);
}

alem disso recomendo você usar o malloc

//parte d main

// variaveis
FILE* arquivo = fopen("texto.txt", "r");
int j, i, l, c;
float *matriz;

// entrada
fscanf(arquivo, "%i %i", &l, &c);
matriz= malloc((l*c)*sizeof(float));

pois alocação dinanamica em c exige que você use ponteiros;
se não compilar e so avisar
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...