Não sei quantos colegas conseguiram fazer as combinações da tarefa do prof. Jonatas. A tarefa consiste no seguinte:
- leia três valores e escreva-os em ordem crescente.
É fácil? Sim é fácil. É rápido? Não, não é rápido, afinal você deve fazer e testar todas as possíveis posições dos números. Para facilitar o trabalho, antes de iniciar eu procurei saber as posições dos números, e se não errei, estas são as posições possíveis:
123 e 132;
213 e 231;
312 e 321
Para ordenar 123.
Ainda que os números já estejam na ordem crescente, é necessário fazer a comparação. Eu fiz assim:
se(a<b) e (b<c) e (c>a) e (c>b) entao
escreval(a,b,c)
fimse
Para ordenar 132:
Nesta combinação, o número 1=a; 3=c; 2=b. Assim, fiz a comparação para determinar quem é maior, e quem é menor:
se(a<b) e (a<c) e (b>a) e (b>c) entao
escreval(a,c,b)
fimse
Para ordenar 213
Nesta ordem o valor 1=b; 2=a; 3=c. Assim fiz a comparação para determinar a posição de cada um e escrever na ordem exigida:
se(a>b) e (a<c) e (b<c) e (c>a) entao
escreval(b,a,c)
fimse
Para ordenar 231
Nesta ordem, o valor menor 1 foi digitado como terceiro número, ou seja, está em c. O valor 2 está em a. E e o número 3 está em b. Reorganizando:
se(c<a) e (c<b) e (b>c) e (b>a) entao
escreval(c,a,b)
fimse
Assim fui testando cada uma das posições. O algoritmo em Portugol ficou assim:
algoritmo "3 número na crescente"
// Função : VERIFICA A POSIÇAO DOS NÚMEROS
// Autor : ADAO BRAGA
// Data : 28/04/2011
// Seção de Declarações
var
a,b,c:inteiro
inicio
// Seção de Comandos
repita
escreva("PRIMEIRO Nº ")
leia(a)
escreva("SEGUNDO Nº ")
leia(b)
escreva("TERCEIRO Nº ")
leia(c)
//111 – ok
se(a=b) e (a=c) e (b=c) entao
escreval("Todos são iguais")
fimse
//123 - ok
se(a<b) e (b<c) e (c>a) e (c>b) entao
escreval(a,b,c)
fimse
//132 - ok
se(a<b) e (a<c) e (b>a) e (b>c) entao
escreval(a,c,b)
fimse
//213 - ok
se(a>b) e (a<c) e (b<c) e (c>a) entao
escreval(b,a,c)
fimse
//231 - ok
se(c<a) e (c<b) e (b>c) e (b>a) entao
escreval(c,a,b)
fimse
//321 - ok
se(c<a) e (c<b) e (b<a) e (b>c) entao
escreval(c,b,a)
fimse
//312 - ok
se(a>b) e (a>c) e (b<c) e (c<a) entao
escreval(b,c,a)
fimse
fimrepita
fimalgoritmo
Fiz várias comparações com SE, e não usei nenhum SENÃO, bem como, nenhum SE aninhado. Testei todas as opções, e todas ordenaram os números corretamente.
A boa noticia é que existem funções nas linguagens de programação em que esta tarefa é facilitada. Como por exemplo o uso de Vetor, matriz, conjunto, e uma série de meios para que dado não apenas 3 números, mas, centenas, milhares, milhões de números, de registros, … e há comandos que realiza a tarefa.
E por que e para que este exercício? Para exercitar oras! Eu passei pelo menos 4 horas para testar todas as possíveis posições, e para comparar todas as posições.
Inserir esta condição também:
se(a=b) e (a=c) e (b=c) entao
escreval("Todos são iguais")
fimse
Só para incrementar o código e a função. Como você fez o seu?
E se ocorrer uma situação do tipo 112 223 331,
ResponderExcluirFoi solicitado na atividade para fazer testando todas as possibilidades, e assim foi feito. Mas, existe outros métodos mais rápidos e eficiente de realizar a tarefa. E foi feita com o uso de variável auxiliar!
ResponderExcluirO código pode ser mais simples assim:
ResponderExcluirse(a=b) e (b=c) entao
escreval("Todos são iguais")
fimse
boa pergunta anonimo, e vou fazer outra, nao tem outra forma de fazer dem fazer esse monte de "se" , tipo eele reconhecer o menor e colocar ele sempre na frente?
ResponderExcluir