Duvida enorme sobre ex. 25

Home Fóruns Programação Básica Duvida enorme sobre ex. 25

Visualizando 4 respostas da discussão
  • Autor
    Posts
    • #63543

      olá gostaria de uma explicação melhor sobre como fazer o calculo para saber o maior meio e menor pois nao entendi quase nada entre um monte de letras a , b e c não sei pq sem o c tem que ser maior q os outros. se existir uma maneira mais fácil de explicar gostaria eu ja assisti o video 5 vezes e isso não entro na minha cabeça.

    • #63701
      FRANCISCO TADEU PEZZI
      Participante

      Olá Felipe vou tentar, Quando você cria as variáveis inteira, sejam elas a, b e c ou v1, v2, v3 ou n1, n2 ou n3 Quais que lhe agrade dentro de uma lógica,
      e atribuímos a elas valores aleatório e neste caso nos utilizamos de uma estrutura aninhada para testar as possibilidades. Começando com o caso:

      
      se (a > b) {     // Primeira condição externa
         se(c > a) {  // alocando na sequencia c > a > b    - 1º condição interna aninhada  
           maior = c
           inter = a
           menor = b
         }senao se (c > b){ // alocando que c não > a e c > b e a > b  só pode ser a > c > b    - 2º condição interna aninhada
          maior = a
          inter = c
          menor = b
         } senao { restando do primeiro se a>b a possibilidade de a>b>c   - caso as duas primeiras não correspondam.
             maior = a
             inter = b
             menor = c
         }
      }senao se (c>b){  // a não > b temos está configuração: c > b > a      - 2º condição externa
          maior = c
          inter = b
          menor = a
      } senao se (c>a) {  // a não > b temos a configuração b > c > a   - 3º condição externa
         maior = b
         inter = c
         menor = a
      } senao {   // resta a configuração a não > b : b > a > c   - Caso nenhuma das anteriores se encaixem 
        maior = b
        inter = a
        menor = c
      }
      

      Desculpe se confundi mais do que ajudei, essa é minha interpretação! Bons estudos e não desista nunca!
      Persistência tem que ser nosso lema!

    • #63702
      IcaroFilho
      Moderador

      Caro Felipe,
      eu acredito que ja tenha um tópico com este assunto. De qualquer forma vamos la..
      Este exercício não é tão difícil quanto parece, mas precisa de atenção pois ele requer atenção (vai escrever bastante)
      Como o amigo de cima postou o código (embora ele tenha feita a indentação e aninhamento, como ele copiou e colou sem formatar aqui, saiu td junto), vou argumentar baseado no código prescrito.
      Vc terá que testar as possibilidades uma a uma, fazendo os alinhamentos das condições.
      ou seja, vai encher de “se” o seu código, um dentro do outro

      se (n1 > n2){
          se (n3 > n1) {
             maior = n3 (pois n3 é maior que n1, e n1 é maior que n2)
             inter = n1 (pois n1 é maior que n2, e n1 é menor que n3)
             menor = n2 (pois n3 é maior que n1, e n2 é menor que n1)
      ...

      Para não sair escrevendo o código no IDE que escolheu e acabar se confundindo…
      Recomendo que faça um organograma com as possibilidades (vai te ajudar a visualizar melhor) e depois transcrever pra a sua IDE.

    • #63775
      Tutora Mayla
      Mestre

      Felipe, vamos falar um pouco sobre as possibilidades na hora de ordenar números.

      Se tivermos apenas um valor X, as possibilidades são:

      • X é o maior valor
      • X é o menor valor

      Pois como temos um só valor, ele ocupa essas 2 posições.

      Agora se tivermos 2 valores, X e Y, temos 2 possibilidades:

      • X > Y
      • Y > X

      Se tivermos 3 valores(X, Y e Z), como diz a questão, temos 6 possibilidades:

      • X > Y > Z
      • X > Z > Y
      • Y > Z > X
      • Y > X > Z
      • Z > Y > X
      • Z > X > Y

      Da forma que escrevi acima, poderia ser feita uma sequencia de se senao, testando as 6 possibilidades para então dizer qual delas é verdadeira. Porém como podemos notar existem mais de um caso onde uma comparação como X > Y é verdadeira. Logo para evitar duplicar esse teste podemos utilizar blocos se aninhados. Ressalto que fazer os 6 testes não estaria errado, porém além de ser uma questão onde é possível exercitar condições aninhadas, o seu uso é bom pois ajuda a entender melhor a lógica para em que situações onde a ordenação seja com maior quantidades de números o código não fique muito extenso e trabalhoso. Por exemplo se fossem para ordenar 4 números seriam 24 possibilidades, enquanto para ordenar 5 números seriam 120 possibilidades.

      Voltando a duplicação de código. Como poderíamos evitar de duplicar o teste de X > Y ?

       
      se (X > Y) {
          //aqui contempla as opções abaixo onde X > Y
          //X > Y > Z
          //X > Z > Y
          //Z > X > Y
      } senao {
        //aqui contempla as opções onde X < Y, pois consideramos aqui que se X não é maior que Y, ele entrará no grupo de menor (se desejado pode ser feita a opção para ambos serem iguais) 
          //Y > Z > X
          //Y > X > Z
          //Z > Y > X
      }
      

      De forma semelhante, dentro do se, podemos testar se Y > Z adicionando um se senao:

       
      se (X > Y) {
          //aqui contempla as opções abaixo onde X > Y
          se(Y > Z) {
              //X > Y > Z
          } senao se (Z > X){    
              //Z > X > Y
          } senao se (Z > Y) {
              //X > Z > Y
          }
      } senao {
        //aqui contempla as opções onde X < Y, pois consideramos aqui que se X não é maior que Y, ele entrará no grupo de menor (se desejado pode ser feita a opção para ambos serem iguais) 
          //Y > Z > X
          //Y > X > Z
          //Z > Y > X
      }
      

      Dentro do bloco senao a lógica é semelhante ao bloco se, basta pensar quais são os testes que devem ser feitos.
      Ressalto que o teste senao se (Z > Y) não é necessário, pois não sendo nenhuma das 2 ordens acima só resta como opção o terceira ordem. Aqui poderia ser feito apenas o senao por ultimo, mas também não há problema em realizar o teste se ajuda a entender melhor.

      Minha resolução foi diferente da do Professor Guanabara, mas como ele mesmo diz no vídeo não existe apenas uma resposta correta. Espero que explicando de outra forma outra resolução seu entendimento da questão tenha sido melhor, mas caso a dúvida ainda persista volte a entrar em contato conosco que continuaremos te ajudando.

    • #63850

      Fala pessoal,
      Obrigado pela força, só gente fera, consegui fazer o exercicio com base no código do Francisco, porém só entendi mesmo depois da explicação do Icaro simulando mentalmente com números.

      Obrigado a todos tava a dois dias travado já…rs

      • #63865
        IcaroFilho
        Moderador

        Estamos ai pra ajudar um ao outro !!!
        Com certeza sua duvida pode ser a duvida de muitos outros e as vezes o fato de postar aqui e outros usuários ajudarem com maneiras diferentes, pode ser o essencial para facilitar sua maneira de visualizar outras questões!
        Sempre que tiver duvidas, poste.. e se quiser saber se há outros modos de resolver, acho valido postar tbm…

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