Ir ao conteúdo
  • Cadastre-se

Erro na impressao do algoritmo matriz


Flavia234

Posts recomendados

Oi fiz esse algoritmo deu muito trabalho rsrs , esta executando tudo que foi pedido ..maaass ainda no final esta apresentando um erro, ele roda e na hora de dar o ENTER pra sair do programa ele apresenta um erro.. por favor alguem poderia analisar e depurar esse erro? fico muito agradecida^_^


#include <conio.h>
#include<iostream>
using namespace std;

const int t = 4;

void funcaoFunLer(int [][t], int); //funcao para carregar a matriz
int FunMaior(int [][t],int,int); //funcao para achar o maior numero na matriz
float funMedia( int [][t],int,float*); //funcao para fazer a media dos numeros lidos

int main(){

int mat[][t] = {0};
int maior;
float media;

funcaoFunLer(mat, t);
maior = FunMaior(mat,t,maior);
funMedia( mat,t,&media);

cout <<"o maior valor da matriz \202 :"<<maior<<endl;
cout <<"A media dos valores lidos \202 :"<<media<<endl;

system("pause");
}


void funcaoFunLer(int a[][t], int t){

for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{
cout<<"Informe o ["<<i+1<<"]["<<j+1<<"] :"<<endl;
cin>>a[i][j];
}
}
}

int FunMaior(int a[][t],int t,int m)
{
m = a[0][0];
for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{

if(m < a[i][j])
m = a[i][j];


}
}
return m;
}

float funMedia( int a[][t],int t,float*media)
{

int soma=0;
for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{
soma = soma + a[i][j];
*media = soma/(t*t);
}
}
}

Link para o comentário
Compartilhar em outros sites

nao precisa, quando eu defino ela a[][t] o programa vai elevar 4 ao quadrado (t)² =16 e meu t = 4 (tamanho 4*4= 16 ) vai dividir a matriz entendendo que é uma matriz quadrada, legal né? , mas da na msma , poderia simplesmente fazer assim a[4][4]; ... é so uma boa pratica de programaçao como diz meu professor...

Link para o comentário
Compartilhar em outros sites

Porque você definiu funMedia como retornando float se ela não retorna nada?

...

Aqui nem compilou por causa disso.

==============================

EDIT:

Aproveitando o post..

Eu alterei a entrada da função de ler para receber um ponteiro duplo e o compilador me diz que não dá para converter "int [1][4]" em "int **"

Segundo você o compilador entende que [][4] = [4][4]... não é o que parece =(

Você joga "maior" como parâmetro da função e sequer usa... para que isso...

Enfim, assim funcionou:

Da uma olhada:


#include<iostream>
using namespace std;

const int t = 4;

void funcaoFunLer(int [][t], int); //funcao para carregar a matriz
int FunMaior(int [][t],int); //funcao para achar o maior numero na matriz
void funMedia( int [][t],int,float*); //funcao para fazer a media dos numeros lidos

int main(){

int mat[t][t];
int maior;
float media;

funcaoFunLer(mat, t);
maior = FunMaior(mat,t);
funMedia( mat,t,&media);

cout <<"o maior valor da matriz \202 :"<<maior<<endl;
cout <<"A media dos valores lidos \202 :"<<media<<endl;

printf("FIM!\n");
getchar();
return 0;
}


void funcaoFunLer(int a[][t], int t)
{

for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{
cout<<"Informe o ["<<i+1<<"]["<<j+1<<"] :"<<endl;
cin>>a[i][j];
getchar();
}
}
}

int FunMaior(int a[][t],int t)
{
int m;

m = a[0][0];
for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{
if(m < a[i][j])
{
m = a[i][j];
}
}
}

return m;
}

void funMedia(int a[][t],int t,float *media)
{
int soma=0;

for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++)
{
soma = soma + a[i][j];
*media = soma/(t*t);
}
}
}
#include <conio.h>

=====================================

Link para o comentário
Compartilhar em outros sites

Porque você definiu funMedia como retornando float se ela não retorna nada?

...

Aqui nem compilou por causa disso.

==============================

EDIT:

Aproveitando o post..

Eu alterei a entrada da função de ler para receber um ponteiro duplo e o compilador me diz que não dá para converter "int [1][4]" em "int **"

Segundo você o compilador entende que [][4] = [4][4]... não é o que parece =(

Você joga "maior" como parâmetro da função e sequer usa... para que isso...

funMedia como retornando float , a variavel *media esta como referência, então ela nao precisa de um return ja que ja esta sendo retornado através da referencia em sua funçao, e é float porque é media , eu estou dividindo ela com a soma dos valores na matriz então preciso dos possiveis numeros fracionarios, você alterou a matriz [4][4], rsr assim nao vai funcionar, compila meu programa pra você ver da minha forma funcionou [][t] aqui usei uma variavel e nao um numero inteiro

maior = FunMaior(mat,t,maior);porque esse é um retorno de valor , preciso de uma variavel simples pra mostrar a comparaçao do maior valor na matriz tambem poderia ser feito dessa forma cout << FunMaior(mat,t,maior)<<" "<<endl;

aheeee.. deu certo mesmo, comparei a sua com a minha aqui , ali onde voce fez int mat[t][t] = {0}; eu tinha esquecido de por um dos tamanhos ,assim int mat[?][t] = {0};.. dai dava o erro de fechamento do programa , que bom trocar informaçoes com você me ajudou muito na proxima vez se eu errar ja vou saber onde olhar .. muito obrigada viu =D

funMedia como retornando float , a variavel *media esta como referência, então ela nao precisa de um return ja que ja esta sendo retornado através da referencia em sua funçao, e é float porque é media , eu estou dividindo ela com a soma dos valores na matriz então preciso dos possiveis numeros fracionarios, você alterou a matriz [4][4], rsr assim nao vai funcionar, compila meu programa pra você ver da minha forma funcionou [][t] aqui usei uma variavel e nao um numero inteiro

maior = FunMaior(mat,t,maior);porque esse é um retorno de valor , preciso de uma variavel simples pra mostrar a comparaçao do maior valor na matriz tambem poderia ser feito dessa forma cout << FunMaior(mat,t,maior)<<" "<<endl;

ops erro aqui nao estava retornando nada mesmo derr e coloquei void(_(.. ai ai aiii kkkkkk :lol:.. arrumei agora rsrs

Link para o comentário
Compartilhar em outros sites

funMedia como retornando float , a variavel *media esta como referência, então ela nao precisa de um return ja que ja esta sendo retornado através da referencia em sua funçao, e é float porque é media , eu estou dividindo ela com a soma dos valores na matriz então preciso dos possiveis numeros fracionarios, você alterou a matriz [4][4], rsr assim nao vai funcionar, compila meu programa pra você ver da minha forma funcionou [][t] aqui usei uma variavel e nao um numero inteiro

maior = FunMaior(mat,t,maior);porque esse é um retorno de valor , preciso de uma variavel simples pra mostrar a comparaçao do maior valor na matriz tambem poderia ser feito dessa forma cout << FunMaior(mat,t,maior)<<endl;

Não se ofenda, mas acho que você precisa estudar mais o que você está fazendo...

Primeiro:

O fato de eu alterar [][t] para [t][t] em nada impede o funcionamento do programa...

Segundo:

RETORNO DE FUNÇÃO difere em muito de RETORNO POR PONTEIRO

Retorno de função serve para isso: variavel=funcao(entrada1,entrada2,...);

Se você vai retornar sempre por ponteiro, a função deve ser void...

Sem falar que o tipo de retorno da função nada tem a ver com os ponteiros de entrada...

É só você imaginar uma função que altere uma string, um float e um int por ponteiro, você ia declarar a função assim:

char float int funcao(char *a,float *b,int *c); ??? não dá né?

Terceiro:

Olha bem o que você está fazendo:


[B]int maior;[/B]
float media;

funcaoFunLer(mat, t);
maior = FunMaior(mat,t,[B]maior[/B]);

Quando você chama a função, a variavel maior contem LIXO DE MEMÓRIA e você passa isso para a função....

Só aí já dá pra ver que tá errado, agora veja o início da referida função:

int FunMaior(int a[][t],int t,[B]int m[/B])
{
[B]m = a[0][0];[/B]

A PRIMEIRA coisa que você faz é DESCARTAR A ENTRADA e atribuir um outro valor para m...

Porque diabos m é uma entrada da função se a primeira coisa que você faz com ele é alterar o valor???

Tem que pensar direito no que se está fazendo...

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!