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:
1 2 3 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 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 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 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 Assim fui testando cada uma das posições. O algoritmo em Portugol ficou assim: algoritmo "3 número na crescente" //111 – ok //321 - ok 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 Só para incrementar o código e a função. Como você fez o seu?2 3 e 1 3 2; 1 3 e 2 3 1; 1 2 e 3 2 1
escreval(a,b,c)
fimse
escreval(a,c,b)
fimse
escreval(b,a,c)
fimse
escreval(c,a,b)
fimse
// 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)
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
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
escreval("Todos são iguais")
fimse
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