Ir ao conteúdo

Valor MAIOR e MENOR no Pascal.


DesTroiT BR

Posts recomendados

Postado

Olá pessoal, comecei a cursar recentemente o curso de SI, e tenho algumas dúvidas na resolução de alguns exercícios, espero que possam me ajudar.

Ler 10 notas do tipo real. Imprimir a maior nota, a menor nota e a media.

Resolvi este exercício da seguinte maneira:


program um;
var
nota, maior, menor, media: real;
i: integer;
begin
media:= 0;
maior:= -999999999;
menor:= 999999999;
for i:= 1 to 10 do
begin
write('Insira a ',i,'ª nota: ');
readln(nota);
if (nota > maior) then
maior:= nota;
if (nota < menor) then
menor:= nota;
media:= media+nota;
end;
media:= media/10;
writeln('Maior nota: ',maior);
writeln('Menor nota: ',menor);
writeln('Media: ',media)
end.

Para definir o maior e menor valor eu tive que atribuir:

O menor valor inicial aceito pelo compilador a "maior".

O maior valor inicial aceito pelo compilador a "menor".

Pergunta:

Existe alguma maneira de que o MAIOR e MENOR valor inicial seja definido durante a execução do programa a partir dos valores inseridos pelo o usuário, assim excluindo as chances de erro?

---

Esta é uma das minhas dúvidas, desde já agradeço aos que se proporem a ajudar.

Postado

Boa Tarde brother.

Pelo que entendi você quer impedir o usuário de digitar uma nota menor do que é possível e maior do que é possível... Se for isso, basta inicializar as variáveis "maior" e "menor" com zero e testar esse valor depois que o valor for inserido.

Crie 2 varíaveis:


MAX : real;// Variável que vai guardar o maior possível
MIN : real;// Variável que vai guardar o menor possível

E quando o usuário inserir o valor da nota, você pode testar se esse valor é maior do que a variável MAX ou menor do que a variável MIN.

Cara essa é a resposta para o que eu entendi da sua pergunta, eu espero ter ajudado.

Se eu entendi errado, pergunte de novo aí!

Abraço! C:

  • Membro VIP
Postado
Existe alguma maneira de que o MAIOR e MENOR valor inicial seja definido durante a execução do programa a partir dos valores inseridos pelo o usuário, assim excluindo as chances de erro?

Sim, você pode utilizar o primeiro valor informado por exemplo.

  • 3 semanas depois...
Postado

Obrigado pelas respostas, foi exatamente o que o Simon falou.

Resolvi da seguinte maneira:


program um;
var
nota, maior, menor, media: real;
i: integer;
begin
write('Insira a 1ª nota: ');
readln(nota);
maior:= nota;
menor:= nota;
media:= nota;
for i:= 2 to 10 do
begin
write('Insira a ',i,'ª nota: ');
readln(nota);
if (nota > maior) then
maior:= nota;
if (nota < menor) then
menor:= nota;
media:= media+nota;
end;
media:= media/10;
writeln('Maior nota: ',maior);
writeln('Menor nota: ',menor);
writeln('Media: ',media)
end.

  • Membro VIP
Postado
Obrigado pelas respostas, foi exatamente o que o Simon falou.

Resolvi da seguinte maneira:


program um;
var
nota, maior, menor, media: real;
i: integer;
begin
write('Insira a 1ª nota: ');
readln(nota);
maior:= nota;
menor:= nota;
media:= nota;
for i:= 2 to 10 do
begin
write('Insira a ',i,'ª nota: ');
readln(nota);
if (nota > maior) then
maior:= nota;
if (nota < menor) then
menor:= nota;
media:= media+nota;
end;
media:= media/10;
writeln('Maior nota: ',maior);
writeln('Menor nota: ',menor);
writeln('Media: ',media)
end.

Só uma observação... a média deve ser calculada uma vez só, já que só é exibida ao final... e as condições são mutualmente exclusivas entre si, ou seja, se for uma coisa (por ex. maior que o maior), não vai ser a outra (no ex. menor que menor), logo devem-se usar o if/else em vez de if (simples - sem else).

No aguardo.

UPDATE PARA ERRATA (20/05/2013)

Inserir sublinhado no texto. Explicação nas postagens abaixo.

Abraços

Postado

Olá Simon Viegas,

Baseado no seu comentário, analisei o código e fiz alguns testes...

----------------

Só uma observação... a média deve ser calculada uma vez só, já que só é exibida ao final...

A média final esta sendo calculada uma vez só.

O que se encontra dentro do laço FOR é apenas o acumulo da média, fora do laço a soma total dos valores esta sendo dividida pela quantidade de notas e gerando a média final.

Obs: Eu poderia ter criado uma variável exclusiva para somar as notas e depois calcular a média a partir dela, mas vi que dava pra fazer a operação com a mesma variável, nesse caso em especifico.

----------------

as condições são mutualmente exclusivas entre si, ou seja, se for uma coisa (por ex. maior que o maior), não vai ser a outra (no ex. menor que menor), logo devem-se usar o if/else em vez de if (simples - sem else).

A sua lógica esta correta, apesar de que das duas formas o resultado apresentado esta sendo apresentado corretamente. Mas realmente o certo é usar ELSE IF.

----------------

O código final ficou da seguinte forma:


program um;
var
nota, maior, menor, media: real;
i: integer;
begin
write('Insira a 1ª nota: ');
readln(nota);

maior:= nota;
menor:= nota;
media:= nota;

for i:= 2 to 10 do
begin
write('Insira a ',i,'ª nota: ');
readln(nota);

if (nota > maior) then
maior:= nota
else if (nota < menor) then
menor:= nota;

media:= media+nota;
end;

media:= media/10;

writeln('Maior nota: ',maior);
writeln('Menor nota: ',menor);
writeln('Media: ',media)
end.

Valeu pelas dicas.

  • Membro VIP
Postado
Olá Simon Viegas,

Baseado no seu comentário, analisei o código e fiz alguns testes...

----------------

A média final esta sendo calculada uma vez só.

O que se encontra dentro do laço FOR é apenas o acumulo da média, fora do laço a soma total dos valores esta sendo dividida pela quantidade de notas e gerando a média final.

Obs: Eu poderia ter criado uma variável exclusiva para somar as notas e depois calcular a média a partir dela, mas vi que dava pra fazer a operação com a mesma variável, nesse caso em especifico.

----------------

Perfeito...

Foi uma falha minha... desculpe, :D

***

A sua lógica esta correta, apesar de que das duas formas o resultado apresentado esta sendo apresentado corretamente. Mas realmente o certo é usar ELSE IF.

----------------

Justamente, apesar de ambos darem o mesmo resultado, conceitualmente podemos dizer que "devemos usar a versão com else", já que se trata de condições mutualmente exclusivas entre si...

Obs1.: Como é sabido, não existe resposta certa, mas sim UMA das respostas certas, e que, teoricamente, usando o else seria a "mais" certa ou melhor.

Obs2.: A depender dos critérios de avaliações, podemos dizer também que não usar o else seria um erro, pois, se por exemplo estivéssemos estudando "IF" e "IF/ELSE", essa diferença deve ser observada mais cuidadosamente...

***

O código final ficou da seguinte forma:


program um;
var
nota, maior, menor, media: real;
i: integer;
begin
write('Insira a 1ª nota: ');
readln(nota);

maior:= nota;
menor:= nota;
media:= nota;

for i:= 2 to 10 do
begin
write('Insira a ',i,'ª nota: ');
readln(nota);

if (nota > maior) then
maior:= nota
else if (nota < menor) then
menor:= nota;

media:= media+nota;
end;

media:= media/10;

writeln('Maior nota: ',maior);
writeln('Menor nota: ',menor);
writeln('Media: ',media)
end.

Como está utilizando números reais, creio que a impressão dos resultados possa sair em "notação científica".

Ex:

Maior nota:  8.00000000000000E+000
Menor nota: 7.00000000000000E+000
Media: 7.90000000000000E+000

Caso queira exibir na formatação "tradicional", podem-se utilizar desse recurso: (já demonstrado no código).

	writeln('Maior nota: ',maior:0:2); //sendo :X:Y, X=casas reservadas a esquerda, e Y=casas decimais
writeln('Menor nota: ',menor:0:2);
writeln('Media: ',media:0:2);
readln;

***

Valeu pelas dicas.

Eu que agradeço pelo feedback.

No aguardo.

Abraços

Postado

Olá Simon Viegas,

Valeu por reforçar a parte do IF, IF/ELSE.

Caso queira exibir na formatação "tradicional", podem-se utilizar desse recurso: (já demonstrado no código).


Código:
writeln('Maior nota: ',maior:0:2); //sendo :X:Y, X=casas reservadas a esquerda, e Y=casas decimais
writeln('Menor nota: ',menor:0:2);
writeln('Media: ',media:0:2);
readln;

Sim, exato. Estava ciente deste detalhe, mas na primeira vez que postei o código esta sem a formatação, ai preferi preservar o código da forma que foi inicialmente publicado e apenas focar nas dúvidas mesmo. Mas de qualquer forma valeu pela dica.

---

No mais, é isso ai.

Apareci com uma dúvida e alem de ter a mesma sanada, ainda fui alertado em outros pontos. Aproveitamento mais que 100%.

Obrigado pela ajuda e com certeza, sou melhor programador que antes, se é que já posso me considerar um. :D

E como já dizia Einstein...

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."

Abraço.

  • Membro VIP
Postado

Olá Simon Viegas,

Valeu por reforçar a parte do IF, IF/ELSE.

Sim, exato. Estava ciente deste detalhe, mas na primeira vez que postei o código esta sem a formatação, ai preferi preservar o código da forma que foi inicialmente publicado e apenas focar nas dúvidas mesmo. Mas de qualquer forma valeu pela dica.

---

No mais, é isso ai.

Apareci com uma dúvida e alem de ter a mesma sanada, ainda fui alertado em outros pontos. Aproveitamento mais que 100%.

Obrigado pela ajuda e com certeza, sou melhor programador que antes, se é que já posso me considerar um. :D

E como já dizia Einstein...

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."

Abraço.

Olá DesTroiT BR.

Agradeço pelo feedback e considerações... :lol:

Qualquer coisa é só postar.

Abraços

Arquivado

Este tópico foi arquivado e está fechado para 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...