Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Jinguitar

O que ta dando errado nesse codigo?

Recommended Posts

O programa é uma Lista simplesmente encadeada do qual possui as funcoes básicas de inclusao, exclusao consulta e alteracao, daí eu preciso tb de funcao que liste os funcionarios e os dados, a contagem deles, a média de seus salários e o maior dos salários, JÁ FIZ TUDO, só que quando é na hora de mostrar tudo relacionado a salario sai um numero maluco, e na hora de mostrar a quantidade de funcionarios também está assim...

Agradeço a quem tiver paciência de ler e mais ainda quem puder me ajudar!

um abraço!

#include <stdlib.h>
#include <string.h>
#include <iomanip.h>
// Tipo de cada elemento da LSE
struct LSE{
int m;
char n[200];
float s;
struct LSE *prox;
}*pra mim, *ult, *aux;

// Assinaturas das funções

void inclusao(int m, char s[100],float s);
void consulta(int m);
void alteracao(int m);
void exclusao(int m);
void ListarFunc();
int ContarFunc();
float MediaSalarios();
void FuncionarioMaiorSalario();



main()
{
int op=0, m,cont;
float s,med,mai;
char n[200];
pra mim=ult=NULL;
while(op!=9){
m=0;
cout<<"1-Inclusao\n";
cout<<"2-Consulta\n";
cout<<"3-Alteracao\n";
cout<<"4-Exclusao\n";
cout<<"5-Listar Funcionarios\n";
cout<<"6-Contagem de Funcionarios\n";
cout<<"7-Media de Salario\n";
cout<<"8-Maior Salario\n";
cin >> op;fflush(stdin);
if(op==1){
cout<<"Entre com a matricula:";
cin>>m;fflush(stdin);
cout<<"Entre com o nome:";
gets(n); fflush(stdin);
cout<<"Entre com o salario:";
cin>>s;fflush(stdin);
inclusao(m,n,s);
cout<<endl;
}
else if(op==2){
cout<<"Entre com o codigo para a colsulta:\n";
cin>>m; fflush(stdin);
consulta(m);
}
else if(op==3){
cout<<"Entre com o codigo para a Alteracao:\n";
cin>>m; fflush(stdin);
alteracao(m);
}
else if(op==4){
cout<<"Entre com o codigo para a exclusao:\n";
cin>>m; fflush(stdin);
exclusao(m);
}
else if(op==5){
fflush(stdin);
ListarFunc();

}
else if(op==6){
fflush(stdin);
ContarFunc();
cout<<"lista de funcionarios:"<<cont<<endl;
}
else if(op==7){
fflush(stdin);
MediaSalarios();
cout<<"Media de salarios:"<<med<<endl;
}
else if(op==8){
FuncionarioMaiorSalario();
cout<<"maior salario: "<<mai<<endl;
}

}
}

// Função de Inclusão

void inclusao(int m, char n[],float s)
{
aux = (struct LSE *) malloc(sizeof(struct LSE));
if(!pra mim)
pra mim=aux;
else
ult->prox=aux;
ult=aux;
ult->m=m;
strcpy(ult->n,n);
ult->prox=NULL;
cout<<"Inclusao realizada!\n";
}



// Função de Consulta
void consulta(int m)
{
int achei = 0;
aux=pra mim;
while(aux && !achei){
if(aux->m==m){
achei=1;
cout<<"Descricao:"<<aux->n<<"\n";
}
else aux=aux->prox;
}
if(!achei)
cout<<"Codigo inexistente!\n";
}

// Função de Alteração
void alteracao(int m)
{
int achei = 0;
aux=pra mim;
while(aux && !achei){
if(aux->m==m){
achei=1;
cout<<"Descricao atual:"<<aux->n<<"\n";
cout<<"Entre com a nova descricao:";
gets(aux->n);
cout<<"Alteracao realizada!\n";
}
else aux=aux->prox;
}
if(!achei)
cout<<"Codigo inexistente!\n";
}
// Função de Exclusão
void exclusao(int m)
{
int achei = 0;
aux=pra mim;
struct LSE *aux2;
while(aux && !achei){
if(aux->m==m){
if(aux==pra mim){
if(aux==ult)
pra mim=ult=NULL; //CASO 1
else pra mim=pra mim->prox; //CASO 2
}
else if(aux==ult){ //CASO 3
ult=aux2;
ult->prox=NULL;
}
else
aux2->prox = aux->prox; //CASO 4
achei=1;
free(aux);
cout<<"Exclusao realizada!\n";
}
else {
aux2=aux;
aux=aux->prox;
}
}
if(!achei)
cout<<"Codigo inexistente!\n";
}
//Função Listar funcionarios

void ListarFunc()
{
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
cout << "Matricula: "<< aux->m << "\n";
cout << "Nome: "<< aux->n << "\n";
cout << "Salario: "<< aux->s<<fixed << "\n"<<endl;
aux = aux->prox;
}
}

//Função Contagem de funcionarios

int ContarFunc()
{
int m=0;
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
m++;
aux = aux->prox;
}
return(m);
}

//Função Média de salarios

float MediaSalarios()
{
int m=0;
float s=0;
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
m++;
s+=aux->s;
aux = aux->prox;
}
if(m>0)
return(s/m);
else
return(-1);
}

//funcao Maior salario

void FuncionarioMaiorSalario()
{
int primeiro=1;
float maior;
char n[200];
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
if(primeiro) // o mesmo que if(primeiro==1)
{
maior=aux->s;
strcpy(n, aux->n);
primeiro =0;
}
else if(aux->s>maior)
{
maior=aux->s;
strcpy(n, aux->n);
}
aux = aux->prox;
}
cout << "Funcionario de maior salário:"<<n;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Você declarou med e mai:

float s,med,mai;

Mais em nenhum momento atribui valores pra eles, está simplesmente imprimindo essas variaveis.

As funções deviam retornar valores, e você receber esses valores na 'med' e 'mai'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente como o WhiteDog disse, você não atribuiu valores as variáveis. Então você acaba as imprimindo "sujas" por valores alocados naquele espaço de memória destinado a variável.

Diferente do java, o c++ não limpa automaticamente as variáveis declaradas. Então por isso acaba saindo esses valores "malucos".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×