Ir ao conteúdo
  • Cadastre-se

Busca e Atualizar uma lista em Pascal / URGENTE /


Posts recomendados

Amigos, boa tarde!
 
Eu estou precisando de uma ajuda de vocês com o codigo abaixo, eu estou desenvolvendo uma estrutura da dados, e dentro do menu tem as seguintes opções.
1 - Inserir um Aluno
2 - Busca um Aluno pelo Cpf
3 - Busca um Aluno por Periodo
4 - Atualiza o Periodo do Aluno
5 - Apaga um Aluno
9 - Sair

o meu problema é que até agora eu só consegui resolver apenas o INSERIR, APAGAR UM ALUNO.
eu tenho até amanha para entregar este código, por gentileza, quem puder me ajudar eu agradeco.
 

Program Cadastro_Alunos;constinicia = 1;Tam_Max = 50;TypeApontador = integer; // ApontarTipo_Aluno = record // Registra os Dados dos AlunosNome: string [10];Cpf: real;Periodo: integer;end;Lista_Alunos = recordAluno: array [1..Tam_Max] of Tipo_Aluno; // Lista de AlunosInicio:Apontador; // Apontar para InicioFim:Apontador; // Apontar para o Fimend;procedure FLvazia (var Lista:Lista_Alunos); // Fila da Lista VaziabeginLista.Inicio:= inicia;Lista.Fim:= Lista.Inicio;end;function Vazia (var Lista:Lista_Alunos):boolean; // VaziabeginVazia:= Lista.Inicio= Lista.Fim;end;procedure Insere (x:Tipo_Aluno; var Lista:Lista_Alunos); // Inserirbeginif Lista.Fim > Tam_Max thenwriteln ('Lista esta Cheia')elsebeginLista.Aluno[Lista.Fim]:= x;Lista.Fim:= Lista.Fim + 1;end;end;procedure Insere_menu(var Lista:Lista_Alunos);var estudante:Tipo_Aluno;beginwriteln('Digite o nome do aluno:');readln(estudante.nome);writeln('Digite o Cpf do aluno:');readln(estudante.Cpf);writeln('Digite o Periodo do aluno:');readln(estudante.Periodo);Insere(estudante,Lista)end;// Retiraprocedure Retira (p:Apontador; var Lista:Lista_Alunos; var Aluno:Tipo_Aluno);var Aux:integer;beginif Vazia(Lista) or (p >= Lista.Fim) thenwriteln ('Erro: posicao nao Existe')elsebeginAluno:=Lista.Aluno[p];Lista.Fim:= Lista.Fim-1;for Aux:= p to Lista.Fim-1 doLista.Aluno[Aux]:= Lista.Aluno[Aux+1]end;end;// Imprimirprocedure Imprime (var Lista:Lista_Alunos);var Aux : integer;beginfor Aux := Lista.inicio to Lista.Fim-1 dobeginwriteln ('Aluno:',Lista.Aluno[Aux].Nome );writeln ('Cpf:',Lista.Aluno[Aux].Cpf );writeln ('Periodo:',Lista.Aluno[Aux].Periodo );write(' ');end;writeln(' ');end;//Procedimento q está dando errofunction busca_simples (num:integer; Lista:Lista_Alunos; Tam_Max:integer): integer;var i: integer;beginfor i := 1 to Tam_Max doif (Lista[i] = i) then busca_simples:=i;i:=i+1;end;varlistaInt:Lista_Alunos;temp: Tipo_Aluno;aux, Opcao, num: integer;Begin// MenuOpcao:=0;FLvazia(listaInt);Imprime(listaInt);while (Opcao<>9) dobeginclrscr;writeln ('Seja Bem Vindo!!!');writeln (' ');writeln ('Escolha umas das opções:');writeln (' ');writeln ('1 - Inserir um Aluno:');writeln ('2 - Busca um Aluno pelo Cpf:');writeln ('3 - Busca um Aluno por Periodo:');writeln ('4 - Atualiza o Periodo do Aluno:');writeln ('5 - Apaga um Aluno:');writeln ('9 - Sair:');read (Opcao);// Inserir um Alunoif (Opcao=1) thenbeginInsere_menu(listaInt);end;{ if (Opcao=2) thenbeginwriteln ();Write ('Digite o Numero do Cpf que deseja Busca:');readln (num);write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max));end;if (Opcao=3) thenbeginwriteln ();Write ('Digite o Periodo que deseja Busca:');readln (num);write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max));end;if (Opcao=4) thenbeginend; }if (Opcao=5) thenbeginWrite ('Digite o Aluno que deseja Excluir:');readln (temp.Nome);Retira (2, listaInt,temp);end;Imprime(listaInt);end;End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Creio que você precise reestruturar o seu código... basicamente só está funcionando o cadastramento.. além do buscar, o excluir também precisa ser revisto... entre outros detalhes.

Como são vários detalhes, criei um código baseado no seu, para servi de base para você tentar corrigir o seu... veja:


Dê uma olhada e compare com o seu para tentar entender as sugestões de mudança.

PROGRAM Cadastro_Alunos;uses  CRT; //Alguns compiladores precisam para carregar comandos como o ClrScr, ReadKey, TextColor etcconst  POS_INICIAL =  1; //valor da posição inicial [Simon.Viegas]  TAM_MAXIMO  = 50; //tamanho máximo da Lista (quantidade máxima de Alunos) [Simon.Viegas]type  Apontador  = integer; //estrutura do apontador  Tipo_Aluno = record   //dados dos Alunos [Simon.Viegas]                 nome   :string[10];                 cpf    :string[15]; //Mascara: xxx.xxx.xxx-xxx                 periodo:integer;               end;  Lista_Alunos = record                    Alunos: array [POS_INICIAL..TAM_MAXIMO] of Tipo_Aluno;                   {inicio:Apontador;} //aponta para a primeira posição da Fila [Simon.Viegas]     //<---por enquanto não precisa.. vai depender como estruturar o LISTA_retirar                   fim   :Apontador; //aponta para a última posição da Fila [Simon.Viegas]                 end;//Procedimento que inicializa a Fila ("fila nova") [Simon.Viegas]procedure LISTA_inicializar (var Lista:Lista_Alunos);  begin  //Lista.Inicio:=POS_INICIAL; //aponta para a primeira posição possível [Simon.Viegas]     //<---por enquanto não precisa.. vai depender como estruturar o LISTA_retirar  Lista.Fim:=POS_INICIAL;  //aponta para a posição inicial (o fim é a própria primeira posição) [Simon.Viegas]  end;//Procedimento que verifica se a lista está vaziafunction LISTA_vazia (var Lista:Lista_Alunos):boolean;  begin  LISTA_vazia:=(Lista.fim=POS_INICIAL); //está vazia se a última posição é igual (aponta) para a primeira. [Simon.Viegas]  end;//Procedimento para adicionar um novo Aluno na Lista de Alunos [Simon.Viegas]procedure LISTA_inserir (var Lista:Lista_Alunos; aluno:Tipo_Aluno);  begin  if Lista.fim > TAM_MAXIMO then //verifica se tem espaço disponível para inserir [Simon.Viegas]    writeln('A Lista esta Cheia')  else    begin    Lista.Alunos[Lista.Fim]:=aluno; //insere o Aluno na primeira posição disponível [Simon.Viegas]    Lista.fim:=Lista.fim+1;  //atualiza a última posição    end;  end;//Coleta dados do Aluno e insere na Lista [Simon.Viegas]procedure MENU_inserir (var Lista:Lista_Alunos);  var    aluno_novo :Tipo_Aluno;  begin  writeln('Insira os dados dos Aluno');  write  ('Nome   : '); readln(aluno_novo.nome);  write  ('CPF    : '); readln(aluno_novo.cpf);  write  ('Periodo: '); readln(aluno_novo.periodo);  LISTA_inserir(Lista,aluno_novo);  end;  //Retira um Aluno da Lista [Simon.Viegas]{ ### Precisa ajustar ###procedure LISTA_retirar (var Lista:Lista_Alunos; Aluno:Tipo_Aluno);  var    Aux:integer;  begin  if (Vazia(Lista)) or (p >= Lista.Fim) then    writeln('Erro: posicao nao Existe')  else    begin    //Aluno:=Lista.Aluno[p]; ??    Lista.Fim:= Lista.Fim-1;    for Aux:= p to Lista.Fim-1 do      Lista.Aluno[Aux]:= Lista.Aluno[Aux+1]    end;  end;}// Imprime a Lista de Alunosprocedure LISTA_imprimir (Lista:Lista_Alunos);  var    i :integer;  begin  for i:=POS_INICIAL to Lista.Fim-1 do    begin    writeln('Aluno  :',Lista.Alunos[i].nome);    writeln('CPF    :',Lista.Alunos[i].cpf);    writeln('Periodo:',Lista.Alunos[i].periodo);    write;    end;  writeln;  end;//Procedimento q está dando erro{ ### Precisa ajustar ###function busca_simples (Lista:Lista_Alunos; Aluno:Tipo_Aluno):integer;  var    i: integer;  begin  for i := 1 to Tam_Max do    if (Lista[i] = i) then       busca_simples:=i;  i:=i+1;  end;}var  Alunos :Lista_Alunos;  opcao  :integer;  temp   :Tipo_Aluno;    BEGIN// MenuLISTA_inicializar(Alunos);LISTA_imprimir(Alunos);Opcao:=0;while (Opcao<>9) do  begin  ClrScr;  writeln('       Seja Bem Vindo!!!       ');   //ESSE MENU PODERIA SER TRANSFORMADO EM UM PROCEDIMENTO TAMBÉM!!! [Simon.Viegas]  writeln;  writeln('Escolha umas das opções:       ');  writeln;  writeln('1 - Inserir um Aluno           ');  writeln('2 - Busca um Aluno pelo Cpf    ');  writeln('3 - Busca um Aluno por Periodo ');  writeln('4 - Atualiza o Periodo do Aluno');  writeln('5 - Apaga um Aluno             ');  writeln('9 - Sair                       ');  {read (Opcao);} //Não use READ, somente READLN  readln(Opcao);  // Inserir um Aluno  if (Opcao=1) then    MENU_inserir(Alunos);  {  if (Opcao=2) then    begin    writeln();    Write ('Digite o Numero do Cpf que deseja Busca:');    readln (num);    write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max));    end;  if (Opcao=3) then    begin    writeln();    Write ('Digite o Periodo que deseja Busca:');    readln (num);    write ('O Numero', num , 'Esta na Posicao:', busca(num, listaInt,Tam_Max));    end;  if (Opcao=4) then    begin    end;  }  if (Opcao=5) then    begin    write  ('Digite o Aluno que deseja Excluir:'); readln (temp.Nome);    {LISTA_retirar(Alunos,temp);}    end;  writeln;  LISTA_imprimir(Alunos);  writeln('Pressione ENTER para continuar');  readln;  end;END.

MINHA SUGESTÃO É A SEGUINTE:
Corrija seu programa para que funcione bem cadastramento e exibição dos Alunos cadastrados e poste aqui... (Versão 1)
(Se o cadastramento não funcionar, todo o restante não vai funcionar também)
A partir da Versão 1, tenta fazer a consulta e posta aqui (Versão 2)

A partir da Versão 2, tenta fazer a parte da Exclusão...  Vale salientar que primeiro você precisará localizar a posição do Aluno quer excluir, para depois excluir ele... (no seu código, você sempre está excluindo o aluno da mesma posição).
Daí vai fazer aos poucos..

No aguardo.
 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...