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!
Melhor tutorial, melhor explicação, melhor exemplo...simplesmente fantástico o site.
ResponderExcluirIndiquei pra toda turma da facul em fevereiro, e recebo agradecimentos até hoje dezembro
top
ResponderExcluirEu não fiz como tá aí mas parece que deu certo
ResponderExcluir# 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!")
excelente explicação... Eu tentei fazer de outro modo é ficou assim.
ResponderExcluirnum1 = 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)
Bom Dia, e se eu quisesse colocar o nume de do cliente junto com os valores
ExcluirÓla Maycon seu codigo apresenta alguns erros nas respostas então eu melhorei ele pra voce :)
Excluirnum1 = int(input("Digite um numero:"))
num2 = int(input("Digite um numero:"))
num3 = int(input("Digite um numero:"))
if num1 > num2 and num1>num3 and num2 > num3:
print(num1, num2, num3)
elif num1 > num2 and num1>num3 and num3 > num2:
print(num1, num3, num2)
elif num2 > num3 and num2 > num1 and num3 > num1:
print(num2, num3, num1)
elif num2 > num3 and num2 > num1 and num1 > num3:
print(num2, num1, num3)
elif num3 > num1 and num3>num2 and num2 > num1:
print(num3, num2, num1)
elif num3 > num1 and num3 > num2 and num1 > num2:
print(num3, num1, num2)
Pode se retirar o último if e coloca um while para aproveitar o primeiro if
ResponderExcluirMeu codigo ficou gigante, mas funcionou....
ResponderExcluirnum1=int(input("Digite um numero inteiro:"))
num2=int(input("Digite aqui outro numero inteiro:"))
num3=int(input("Digite o terceiro numeo inteiro:"))
if num1>num2 and num1>num3:
maior=num1
if num2>num3:
meio_termo=num2
menor=num3
else:
meio_termo=num3
menor=num2
if num2>num1 and num2>num3:
maior=num2
if num1>num3:
meio_termo=num1
menor=num3
else:
meio_termo=num3
menor=num1
if num3>num1 and num3>num2:
maior=num3
if num1>num2:
meio_termo=num1
menor=num2
else:
meio_termo=num2
menor=num1
print(maior, meio_termo, menor)
esse é o exemplo
ExcluirO que é esse aux?
ResponderExcluirVariável auxiliar
ExcluirAchei um meio bem fácil e rapido de fazer, e funciona com o número fixo de variaveis, como nos exemplos acima:
ResponderExcluirlista =(a,b,c)
ordenada = sorted(lista)
print(ordenada[2])
print(ordenada[1])
print(ordenada[0])
Nesse ponto do curso, ainda não estudamos sequências (listas, tuplas...), que foi o que você usou. O Python tem muita funcionalidade pronta, realmente.
ExcluirLembrando que não foi você quem fez, na verdade foi o Python. O objetivo da gente ter ensinado do jeito que fizemos foi ensinar a lógica por trás da coisa, é importante saber, melhora seu raciocínio, criatividade e te faz um programador melhor, mais 'resolvedor de problema'.
Estou tendo muita dificuldade com problemas assim com 3 variáveis. Teria alguma dica para pode melhorar o raciocínio? perco muito tempo tentando entender algo 'simples'. Obrigado!
Excluir"""Faça um Programa que leia três números e mostre o maior e o menor deles."""
ResponderExcluirnum1 = int(input('Digite o primeiro número: '))
num2 = int(input('Digite o segundo número: '))
num3 = int(input('Digite o terceiro número: '))
maior = num1
menor = num1
if num2 > maior:
maior = num2
if num3 > maior:
maior = num3
if num2 < menor:
menor = num2
if num3 < menor:
menor = num3
print(f'O maior número é {maior} e o menor é {menor}.')
Eu fiz em Lua Script, mas mesmo assim eu gostaria de mostrar como ficou o resultado segundo minha lógica:
ResponderExcluir--[[
9 - Faça um Programa que leia três números e mostre-os em ordem decrescente.
--]]
print('Digite um número: ')
num1 = io.read()
print('Digite um número: ')
num2 = io.read()
print('Digite um número: ')
num3 = io.read()
maior, meio, menor = num1, num1, num1
-- EM BAIXO DEFINE QUEM VAI SER O MAIOR NÚMERO
if num2 > maior and num2 > num3 then
maior = num2
elseif num3 > maior and num3 > num2 then
maior = num3
end
-- EM BAIXO DEFINE QUEM VAI SER O MENOR NÚMERO
if num2 < menor and num2 < num3 then
menor = num2
elseif num3 < menor and num3 < num2 then
menor = num3
end
--[[
EM BAIXO DEFINE QUEM VAI SER O NÚMERO ENTRE O MAIOR E O MENOR. OBSERVE QUE ESTA VERIFICAÇÃO FICOU POR ÚLTIMO. A LÓGICA DISSO É FAZER COM QUE DECIDA, APÓS TER O MAIOR E MENOR NÚMERO, QUEM FICARÁ ENTRE O MAIOR E O MENOR DOS NÚMEROS. CASO ESTA VERIFICAÇÃO NÃO ESTEJA POR ÚLTIMO, O PROGRAMA IRÁ FAZER COM QUE OS RESULTADOS PASSAM A SE IGUALAR ENTRE OS OUTROS.
--]]
if num2 < maior and num2 > menor then
meio = num2
elseif num3 < maior and num3 > menor then
meio = num3
end
print(maior, meio, menor)
confesso que já estava com vontade de chorar em posição fetal, porém decide fazer essa lógica no papel para eu poder visualizar melhor e bingo! finalmente entendi uma coisa simples que pode ser bem poderoso em certas ocasiões.
ResponderExcluirMuito top!!!
ResponderExcluirn1 = input('Digite o primeiro: ')
ResponderExcluirn2 = input('Digite o segundo: ')
n3 = input('Digite o terceiro: ')
if n1 > n2 and n2 > n3:
print('Do maior para o menor: {} {} {}'.format(n1, n2, n3))
elif n2 > n1 and n1 > n3:
print('Do maior para o menor: {} {} {}'.format(n2, n1, n3))
elif n1 < n3 and n2 > n3:
print('Do maior para o menor: {} {} {}'.format(n2, n3, n1))
elif n3 > n2 and n2 > n1:
print('Do maior para o menor: {} {} {}'.format(n3, n2, n1))
elif n1 > n2 and n2 < n3 and n1 < n3:
print('Do maior para o menor: {} {} {}'.format(n3, n1, n2))
elif n1 > n2 and n3 > n2:
print('Do maior para o menor: {} {} {}'.format(n1, n3, n2))
elif n1 == n2 == n3 or n2 == n1 == n3 or n3 == n2 == n1:
print('Numeros iguais!')
maior = menor = 0
ResponderExcluirfor n in range(1,4):
num = int(input(f"{n}º número: "))
if n == 1:
maior = menor = num
if num > maior:
maior = num
if num < menor:
menor = num
print("O número maior é:",maior)
print("O número menor é:",menor)
n1 = int (input ('Digite um número: '))
ResponderExcluirn2 = int (input ('Digite um número: '))
n3 = int (input ('Digite um número: '))
print (n1,'-',n2,'-',n3)
if n1 > n2 and n1 > n3:
maior = n1
if n2 > n3:
meio = n2
menor = n3
else:
meio = n3
menor = n2
if n2 > n1 and n2 > n3:
maior = n2
if n1 > n3:
meio = n1
menor = n3
else:
meio = n3
menor = n1
if n3 > n1 and n3 > n2:
maior = 3
if n1 > n2:
meio = n1
menor = n2
else:
meio = n2
menor = n1
print (maior,'-',meio,'-',menor)
input ()
Boa noite! Primeiro gostaria de agradecer pelo curso.
ResponderExcluirTenho uma dúvida. Existe uma forma de saber quantas vezes eu devo verificar a sequência baseando-se no número de termos? Se alguém puder responder eu agradeço.
Aqui, fiz em duas formas para responder a questão:
ResponderExcluir'''
Forma 01
'''
number_01 = int(input('Informe o valor do número_01: '))
number_02 = int(input('Informe o valor do número_02: '))
number_03 = int(input('Informe o valor do número_03: '))
if number_01 < number_02 < number_03:
print(number_01, number_02, number_03)
elif number_01 < number_03 < number_02:
print(number_01, number_03, number_02)
elif number_02 < number_01 < number_03:
print(number_02, number_01, number_03)
elif number_02 < number_03 < number_01:
print(number_02, number_03, number_01)
elif number_03 < number_02 < number_01:
print(number_03, number_02, number_01)
else:
print(number_03, number_01, number_02)
'''
Forma 02
'''
number_01 = int(input('Informe o valor do número_01: '))
number_02 = int(input('Informe o valor do número_02: '))
number_03 = int(input('Informe o valor do número_03: '))
numeros = []
numeros.append(number_01)
numeros.append(number_02)
numeros.append(number_03)
print(sorted(numeros, reverse=True))
Caros, preferi criar uma lista auxiliar e ir adicionando os números com o método WHILE e as condições do IF. No final ,utilizei o FOR para printar os números, já em ordem decrescente, em uma única coluna:
ResponderExcluirlista_nrs = []
while len(lista_nrs) != 3:
numero = input( 'Digite um numeral aqui').strip()
if not numero.isnumeric or numero == '':
print( 'Digite um número válido' )
else:
lista_nrs.append(numero)
lista_nrs.sort(reverse = True)
for numero in lista_nrs:
print(numero)
Output:
6
5
4
Caros, preferi criar uma lista auxiliar e ir adicionando os números com o método WHILE e as condições do IF. No final ,utilizei o FOR para printar os números, já em ordem decrescente, em uma única coluna:
ResponderExcluirlista_nrs = []
while len(lista_nrs) != 3:
numero = input( 'Digite um numeral aqui').strip()
if not numero.isnumeric or numero == '':
print( 'Digite um número válido' )
else:
lista_nrs.append(numero)
lista_nrs.sort(reverse = True)
for numero in lista_nrs:
print(numero)
Output:
6
5
4
Eu pensei desse jeito:
ResponderExcluirnume1 = int(input('Primeiro numero:'))
nume2 = int(input('Segundo numero:'))
nume3 = int(input('Terceiro numero:'))
listert = [nume1, nume2, nume3]
listert.sort(reverse = True)
print(listert)