YagoMaia95 Postado Novembro 9, 2014 Denunciar Share Postado Novembro 9, 2014 Boa noite galera, tudo bem ? Então, estou com um exercício de Lista Sequencial. Nesse exercício, estou inserindo 4 alunos (apenas para testes), e com esses alunos preciso uma opção: - Remover Aluno (Pela matricula) Porém não consigo realizar essa remoção pela Matrícula, só consigo pela posição dele no vetor. **O problema é no Case 2, função Retira, ela não corta pela matrícula.** Segue o código: [code] #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX 4 struct Data{ int Dia; int Mes; int Ano; }; struct Notas{ float DAD; float DAD_TIG; float AIA; float AF; }; struct Aluno{ char Nome[30]; float Matricula; /*char Curso[30]; struct Notas NotasAluno; struct Data DataNas;*/ }; struct ListaSequencial { struct Aluno VetorAluno[MAX+1]; int Cabeca; }; int CriaLista(struct ListaSequencial *P) { P->Cabeca=0; } bool ListaVazia(struct ListaSequencial *P) { return (P->Cabeca==0); } bool ListaCheia(struct ListaSequencial *P) { return (P->Cabeca==MAX); } /*int Retira (struct ListaSequencial *P, float Mat) { int i; if (ListaVazia(P) || P->Cabeca<=Mat) { printf("Lista vazia, insira um aluno primeiro."); return 0; } else { for (i=Mat; i < P->Cabeca-1; i++) { P->VetorAluno=P->VetorAluno[i+1]; } P->Cabeca--; return 1; } }*/ int Retira (struct ListaSequencial *P, float Mat) { int i=0; if (ListaVazia(P) || P->Cabeca<=Mat) { printf("Lista vazia, insira um aluno primeiro."); return 0; } else { while (P->VetorAluno.Matricula != Mat) { i++; } for (i; i < P->Cabeca-1; i++) { P->VetorAluno=P->VetorAluno[i+1]; } P->Cabeca--; return 1; } } void Ordena(struct ListaSequencial *P, struct Aluno Inf) { int aux=0; int i=0; if (ListaVazia(P)) { P->VetorAluno[P->Cabeca]=Inf; P->Cabeca++; } else { while (Inf.Matricula > P->VetorAluno.Matricula) { i++; } aux=P->Cabeca; for (; aux >= i; aux--) { P->VetorAluno[aux+1]=P->VetorAluno[aux]; } P->VetorAluno=Inf; P->Cabeca++; } } void ImprimeLista (struct ListaSequencial *P) { int i=0; if (ListaVazia(P)) printf("\nLista Vazia"); else { for (i=0; i < P->Cabeca; i++) { printf("Nome: %s",P->VetorAluno.Nome); printf("\nMatricula: %.0f",P->VetorAluno.Matricula); /*printf("\nCurso: %s",P->VetorAluno.Curso); printf("\nData de Nascimento: %d/%d/%d",P->VetorAluno.DataNas.Dia,P->VetorAluno.DataNas.Mes,P->VetorAluno.DataNas.Ano); printf("\nNotas: "); printf("\nDAD [0-40]:\t%.2f",P->VetorAluno.NotasAluno.DAD); printf("\nDAD-TIG [0-10]:\t%.2f",P->VetorAluno.NotasAluno.DAD_TIG); printf("\nAIA [0-25]:\t%.2f",P->VetorAluno.NotasAluno.AIA); printf("\nAF [0-25]:\t%.2f",P->VetorAluno.NotasAluno.AF);*/ printf("\n\n"); } } } void ImprimeAluno(struct ListaSequencial *P, float Pos) { int i=0; if (ListaVazia(P)) printf("\nLista Vazia"); else { while (Pos != P->VetorAluno.Matricula) { i++; } printf("Nome %s",P->VetorAluno.Nome); printf("\nMatricula: %.0f",P->VetorAluno.Matricula); /*printf("\nCurso: %s",P->VetorAluno.Curso); printf("\nData de Nascimento: %d/%d/%d",P->VetorAluno.DataNas.Dia,P->VetorAluno.DataNas.Mes,P->VetorAluno.DataNas.Ano); printf("\nNotas: "); printf("\nDAD [0-40]:\t%.2f",P->VetorAluno.NotasAluno.DAD); printf("\nDAD-TIG [0-10]:\t%.2f",P->VetorAluno.NotasAluno.DAD_TIG); printf("\nAIA [0-25]:\t%.2f",P->VetorAluno.NotasAluno.AIA); printf("\nAF [0-25]:\t%.2f",P->VetorAluno.NotasAluno.AF);*/ } } int Menu() { int escolha; printf("\n1 - Inserir aluno"); printf("\n2 - Remover aluno por matricula"); printf("\n3 - Exibir lista de alunos"); printf("\n4 - Exibir um aluno por matricula"); printf("\n5 - Sair do programa"); printf("\n\nEscolha uma opcao: "); scanf("%d",&escolha); return escolha; } /*void ImprimeCabeca(struct ListaSequencial *P) { printf("%d",P->Cabeca); }*/ main() { struct ListaSequencial DA; struct Aluno Dados; int escolha=0; float Matricula; CriaLista(&DA); while(escolha!=5) { escolha=Menu(); switch(escolha){ case 1: //Insere Aluno if (!ListaCheia(&DA)) { system("cls"); printf("Digite o nome do aluno: "); fflush(stdin); gets(Dados.Nome); printf("Digite a matricula de %s: ",Dados.Nome); scanf("%f",&Dados.Matricula); /*printf("Digite o curso de %s: ",Dados.Nome); fflush(stdin); gets(Dados.Curso); printf("Digite a data de nascimento de %s: ",Dados.Nome); printf("\nDia: "); scanf("%d",&Dados.DataNas.Dia); printf("Mes: "); scanf("%d",&Dados.DataNas.Mes); printf("Ano: "); scanf("%d",&Dados.DataNas.Ano); printf("\n\n"); printf("Informe quanto %s tirou na DAD (0 a 40): \t",Dados.Nome); scanf("%f",&Dados.NotasAluno.DAD); while(Dados.NotasAluno.DAD<0 || Dados.NotasAluno.DAD>40) { printf("Valor invalido, digite o valor entre 0 a 40 pontos: "); scanf("%f",&Dados.NotasAluno.DAD); } printf("Informe quanto %s tirou na DAD-TIG (0 a 10): \t",Dados.Nome); scanf("%f",&Dados.NotasAluno.DAD_TIG); while(Dados.NotasAluno.DAD_TIG<0 || Dados.NotasAluno.DAD_TIG>10) { printf("Valor invalido, digite o valor entre 0 a 10 pontos: "); scanf("%f",&Dados.NotasAluno.DAD_TIG); } printf("Informe quanto %s tirou na AIA (0 a 25): \t",Dados.Nome); scanf("%f",&Dados.NotasAluno.AIA); while(Dados.NotasAluno.AIA<0 || Dados.NotasAluno.AIA>25) { printf("Valor invalido, digite o valor entre 0 a 25 pontos: "); scanf("%f",&Dados.NotasAluno.AIA); } printf("Informe quanto %s tirou na AF (0 a 25): \t",Dados.Nome); scanf("%f",&Dados.NotasAluno.AF); while(Dados.NotasAluno.AF<0 || Dados.NotasAluno.AF>25) { printf("Valor invalido, digite o valor entre 0 a 25 pontos: "); scanf("%f",&Dados.NotasAluno.AF); }*/ Ordena(&DA,Dados); printf("\n\nPressione qualquer tecla para voltar ao menu: "); fflush(stdin); getchar(); system("cls"); } else { system("cls"); printf("\n\nLista cheia!"); printf("\n\nPressione qualquer tecla para voltar ao menu: "); fflush(stdin); getchar(); system("cls"); } break; case 2: //Remove aluno pela matricula system("cls"); if (!ListaVazia(&DA)) { Matricula=0; ImprimeLista(&DA); printf("\n\nQual aluno gostaria de remover da lista?"); printf("\nMatricula: "); scanf("%f",&Matricula); Retira(&DA,Matricula); system("cls"); printf("\n\nAluno removido"); } else { printf("Lista Cheia!"); } printf("\n\nPressione qualquer tecla para voltar ao menu: "); fflush(stdin); getchar(); system("cls"); break; case 3: //Imprime lista system("cls"); ImprimeLista(&DA); printf("\n\nPressione qualquer tecla para voltar ao menu: "); fflush(stdin); getchar(); system("cls"); break; case 4: //Imprime aluno pela matricula system("cls"); Matricula=0; if (!ListaVazia(&DA)) { printf("Qual aluno gostaria de visualizar?\n"); printf("Matricula: "); scanf("%f",&Matricula); system("cls"); ImprimeAluno(&DA,Matricula); } else { printf("Lista cheia!"); } printf("\n\nPressione qualquer tecla para voltar ao menu: "); fflush(stdin); getchar(); system("cls"); break; } } if (escolha==5) { system("cls"); printf("\n\nVoce saiu do programa, volte sempre.\n"); getchar(); } } [/code] Quem puder me dar uma luz, por favor, acho que já mexi tanto nesse cód que eu estou com bloqueio já kkkkk Obrigado galera ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
YagoMaia95
Boa noite galera, tudo bem ?
Então, estou com um exercício de Lista Sequencial.
Nesse exercício, estou inserindo 4 alunos (apenas para testes), e com esses alunos preciso uma opção:
- Remover Aluno (Pela matricula)
Porém não consigo realizar essa remoção pela Matrícula, só consigo pela posição dele no vetor.
**O problema é no Case 2, função Retira, ela não corta pela matrícula.**
Segue o código:
[code]
[/code]
Quem puder me dar uma luz, por favor, acho que já mexi tanto nesse cód que eu estou com bloqueio já kkkkk
Obrigado galera !
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.