Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida Lista Sequencial


YagoMaia95

Pergunta

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 !

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...