Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Preciso de ajuda para corrigir um programa ou criar um novo


Posts recomendados

Foi me passado o seguinte desafio:

Faça um programa em Pascal que efetue o cadastro de alunos para uma determinada disciplina letiva. Cada aluno terá 3 notas. As notas 1 e 3 possuem Peso 2 e a nota 2 possui Peso 1.O limite de alunos na disciplina é de até 50, não podendo ultrapassar esse valor. Os campos necessários são:                                                                                                                                                                

Registro Alunos

- RA : número

- Nome : texto

- Disciplina : texto

 

- Nota1 : número

- Nota2 : número

- Nota3 : número

- Situação: texto .

 

 O programa deve apresentar o seguinte MENU:

1 – Incluir Aluno

2 – Alterar Aluno

3 – Lista Aluno

4 – Sair

 

Opcão 1 – Cadastrar novo aluno. Verificar se o RA digitado já existe no registro. Caso exista, não permita concluir o cadastro e mostre uma mensagem para o usuário. Peça para o usuário digitar cada uma das 3 notas do aluno, em escala de [0 – 10]. Valide a digitação de cada nota, não permitindo inserir notas inválidas. A média deve ser calculada (usando-se os pesos) automaticamente, mas não armazenada, para a inclusão da Situação do aluno (Aprovado, Em Exame, Reprovado), de acordo com a seguinte informações:

 

se a média >=6.0 escreva aprovado.

se a média > 2.0 e < 6.0 escrava Em Exame.

se a média <= 2.0 escreva Reprovado.

 

Cadastrar somente um aluno por vez e voltar ao menu inicial.

 

Opção 2 – Solicitar o RA. Se o aluno não estiver cadastrado, mostre uma mensagem informando, caso contrário, mostre todos os dados do aluno, e depois peça para o usuário recadastrar (redigitar) os dados (exceto RA e a situação – gerada automaticamente).

 

Opção 3 – Solicitar o RA. Se o aluno não estiver cadastrado, mostre uma mensagem informando

que o mesmo não existe, caso contrário, mostre todos os dados daquele aluno.

 

Opção 4 – Fechar o programa.

 

Eu criei esse código e não consigo corrigir.

 

program CadastroAlunos;

const
MAX_ALUNOS = 50; // limite máximo de alunos na disciplina
PESO_NOTA1 = 2; // peso da nota1 (2)
PESO_NOTA2 = 1; // peso da nota2 (1)
PESO_NOTA3 = 2; // peso da nota3 (2)

type
Aluno = record // registro do aluno
RA: integer;
Nome: string;
Disciplina: string;
Nota1: real;
Nota2: real;
Nota3: real;
Situacao: string;
end;

var
Alunos: array[1..MAX_ALUNOS] of Aluno; // vetor de alunos
numAlunos: integer = 0; // número atual de alunos cadastrados
opcao: integer;

// função para verificar se um RA já existe no registro de alunos
function RAExiste(RA: integer): boolean;
var
i: integer;
begin
RAExiste := false;
for i := 1 to numAlunos do
begin
if Alunos[i].RA = RA then
begin
RAExiste := true;
break;
end;
end;
end;

// função para calcular a média das notas de um aluno com os pesos definidos
function CalcularMedia(Nota1, Nota2, Nota3: real): real;
begin
Result := (Nota1 * PESO_NOTA1 + Nota2 * PESO_NOTA2 + Nota3 * PESO_NOTA3) / (PESO_NOTA1 + PESO_NOTA2 + PESO_NOTA3);
end;

// função para determinar a situação de um aluno a partir da média calculada
function SituacaoAluno(Media: real): string;
begin
if Media >= 6.0 then
Result := 'Aprovado'
else if Media >= 4.0 then // corrigido o valor mínimo para aprovação
Result := 'Em Exame'
else
Result := 'Reprovado';
end;

// função para exibir os dados de um aluno
procedure ExibirDadosAluno(const A: Aluno);
begin
writeln('RA: ', A.RA);
writeln('Nome: ', A.Nome);
writeln('Disciplina: ', A.Disciplina);
writeln('Nota1: ', A.Nota1:0:1);
writeln('Nota2: ', A.Nota2:0:1);
writeln('Nota3: ', A.Nota3:0:1);
writeln('Média: ', CalcularMedia(A.Nota1, A.Nota2, A.Nota3):0:1);
writeln('Situação: ', A.Situacao);
end;

// função para obter um aluno a partir do RA
function ObterAluno(RA: integer): Aluno;
var
i: integer;
begin
Result.RA := -1; // valor inválido como inicialização
for i := 1 to numAlunos do
begin
if Alunos[i].RA = RA then
begin
Result := Alunos[i];
break;
end;
end;
end;

// procedimento para cadastrar um novo aluno
procedure CadastrarAluno;
var
RA: integer;
Nome: string;
Disciplina: string;
Nota1, Nota2, Nota3: real;
Media: real;
begin
writeln('*** CADASTRO DE NOVO ALUNO ***');
writeln;
// leitura dos dados do aluno
write('RA: ');
readln(RA);
if RAExiste(RA) then // verifica se já existe um aluno com o mesmo RA
begin
writeln('Já existe um aluno cadastrado com este RA.');
writeln;
exit; // sai do procedimento sem cadastrar o aluno
end;
write('Nome: ');
readln(Nome);
write('Disciplina: ');
readln(Disciplina);
write('Nota1: ');
readln(Nota1);
write('Nota2: ');
readln(Nota2);
write('Nota3: ');
readln(Nota3);
// calcula a média e a situação do aluno
Media := CalcularMedia(Nota1, Nota2, Nota3);
Alunos[numAlunos + 1].RA := RA;
Alunos[numAlunos + 1].Nome := Nome;
Alunos[numAlunos + 1].Disciplina := Disciplina;
Alunos[numAlunos + 1].Nota1 := Nota1;
Alunos[numAlunos + 1].Nota2 := Nota2;
Alunos[numAlunos + 1].Nota3 := Nota3;
Alunos[numAlunos + 1].Situacao := SituacaoAluno(Media);
numAlunos := numAlunos + 1; // atualiza o número de alunos cadastrados
writeln;
writeln('Aluno cadastrado com sucesso!');
writeln;
end;

// procedimento para exibir os dados de um aluno
procedure ExibirAluno;
var
RA: integer;
A: Aluno;
begin
writeln('*** EXIBIÇÃO DE DADOS DO ALUNO ***');
writeln;
write('RA: ');
readln(RA);
A := ObterAluno(RA);
if A.RA = -1 then // verifica se o RA é inválido
begin
writeln('RA inválido. Nenhum aluno encontrado com este RA.');
writeln;
exit; // sai do procedimento sem exibir os dados
end;
writeln;
ExibirDadosAluno(A);
writeln;
end;

// procedimento para exibir a lista de alunos cadastrados
procedure ExibirLista;
var
i: integer;
begin
writeln('*** LISTA DE ALUNOS CADASTRADOS ***');
writeln;
if numAlunos = 0 then // verifica se não há alunos cadastrados
begin
writeln('Nenhum aluno cadastrado.');
writeln;
exit; // sai do procedimento sem exibir a lista
end;
for i := 1 to numAlunos do
begin
writeln('Aluno ', i, ':');
ExibirDadosAluno(Alunos[i]);
writeln;
end;
end;

// procedimento para encerrar o programa
procedure EncerrarPrograma;
begin
writeln('Encerrando o programa...');
writeln;
end;

// procedimento para exibir o menu de opções e obter a escolha do usuário
procedure ExibirMenu;
begin
writeln('*** MENU ***');
writeln('1 - Cadastrar novo aluno');
writeln('2 - Exibir dados de um aluno');
writeln('3 - Exibir lista de alunos cadastrados');
writeln('4 - Encerrar o programa');
writeln;
write('Escolha uma opção (1-4): ');
readln(opcao);
writeln;
end;

// procedimento principal do programa
begin
repeat
ExibirMenu;
case opcao of
1: CadastrarAluno;
2: ExibirAluno;
3: ExibirLista;
4:EncerrarPrograma;
else
writeln('Opção inválida. Escolha uma opção válida (1-4).');
writeln;
end;
until opcao = 4;
end.



alguém me ajudar pfv 😞

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Gustavo Yuushi, seja bem vindo ao Fórum do Clube do Hardware.

 

 

Em 18/04/2023 às 13:24, Gustavo Yuushi disse:

Eu criei esse código e não consigo corrigir.

 

Sem saber qual é o sintoma do problema, fica mais complicado para diagnosticar e buscar uma solução... 

 

Ocorre o quê, não está compilado? Aqui testei com o FPC 3.2.2 (Free Pascal Compiler) e só precisou de pequenos ajustes para rodar certinho (compilar e executar - não analisei a lógica).

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Gabriel Torres alterou o título para Preciso de ajuda para corrigir um programa ou criar um novo

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!