Aula 10 - Exercício de lógica de programação
Questão#
Escreva um programa em que o usuário irá informar dois números INTEIROS, a
e b
consecutivamente e você deverá trocar os valores de a
e b
SEM UTILIZAR UMA VARIÁVEL AUXILIAR de modo que:
a
esteja com o MENOR valor;b
o MAIOR valor.
Dica
Saber que são números inteiros é importante para a resolução do exercício.
Tente lembrar das operações que podem ser realizadas com os números.
Exemplo#
$ A: 10
$ B: 5
A: 5
B: 10
$ A: 1
$ B: 2
A: 1
B: 2
Solução#
Para este problema existem várias formas de resolver, mas a mais fácil seria utilizar uma variável auxiliar para tentar solucionar o problema, porém o enunciado deixa claro que não podemos utilizar uma variável auxiliar, portanto vamos tentar resolver de outras formas.
Solução 1#
Uma maneira que podemos resolver é apenas modificando a forma de exibir a informação. Aos olhos do usuário nós “resolvemos” o problema, mas de fato NÃO trocamos os valores.
algoritmo "solucao-1"
var
a, b: inteiro
inicio
escreva("A: ")
leia(a)
escreva("B: ")
leia(b)
se (a > b) entao
escreval("A:", b)
escreva("B:", a)
senao
escreval("A:", a)
escreva("B:", b)
fimse
fimalgoritmo
Solução 2#
Uma forma que podemos “resolver” é apenas pedir mais de uma vez a informação do usuário, assim poderemos realizar a troca das variáveis. Aos olhos do usuário nós “resolvemos” o problema da troca, mas introduzimos um novo que é a necessidade dele ter que informar um dos valores mais uma vez.
algoritmo "solucao-2"
var
a, b: inteiro
inicio
escreva("A: ")
leia(a)
escreva("B: ")
leia(b)
se (a > b) entao
a <- b
escreva("A: ", a)
leia(b)
fimse
escreval("A:", a)
escreva("B:", b)
fimalgoritmo
Solução 3#
Como o exercício nos diz que os valores são números inteiros, podemos utilizar as operações de multiplicação e divisão.
algoritmo "solucao-3"
var
a, b: inteiro
inicio
escreva("A: ")
leia(a)
escreva("B: ")
leia(b)
se (a > b) entao
a <- a * b
b <- a DIV b
a <- a DIV b
fimse
escreval("A:", a)
escreva("B:", b)
fimalgoritmo
Nota
Observe que foi utilizado o operador de divisão inteira (DIV
) para que o resultado da divisão seja um número inteiro e o Visualg não “reclame” que estamos atribuindo um número real a uma variável inteira.
Aviso
Observe que esta solução não funciona se um dos valores for o número zero, pois em um dos passos iremos dividir por zero.
E além do mais, como iremos multiplicar algum valor por zero, o resultado será zero e isso não é “reversível”, ou seja, não dá para realizar qualquer operação matemática para obter o valor que foi multiplicado por zero.
Solução 4#
Uma outra forma de resolver o problema é utilizando as operações de soma e subtração.
algoritmo "solucao-4"
var
a, b: inteiro
inicio
escreva("A: ")
leia(a)
escreva("B: ")
leia(b)
se (a > b) entao
a <- a + b
b <- a - b
a <- a - b
fimse
escreval("A:", a)
escreva("B:", b)
fimalgoritmo
Nota
Observe que essa foi a melhor das soluções apresentados, pois não temos problemas com qualquer valor que o usuário informar.
Conclusão#
Além de praticar o raciocínio lógico, você também viu que há diversas formas de resolver um mesmo problema. E isso é muito importante, pois em um ambiente de trabalho você pode encontrar diversas soluções para o mesmo problema.
Aula em vídeo#
Caso prefira também existe o conteúdo em forma de vídeo