Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
To fazendo um trabalho da faculdade, mas não ta dando certo, complica mas não funciona, tenho que ordenar a lista por ordem crescente do salario dos funcionários. Alguém sabe me dizer o tem de errado na função Funcionario insere(Funcionario lista, Funcionario *novo) ?
Segue o código que fiz:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Funcionario {
int codigo;
char nome[35];
float salario;
struct Funcionario *prox;
} Funcionario;
Funcionario cria(int codigo, char nome[35], float salario, Funcionario lista){
Funcionario *novo;
Funcionario *temp = lista;
novo = (Funcionario*) malloc(sizeof(Funcionario));
novo->codigo = codigo;
strcpy(novo->nome, nome);
novo->salario = salario;
while(lista!= NULL){
if(novo->codigo == lista->codigo){
printf("Codigo ja existente!\n");
printf("Digite o codigo novamente: ");
scanf("%d",&novo->codigo);
lista = temp;
}else{
lista = lista->prox;
}
}
novo->prox = NULL;
printf("Funcionario cadastrado com sucesso!\n");
system("pause");
return novo;
}
Funcionario insere(Funcionario lista, Funcionario *novo){
Funcionario * ant = NULL; // ponteiro para elemento anterior
Funcionario * aux = lista; // ponteiro para percorrer a lista
if (lista == NULL){
float maior = lista->salario;
return novo;
}else{
float maior = lista->salario;
while(lista != NULL && lista->salario > maior){ // procura posicao para inserção
ant = lista;
aux = aux->prox;
}
novo = (Funcionario*) malloc(sizeof(Funcionario)); // cria novo elemento
novo->salario = maior;
if(ant == NULL){ //encadea elemento
novo->prox = lista;
lista = novo;
}else{// insere elemento na lista
novo->prox = ant->prox;
ant->prox = novo;
}
return lista;
}
}
Funcionario imprime(Funcionario lista){
if(lista == NULL){
printf("Lista Vazia! Cadastre funcionarios.\n");
}
while(lista != NULL){
printf("\n-----------------------------\n");
printf("Codigo: %d \n", lista->codigo);
printf("Nome: %s \n", lista->nome);
printf("Salario: %2.f\n", lista->salario);
lista = lista->prox;
}
system("pause");
}
Funcionario remove( Funcionario lista, int codigo){
Funcionario * aux = lista;
Funcionario * remove = NULL;
int cont = 1;
if (lista == NULL) {
printf("Lista vazia!\n");
return NULL;
}
if(aux->codigo == codigo){
cont = 0;
}else{
if (aux->prox->codigo == codigo){
cont++;
}else{
if(lista != NULL){
while(aux->prox!= NULL && aux->prox->codigo != codigo){
aux = aux->prox;
cont++;
}
if(aux->prox == NULL){
return lista;
}
}
}
}
if (cont == 0){
if (aux->prox != NULL){
lista = aux->prox;
}else{
lista = NULL;
}
free(aux);
}else{
remove = aux->prox;
aux->prox = remove->prox;
free(remove);
printf("Funcionario excluido com sucesso!\n");
system("pause");
}
return lista;
}
float media (Funcionario *lista){
float soma = 0, media;
int cont = 0;
while(lista != NULL){
soma += lista->salario;
lista = lista->prox;
cont++;
}
media = soma/cont;
printf("Media = %2.f\n", media);
system("pause");
}
Funcionario maior_salario (Funcionario lista){
Funcionario *novo = lista;
float maior = lista->salario;
while(lista != NULL){
if(lista->salario > maior){
maior = lista->salario;
novo->codigo = lista->codigo;
strcpy(novo->nome,lista->nome);
}
lista = lista->prox;
}
printf("Codigo: %d\n", novo->codigo);
printf("Nome: %s \n", novo->nome);
printf("Salario: %2.f\n", maior);
system("pause");
}
Funcionario menor_salario (Funcionario lista){
Funcionario *novo = lista;
float menor = lista->salario;
while(lista != NULL){
if(lista->salario < menor){
menor = lista->salario;
novo->codigo = lista->codigo;
strcpy(novo->nome,lista->nome);
}
lista = lista->prox;
}
printf("Codigo: %d\n", novo->codigo);
printf("Nome: %s \n", novo->nome);
printf("Salario: %2.f\n", menor);
system("pause");
}
main(){
int menu, codigo;
float salario;
char nome[35];
Funcionario *lista = NULL;
Funcionario *dados = NULL;
do{
printf("Cadastro Funcionarios - Trabalho Grau A\n");
printf("\n-----------------------------\n");
printf("1 - Cadastrar Funcionario\n");
printf("2 - Excluir Funcionario \n");
printf("3 - Mostar Funcionarios cadastrados\n");
printf("4 - Media de salario dos Funcionarios\n");
printf("5 - Funcionario com maior salario\n");
printf("6 - Funcionaro com menor salario\n");
printf("0 - Sair \n");
printf("\n-----------------------------\n");
printf("Escolha uma opcao:");
scanf("%d", &menu);
switch(menu){
case 1:
system("cls");
printf("Cadastrar Funcionario:\n");
printf("\n-----------------------------\n");
printf("Codigo:\n");
scanf("%d", &codigo);
printf("Nome: \n");
scanf("%s", &nome);
printf("Salario:\n");
scanf("%f", &salario);
dados = cria(codigo,nome, salario, lista);
lista = insere(lista, dados);
break;
case 2:
system("cls");
printf("Excluir Funcionario \n");
printf("\n-----------------------------\n");
imprime(lista);
printf("Digite o codigo do funcionario:");
scanf("%d", &codigo);
lista = remove (lista, codigo);
break;
case 3:
system("cls");
printf("Mostar Funcionarios cadastrados\n");
imprime(lista);
break;
case 4:
system("cls");
printf("Media de salario dos Funcionarios\n");
printf("\n-----------------------------\n");
media(lista);
break;
case 5:
system("cls");
printf("Funcionario com maior salario\n");
printf("\n-----------------------------\n");
maior_salario(lista);
break;
case 6:
system("cls");
printf("Funcionaro com menor salario\n");
printf("\n-----------------------------\n");
menor_salario(lista);
break;
}
system("cls");
}while(menu !=0);
system("pause");
}Carregando comentários...