Python - Três números em ordem decrescente

"Faça um Programa que leia três números e mostre-os em ordem decrescente."



Invertendo dois a dois

O grande segredo desse tipo de algoritmo, é comparar e trocar valor das variáveis, duas a duas.

Por exemplo, vamos pegar a sequência: 10 - 20 - 30
Primeira posição: 10
Segunda posição: 20
Terceira posição: 30

Primeiro vamos comparar a segunda posição com a terceira.
A terceira posição é maior que a segunda? Se for, inverte.
Agora fica: 10 - 30 - 20

Pronto, colocamos em ordem decrescente as duas últimas posições.
Agora vamos comparar a primeira posição com a segunda.

A segunda posição tem um valor maior (30) que a primeira (10)?
Sim! Tem! Então inverte essas duas.
Agora fica: 30 - 10 - 20

Note que ao fazer isso, da direita pra esquerda, pegando duas a duas a posição, jogamos sempre o maior número pro começo da ordem.

Por fim, vamos comparar novamente a segunda com a terceira posição.
A terceira é maior que a segunda? Se for, troca! E é.
Agora fica: 30 - 20 - 10

Algoritmo:
1. Compara as duas últimas posições
2. Compara as duas primeiras posições
3. Compara novamente as duas últimas posições


primeiro = int(input('Primeiro numero: '))
    segundo  = int(input('Segundo numero : '))
    terceiro = int(input('Terceiro numero: '))

    print(primeiro,'-',segundo,'-',terceiro)

    if(terceiro > segundo):
        aux = terceiro
        terceiro = segundo
        segundo = aux

    if(segundo > primeiro):
        aux = segundo
        segundo = primeiro
        primeiro = aux

    if(terceiro > segundo):
        aux = terceiro
        terceiro = segundo
        segundo = aux

    print(primeiro,'-',segundo,'-',terceiro)

Mais a frente, estudaremos o algoritmo de bubble sort, onde vamos aprender a ordenar listas de números de qualquer tamanho. A lógica é a mesma: ir comparando dois a dois, do fim pro começo (ou começo pro fim - depende se quer ordem crescente ou decrescente).






Treinando mais ordenação

Só pra treinar, vamos pegar uma sequência maior, de 4 números:
10 - 20 - 40 - 30

Vamos comparar dois a dois.
1. Quarta posição com a terceira: tá ok, 40 é maior que 30, não invertemos.
Ordem: 10 - 20 - 40 - 30

2. Agora a terceira posição (40) com a segunda (20):
40 é maior, então inverte.
Agora fica: 10 - 40 - 20 - 30

3. Segunda com a primeira posição: inverte, pois 40 > 10
Agora fica: 40 - 10 - 20 - 30

4. Chegamos no começo da lista. A primeira posição tem o maior número, que é o correto. Agora vamos comparar tudo de novo, da direita pra esquerda, porém vamos até a segunda posição, pois a primeira já tem o maior.

5. Comparando quarta com terceira: inverte, pois 30 > 20
Temos: 40 - 10 - 30 - 20

6. Comparando terceira com segunda: inverte, pois 30 > 10
Temos: 40 - 30 - 10 - 20
Chegamos ao fim, e colocamos o segundo maior valor na segunda posição, como desejamos. Não mexemos mais na primeira nem na segunda posição da lista.

Agora, vamos pro começo de novo, na direita.

7. Comparando a quarta com a terceira posição: inverte, pois 20 > 10
Temos: 40 - 30 - 20 - 10

Chegamos ao fim, o terceiro maior número na terceira posição.
Automaticamente, a última posição foi preenchida e...tcharam, a lista ficou ordenada, do maior pro menor!

4 comentários:

  1. Melhor tutorial, melhor explicação, melhor exemplo...simplesmente fantástico o site.

    Indiquei pra toda turma da facul em fevereiro, e recebo agradecimentos até hoje dezembro

    ResponderExcluir
  2. Eu não fiz como tá aí mas parece que deu certo
    # 6º Ordem Decrescente
    n1=float(input("Digite o 1º número: "))
    n2=float(input("Digite o 2º: "))
    n3=float(input("Digite o 3º: "))
    if n1 > n2 > n3:
    print("Do maior para o menor:", n1,"-", n2,"-", n3)
    elif n2 > n1 > n3:
    print("Do maior para o menor:", n2,"-", n1,"-", n3)
    elif n3 > n2 > n1:
    print("Do maior para o menor:", n3,"-", n2,"-", n1)
    elif (n1 == n2 == n3) or (n2 == n1 == n3) or (n3 == n2 == n1):
    print("Números iguais!")

    ResponderExcluir
  3. excelente explicação... Eu tentei fazer de outro modo é ficou assim.

    num1 = int(input("Digite um nnumero:"))
    num2 = int(input("Digite um nnumero:"))
    num3 = int(input("Digite um nnumero:"))

    if num1 > num2 and num2 > num3:
    print(num1, num2, num3)
    elif num1 > num2 and num3 > num2:
    print(num1, num3, num2)
    elif num2 > num3 and num3 > num1:
    print(num2, num3, num1)
    elif num2 > num3 and num1 > num3:
    print(num2, num1, num3)
    elif num3 > num2 and num2 > num1:
    print(num3, num2, num1)
    elif num3 > num2 and num1 > num2:
    print(num3, num1, num2)

    ResponderExcluir