M03A07 – Maior e Menor Valores

Home Fóruns Programação Básica M03A07 – Maior e Menor Valores

Visualizando 5 respostas da discussão
  • Autor
    Posts
    • #74212

      Olá, 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..

    • #74216

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

    • #74267

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

      • #74268

        Perdã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

    • #74337
      Tutora Mayla
      Mestre

      Lucas, 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 e v2 coloque algo como maior e menorque 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 e inteiro 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.

    • #74349

      Modifiquei, 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?

      • #74408
        Tutora Mayla
        Mestre

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

    • #74611

      ooh, Ok, muito obrigado pela a ajuda!

Visualizando 5 respostas da discussão
  • Você deve fazer login para responder a este tópico.