Ir para o conteúdo

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.

solucao-1.alg
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.

solucao-2.alg
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.

solucao-3.alg
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.

solucao-4.alg
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