Estou tentando fazer um trabalho e travei numa sooicitação que é achar o menor e o maior elemento, colocando eles no inicio(menor) e no final(maior).
Fiz alguma coisa mas não funciona, acho que estou tento a lógica errada.
Olhem como esta ficando o que já fiz, mas na parte de troca_nodo é onde estou sofrendo. : )
Por favor, me ajudem .
/*
ENUNCIADO
SegundoTrabalho
Com base nos conceitos apresentados até o presente momento, construa um programa que faça um controle de dados de um aluno contendo a seguinte características:
•código do aluno
•nome do aluno
•G1
•G2.
O sistema deverá possuir um menu contendo as seguintes opções:
1.Cadastra novo aluno
2.Altera aluno de código...
3.Apaga aluno de código...
4.Lista os dados do aluno de código...
5.Lista os dados de todos os alunos
6.Sair
Após chamar selecionar uma das opções, o sistema deverá executar funções referentes a opção selecionada. Para realização deste sistema você deverá utilizar uma lista DUPLAMENTE encadeada com header.
O resultado da atividade deverá ser postado no moodle (no link abaixo) até o dia 23 de setembro as 18:00h.
Pergunta
Pajé
Boa noite,
Estou tentando fazer um trabalho e travei numa sooicitação que é achar o menor e o maior elemento, colocando eles no inicio(menor) e no final(maior).
Fiz alguma coisa mas não funciona, acho que estou tento a lógica errada.
Olhem como esta ficando o que já fiz, mas na parte de troca_nodo é onde estou sofrendo. : )
Por favor, me ajudem .
/*
ENUNCIADO
SegundoTrabalho
Com base nos conceitos apresentados até o presente momento, construa um programa que faça um controle de dados de um aluno contendo a seguinte características:
•código do aluno
•nome do aluno
•G1
•G2.
O sistema deverá possuir um menu contendo as seguintes opções:
1.Cadastra novo aluno
2.Altera aluno de código...
3.Apaga aluno de código...
4.Lista os dados do aluno de código...
5.Lista os dados de todos os alunos
6.Sair
Após chamar selecionar uma das opções, o sistema deverá executar funções referentes a opção selecionada. Para realização deste sistema você deverá utilizar uma lista DUPLAMENTE encadeada com header.
O resultado da atividade deverá ser postado no moodle (no link abaixo) até o dia 23 de setembro as 18:00h.
*/
-----------------------------------------------------------
MEU PROGRAMA
#include <stdio.h> #include <stdlib.h> #include <string.h> struct nodo{ struct nodo *anterior; int codigo; char nome[30]; float idade; float salario; struct nodo *proximo; }; struct header{ struct nodo *inicio; int qtde; struct nodo *fim; }; //--------------------------------------------------------------------------------------------- void nova_lista(struct header **lista,int *status){ struct header *l; l=NULL; l=(struct header *)malloc(sizeof(struct header)); if (l==NULL){ *status=0; }else{ l->inicio=NULL; l->fim=NULL; l->qtde=0; *status=1; } *lista=l; } //---------------------------------------------------------------------------------------------- void insere_direita(struct header *lista,int codigo,char nome[],float idade,float salario, int *status){ struct nodo *p; *status=0; if (lista!=NULL){ p=(struct nodo *) malloc(sizeof(struct nodo)); if (p!=NULL){ p->codigo=codigo; strcpy(p->nome,nome); p->idade=idade; p->salario=salario; p->anterior=lista->fim; p->proximo=NULL; if (lista->inicio==NULL){ lista->inicio=p; }else{ (lista->fim)->proximo=p; } lista->fim=p; lista->qtde=lista->qtde+1; *status=1; } } } //----------------------------------------------------------------------------------------------- void lista_tudo(struct header *lista){ struct nodo *p; printf("\n\n=========Listagem de dados==========\n\n"); p=lista->inicio; while (p!=NULL){ printf("====================\n"); printf("Código = %d \n",p->codigo); printf("Nome = %s \n",p->nome); printf("Idade = %.2f \n",p->idade); printf("Salario = %.2f \n\n",p->salario); p=p->proximo; } printf("\n==================================\n\n"); } //----------------------------------------------------------------------------------------------- void lista_intervalo(struct header *lista,int salario){ struct nodo *p; printf("\n\n=========Listagem de dados==========\n\n"); p=lista->inicio; while (p!=NULL){ if (p->salario>1000){ printf("====================\n"); printf("Código = %d \n",p->codigo); printf("Nome = %s \n",p->nome); printf("Idade = %.2f \n",p->idade); printf("Salario = %.2f \n\n",p->salario); } if (p->salario<1000 && p->salario>2000) { printf("====================\n"); printf("Código = %d \n",p->codigo); printf("Nome = %s \n",p->nome); printf("Idade = %.2f \n",p->idade); printf("Salario = %.2f \n\n",p->salario); } if (p->salario>2000) { printf("====================\n"); printf("Código = %d \n",p->codigo); printf("Nome = %s \n",p->nome); printf("Idade = %.2f \n",p->idade); printf("Salario = %.2f \n\n",p->salario); } p=p->proximo; } printf("\n==================================\n\n"); } //-------------------------------------------------------------------------------------------------- [b]void troca_nodo(struct header *lista){ struct nodo *aux,*m; int maior,menor; aux=*inicio; m=*inicio; maior=aux->idade; menor=m->idade; if (aux!=NULL){ while (aux->proximo!=NULL){ if (aux->idade > maior){ *maior=aux; maior=aux->idade; } aux=aux->proximo; } } if (m!=NULL) { while (m->proximo!=NULL){ if (m->idade < menor) { *menor=m; menor=m->idade; } } m=m->proximo } m->proximo=lista->inicio; aux->proximo=fim->inicio; }[/b]//--------------------------------------------------------------------------------------------------------------- main(){ struct header *lista; int status,valor,op=0; int codigo; char nome[30]; float idade,salario; nova_lista(&lista,&status); while (op!=5){ printf("\n\n======Informe a opção desejada====== Registros %d \n \n",lista->qtde); printf("1.Cadastra novo nome \n"); printf("2.Troca de lugar os nodos...\n"); printf("3.Lista o intervalo de salarios...\n"); printf("4.Lista os dados de todos os nomes\n"); printf("5.Sair\n"); scanf("%d",&op); switch (op){ case 1: printf("\n\n Cadastro =============== "); printf("Informe código:"); scanf("%d",&codigo); fflush(stdin); printf("Informe nome:"); gets(nome); fflush(stdin); printf("Informe Idade:"); scanf("%f",&idade); fflush(stdin); printf("Informe Salario:"); scanf("%f",&salario); fflush(stdin); insere_direita(lista,codigo,nome,idade,salario,&status); break; case 2: printf("Trocando os nodos de lugar:"); troca_nodo(lista,codigo); break; case 3: printf("Informe o salario a pesquisar:"); scanf("%f",&salario); fflush(stdin); lista_intervalo(lista,salario); break; case 4: lista_tudo(lista); break; } //fim do switch } system("pause"); }Editado por DurubAdicionar tags code [Durub]
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.