Elaborar um programa em Pascal,que leia o nome de um aluno, suas as 3 notas obtidas durante um semestre com seus respectivos pesos, calcule a média ponderada semestral do aluno e imprima uma mensagem informando o nome, a média do aluno e se ele foi APROVADO DIRETO (
média
), se ele está em EXAME FINAL (
média<8), ou se foi REPROVADO DIRETO (média ❤️).
Passo 1
O enunciado pede que eu escreva um programa em Pascal que:
- leia o nome de um aluno;
- leia as três notas obtidas no semestre e os respectivos pesos de cada nota;
- calcule a média ponderada semestral do aluno;
- imprima o nome do aluno, a média e uma mensagem de situação conforme a média:
- APROVADO DIRETO quando
, - EXAME FINAL quando
, - REPROVADO DIRETO quando
.
- APROVADO DIRETO quando
Informações relevantes fornecidas:
- Existem exatamente 3 notas, cada uma com um peso.
- Os intervalos de decisão (aprovado/exame/reprovado) foram dados explicitamente com as desigualdades acima.
- Posso assumir que a questão está bem formulada (ou seja, serão fornecidos números válidos para notas e pesos), mas vou tratar rapidamente o caso em que a soma dos pesos seja zero para evitar divisão por zero.
Passo 2
Definindo as variáveis que o programa precisa e seus tipos (explicando cada uma):
-
: guarda o nome do aluno — use tipo string. -
: as três notas — use tipo real (números com vírgula). -
: os três pesos correspondentes — use tipo real (podem ser inteiros, mas real é mais geral). -
: soma dos pesos, tipo real. -
: média ponderada, tipo real.
Por que usar real? Porque notas e pesos podem ser fracionários (por ex.
), então real é o tipo adequado.
Passo 3
Fórmula da média ponderada (a parte matemática central). Vou explicar bem devagar:
A média ponderada de três notas
com pesos
é dada por
Explicando cada termo:
- No numerador, multiplicamos cada nota pelo seu peso e somamos essas parcelas — isso dá importância proporcional às notas segundo o peso.
- No denominador, somamos todos os pesos para normalizar (dividir) a soma ponderada e obter a média.
Exemplo concreto (para fixar): se
,
;
,
;
,
,
então e
então
Com isso, pelo critério, esse aluno estaria em EXAME FINAL (
).
Passo 4
Lógica de decisão (como testar a média e escolher a mensagem). Vou explicar as comparações e porque a ordem importa.
Queremos:
- APROVADO DIRETO quando
. - EXAME FINAL quando
. - REPROVADO DIRETO quando
.
Observações:
- As desigualdades são mutuamente exclusivas e cobrem os valores típicos de média entre 0 e 10, exceto valores acima de 10 (caso estranho) ou negativos (inválidos). Podemos tratar esses casos com uma mensagem adicional se quiser.
- Em código Pascal, essas condições são testadas com operadores relacionais e operadores lógicos. Por exemplo, a condição para APROVADO DIRETO é:
. - É comum usar uma estrutura if … else if … else para testar em sequência: primeiro verificar APROVADO DIRETO, depois EXAME FINAL, e por fim REPROVADO DIRETO. Assim evitamos sobreposição nas condições.
Passo 5
Tratamento de caso especial: soma dos pesos igual a zero.
- Se
, a fórmula da média faz divisão por zero, o que é inválido. Então convém checar:
e se apresentar uma mensagem de erro e encerrar ou pedir novos dados. - Como o enunciado assume boa formulação, esse caso é improvável, mas é uma boa prática evitá-lo.
Passo 6
Estrutura geral do programa (em palavras, passo a passo que o Pascal seguirá):
- Ler o nome do aluno.
- Ler as três notas e, para cada nota, ler também o peso correspondente (poder ler nota e peso numa mesma linha ou em linhas separadas).
- Calcular
. - Se
, mostrar erro e encerrar. - Calcular
. - Imprimir o nome do aluno e a média (por exemplo com duas casas decimais).
- Testar as condições e imprimir a mensagem correspondente: APROVADO DIRETO, EXAME FINAL ou REPROVADO DIRETO.
- (Opcional) Se a média estiver fora do intervalo esperado (por exemplo maior que 10), imprimir aviso.
Passo 7
Algumas dicas de implementação prática em Pascal:
- Use variáveis do tipo real para notas, pesos, somaPesos e média.
- Para ler o nome com espaços, use readln(nome).
- Para formatar a média com duas casas decimais ao imprimir, use a sintaxe de formato do writeln como: writeln(media:0:2).
- Use if … else if … else para as comparações, lembrando de usar parênteses nas comparações compostas:
- if (media >= 8) and (media <= 10) then …
- else if (media >= 3) and (media < 8) then …
- else if (media < 3) then …
- Coloque mensagens claras para o usuário na entrada, para facilitar testes manuais.
Passo 8
Agora apresento o programa em Pascal pronto (código final). Ele implementa tudo o que expliquei: leitura do nome, leitura das três notas e três pesos, cálculo da média ponderada, verificação de soma de pesos e impressão do resultado com a situação do aluno.
Resposta
program MediaPonderadaAluno;
var
nome: string;
n1, n2, n3: real;
p1, p2, p3: real;
somaPesos, media: real;
begin
writeln(‘Digite o nome do aluno:’);
readln(nome);
var
nome: string;
n1, n2, n3: real;
p1, p2, p3: real;
somaPesos, media: real;
begin
writeln(‘Digite o nome do aluno:’);
readln(nome);
writeln(‘Digite a nota 1 e o peso 1 (separados por espaço):’);
readln(n1, p1);
readln(n1, p1);
writeln(‘Digite a nota 2 e o peso 2 (separados por espaço):’);
readln(n2, p2);
readln(n2, p2);
writeln(‘Digite a nota 3 e o peso 3 (separados por espaço):’);
readln(n3, p3);
readln(n3, p3);
somaPesos := p1 + p2 + p3;
if somaPesos = 0.0 then
begin
writeln(‘Erro: a soma dos pesos eh zero. Nao e possivel calcular a media.’);
halt(1);
end;
if somaPesos = 0.0 then
begin
writeln(‘Erro: a soma dos pesos eh zero. Nao e possivel calcular a media.’);
halt(1);
end;
media := (n1 * p1 + n2 * p2 + n3 * p3) / somaPesos;
writeln;
writeln('Aluno: ', nome);
writeln('Media: ', media:0:2);
writeln('Aluno: ', nome);
writeln('Media: ', media:0:2);
if (media >= 8.0) and (media <= 10.0) then
writeln(‘Situacao: APROVADO DIRETO’)
else if (media >= 3.0) and (media < 8.0) then
writeln(‘Situacao: EXAME FINAL’)
else if (media < 3.0) then
writeln(‘Situacao: REPROVADO DIRETO’)
else
writeln(‘Situacao: media fora do intervalo esperado.’);
end.
writeln(‘Situacao: APROVADO DIRETO’)
else if (media >= 3.0) and (media < 8.0) then
writeln(‘Situacao: EXAME FINAL’)
else if (media < 3.0) then
writeln(‘Situacao: REPROVADO DIRETO’)
else
writeln(‘Situacao: media fora do intervalo esperado.’);
end.