Home › Fóruns › Programação Básica › M03A07 – Maior e Menor Valores
- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 3 anos, 7 meses atrás por
Lucas Maciel Francisco.
-
AutorPosts
-
-
24 de agosto de 2021 às 21:51 #74212
Lucas Maciel Francisco
ParticipanteOlá, eu não tenho uma dúvida exatamente, mas queria confirmar algo.
Assim que a aula começou e o professor me jogou a charada de “Identificar o maior e o menor número” e ainda por cima disse que “muitas pessoas tem dificuldades”, eu não pude resistir – pausei o vídeo antes dele começar a explicar, e começei meus testes kkkk.
Eu consegui resolver sozinho, porém minha resolução ficou diferente da que o professor fez.. Eu fiz vários testes e pra mim parece funcionar bem, mas queria a opinião de alguém..programa { funcao inicio() { inteiro ctrl=1, v, v1=0, v2=0 escreva("Maior e Menor Valor\n\n") enquanto (ctrl<=5) { escreva("Digite o valor: ") leia(v) se (v1<v) { v1=v } se (v2>v ou v2==0) { v2=v } ctrl++ } escreva("\nMaior: ", v1, "\nMenor: ", v2) } }
Esse meu código está bom? tem algum erro que não consigo ver? o do professor seria mais ‘adequado’?
Eu sei que programação geralmente se trata apenas de se seu programa é ou não capaz de produzir o resultado esperado, mas se eu me apoiar sempre nisso, sinto que vou parar de evoluir, por isso queria a opinião de alguém.. -
24 de agosto de 2021 às 22:06 #74216
Lucas Maciel Francisco
Participanteaaah, analisei mais um pouco e acabei de encontrar um erro.
caso o usuário digite 0 e coloque ele em qualquer lugar que não seja o no valor final, vai dar erro, então troquei o “v2=0” e o “v2==0” por “v2=-1” e “v2==-1” e parece funcionar tranquilamente agora, mas apenas para números positivos (ou neutro).. mas ver esse erro ja me deu uma boa noção dos meus limites e dos limites do meu programa, desculpe o incômodo.. -
26 de agosto de 2021 às 07:38 #74267
Ivan Meskauskas Gneiding
ParticipanteConforme o Guanabara comenta, você deve atribuir o maior e o menor valores ao primeiro valor digitado, caso contrário seu código resultará em erro sob certas circunstâncias. Por exemplo, em momento nenhum você obrigou o usuário a digitar apenas valores positivos, mas você arbitrariamente definiu como valor inicial das variáveis 0; caso o usuário digite dois valores negativos, o maior sempre será 0; se ele digitar dois valores positivos e maiores que zero, o menor sempre será zero.
-
26 de agosto de 2021 às 07:44 #74268
Ivan Meskauskas Gneiding
ParticipantePerdão, eu falhei na análise dessa linha “se (v2>v ou v2==0)”, seu código funciona legal sim. Uma solução diferente e interessante
-
-
26 de agosto de 2021 às 20:50 #74337
Tutora Mayla
MestreLucas, o seu código está funcionando mas gostaria de dar algumas dicas:
- Cuidado ao nomear variáveis. O nome da variável deve expressar o que ela faz para assim facilitar a leitura do código. Em vez de colocar
v1
ev2
coloque algo comomaior
emenor
que assim seu código ficará muito mais fácil de ler. - Para declarar variáveis para menor ou maior uma dica é atribuir valores absurdos a ela, como por exemplo
inteiro menor = 100000000
einteiro maior= -100000000
, assim os números digitados provavelmente irão ser maiores/menores que os salvos. Mas atente-se que isso não irá funcionar em todos os casos, pois como o aluno Ivan comentou não há limite definido para os números. Uma forma de solucionar esse problema é sempre atribuir o primeiro número lido como o maior e o menor até então.
Parabéns pelo código! Continue se dedicando assim e será cada vez um programador melhor!
Tente modificar seu código para que resolva dessa forma atribuindo ao menor e maior valor o primeiro número lido e nos informe caso haja alguma dúvida. - Cuidado ao nomear variáveis. O nome da variável deve expressar o que ela faz para assim facilitar a leitura do código. Em vez de colocar
-
27 de agosto de 2021 às 04:16 #74349
Lucas Maciel Francisco
ParticipanteModifiquei, e agora está da forma que o professor orientou, tendo em vista que não achei outra maneira mais adequada de fazer:
programa { funcao inicio() { inteiro ctrl=1, v, ma_v=0, me_v=0 escreva("Maior e Menor Valor\n\n") enquanto (ctrl<=5) { escreva("Digite o valor: ") leia(v) se (ctrl==1) { ma_v=v me_v=v } senao { se (ma_v<v) { ma_v=v } se (me_v>v) { me_v=v } } ctrl++ } escreva("\nMaior: ", ma_v, "\nMenor: ", me_v) } }
Obrigado pelas opiniões, entendi que essa minha solução anterior pode até ser uma solução bacana para outros, mas de fato, não é adequada para o objetivo deste programa.
Eu queria evitar ao máximo ter que usar de coisas como
inteiro ma_v=10000000
ou algo do tipo, justamente por não sentir segurança em usar, mas acho que existem excessões, por exemplo, este é o meu código do Exercício 037:programa { // Estudonauta: Programação básica. Módulo 3, Aula 7, Exercício 037. (https://estudonauta.com/) funcao inicio() { inteiro ctrl=1, id, ma_id=0, me_id=0 cadeia nom, ma_ve="mais velho", ma_jo="mais jovem" escreva("{ EXERCÍCIO 037 - Mais velho e Mais novo }\n") enquanto (ctrl<=5) { escreva("\n-------------------\n", ctrl, "a PESSOA\n-------------------\nNOME: ") leia(nom) escreva("IDADE: ") leia(id) se (ma_id<id) { ma_id=id ma_ve=nom } se (me_id>id ou me_id==0) { me_id=id ma_jo=nom } ctrl++ } escreva("\nA pessoa mais jovem é ", ma_jo, " que tem ", me_id, " anos.\nA Pessoa mais velha é ", ma_ve, " que tem ", ma_id, " anos.") } }
como podem ver, eu usei a idade para orientar todo o código, e usei a minha mesma solução anterior, e para esse caso, eu não acho errado, pois ninguém iria digitar que tem 0 anos, pois não condiz com o objetivo do código. (e mesmo se fizerem essa maldade kkkk, pode-se alterar para orientar o calculo em -1 ao em vez de 0, que ai não dá né, -1 anos de vida é sacanagem kkkk)
é certo pensar dessa forma? posso entender que essa solução torna-se adequada para este código 037, por pegar como base o fato de que ninguém tem 0 (ou -1) anos de vida?
-
27 de agosto de 2021 às 19:57 #74408
Tutora Mayla
MestreLucas, o contexto do exercício 037 é realmente melhor pra usar essa dica de um valor que não pertence às possíveis entradas, faça colocando o -1 como sugeriu que ficará melhor ainda. Seus códigos estão maravilhosos e certos!
Se quiser evoluir mais seu código tente criar mensagens de erro, para que quando o usuário digite fora desse intervalo permitido ele receba o erro e o programa não continue até receber uma entrada válida. Lembre-se de avisar qual o intervalo permitido antes de solicitar a idade ao usuário.
Por exemplo:
Qual sua idade? (de 0 à 100 anos) 20 //o programa irá continuar
Qual sua idade? (de 0 à 200 anos) 210 Poxa essa não é uma idade válida :(
Utilizei 200 para dar uma margem bem grande, já que há pessoas com mais de 100 anos por ai. Mas esse intervalo mudar dependendo do contexto, e cabe ao programador decidir.
Espero ter ajudado, quaisquer outras dúvidas estamos a disposição.
-
-
1 de setembro de 2021 às 18:23 #74611
Lucas Maciel Francisco
Participanteooh, Ok, muito obrigado pela a ajuda!
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.