DESAFIO 7
Faça um Programa que leia três números e mostre-os em ordem decrescente.
Uma estratégia:
"compara o segundo e terceiro, se segundo for menor que terceiro troca.
"compara o primeiro com o segundo, se o primeiro for menor que o segundo troca.
finalmente compara novamente o segundo com terceiro, se segundo for menor que terceiro, troca.
"exiba os números.
"compara o primeiro com o segundo, se o primeiro for menor que o segundo troca.
"exiba os números.
Passo 1
O enunciado pede que façamos um programa que leia três números e mostre-os em ordem decrescente.
Informações fornecidas (o que temos):
Três números de entrada — vou chamar esses números de
,
e
.
Uma estratégia sugerida (sequência de comparações e trocas):
(i) comparar
e
e trocar se
;
(ii) comparar
e
e trocar se
;
(iii) comparar
e
novamente e trocar se
;
Saída esperada: os três números exibidos em ordem decrescente (do maior para o menor).
Informações fornecidas (o que temos):
Observação importante: aqui eu apenas identifiquei o que o problema pede e quais dados temos. Não comecei a resolver ainda.
Passo 2
Definição das operações básicas que vamos usar (explicação didática).
Troca (swap): quando digo "trocar e
" quero dizer que eu guardo o valor de
numa variável temporária
, coloco em
o valor de
e depois coloco em
o valor de
. Em fórmulas:
Troca (swap): quando digo "trocar
Isso garante que os valores de
e
sejam trocados sem perda de informação. É uma operação padrão em algoritmos simples.
Passo 3
Explicando a comparação “se
troca”:
Quando escrevo "se então troca
e
" isso força que, depois dessa operação condicional, passe a valer
. Ou seja, a posição de
passa a guardar o maior entre os dois. Esse é o bloco elementar do algoritmo de ordenação.
Quando escrevo "se
Passo 4
Aplicando a primeira comparação sugerida: comparar
e
e trocar se
.
- Caso
: nada muda; continuamos com . - Caso
: trocamos e usando o procedimento do Passo 2, então após a troca teremos .
Objetivo desse passo: garantir que entre as posições 2 e 3, a posição 2 contenha o maior dos dois.
Passo 5
Aplicando a segunda comparação sugerida: comparar
e
e trocar se
.
- Se
: nada muda; a primeira posição já tem um valor maior ou igual que a segunda. - Se
: trocamos e ; depois da troca teremos .
Após este passo, garantimos que a posição 1 contém um valor maior ou igual à posição 2.
Passo 6
Aplicando a terceira comparação sugerida: comparar
e
novamente e trocar se
.
Por que precisamos repetir essa comparação? Porque a troca entre e
do Passo 5 pode ter movido para a posição 2 um valor menor que
. Repetindo a comparação entre
e
garantimos que a posição 2 volte a conter o maior entre os dois, ou seja
.
Depois deste terceiro passo teremos as duas desigualdades essenciais: e
. Daí decorre
, que é exatamente a ordem decrescente.
Por que precisamos repetir essa comparação? Porque a troca entre
Depois deste terceiro passo teremos as duas desigualdades essenciais:
Passo 7
Prova rápida de correção (casos e intuição):
Considere todas as ordens possíveis iniciais dos três números; a sequência de comparações e trocas acima reordena os valores em no máximo três trocas. Intuitivamente:
Considere todas as ordens possíveis iniciais dos três números; a sequência de comparações e trocas acima reordena os valores em no máximo três trocas. Intuitivamente:
- O primeiro passo garante que a maior entre
e vá para a posição 2. - O segundo passo garante que a maior entre
e o que está em posição 2 vá para a posição 1. Então a maior de todos estará em . - O terceiro passo ajusta a posição 2 contra a 3 para que a segunda maior fique em
.
Matematicamente, após esses três passos fica certo quecontém o máximo dos três, e e estão ordenados entre si, logo .
Passo 8
Pseudocódigo simples e direto (para implementar no programa). Vou escrever linha a linha; use a leitura e impressão que sua linguagem preferir:
Leia ,
,
\n
Se então\n
\n
\n
\n
FimSe\n
Se então\n
\n
\n
\n
FimSe\n
Se então\n
\n
\n
\n
FimSe\n
Escreva ,
,
(em ordem decrescente)
Leia
Se
FimSe\n
Se
FimSe\n
Se
FimSe\n
Escreva
Passo 9
Exemplo numérico passo a passo (para fixar): suponha que lemos
,
,
.
Aplicando as etapas:
Aplicando as etapas:
- Comparar
e : aqui , então trocamos e ficamos com , , . - Comparar
e : é falso, então nada muda: , , . - Comparar
e : é falso, nada muda. Resultado final exibido: . Perfeito — está em ordem decrescente.
Passo 10
Casos especiais e dicas para a prova:
- Se houver números iguais (ex.:
), o algoritmo mantém a ordem não estrita sem problemas. - Funciona para números negativos e para números com casas decimais do mesmo jeito.
- Em prova: escreva claramente as condições e a troca com uma variável temporária
. Não esqueça de repetir a comparação vs no final — é o truque que garante a ordenação dos três com poucas comparações. - Complexidade (intuitiva): no máximo 3 comparações e 3 trocas, muito eficiente para apenas três elementos.
Resposta
Leia
,
,
\n
Se então\n
\n
\n
\n
FimSe\n
Se então\n
\n
\n
\n
FimSe\n
Se então\n
\n
\n
\n
FimSe\n
Escreva ,
,
Se
FimSe\n
Se
FimSe\n
Se
FimSe\n
Escreva