Trocar Valor de Variáveis

por Fabio A. Mazzarino

Esse exercício é muito interessante, apesar de ser pouco usual, pessoalmente nunca vi um caso em que isso realmente necessário.

A proposta do exercício é trocar o valor de duas variáveis int, ou derivadas, sem utilizar uma terceira variável. Como a maioria dos exercícios mal elaborados existe a forma esperada e a forma inesperada, mas que entrega o mesmo resultado.

Técnica Esperada

Este exercício pretende fazer o aluno pensar na matemática envolvida no processo, utilizando aritimética simples pra efetuar o troca:

#include <stdio.h>

int main() {
    int x = 250;
    int y = 750;

    printf("x, y: %d, %d\n", x, y);
    x += y;
    y = x - y;
    x -= y;
    printf("x, y: %d, %d\n", x, y);
}

Executando:

$ gcc -x c -o swap swap.c
$ ./swap
x, y: 250, 750
x, y: 750, 250
$

Resolução Alternativa

O enunciado foi mal elaborado porque não coloca restrições suficientes. Para quem está acostumado a utilizar C++, vai preferir utilizar um algorítmo muito bem documentado.

#include <iostream>
#include <algorithm>

int main() {
    int x = 250;
    int y = 750;

    std::cout << "x, y: " << x << ", " << y << std::endl;
    std::swap(x, y);
    std::cout << "x, y: " << x << ", " << y << std::endl;
}

E o resultado:

$ g++ -o swap swap.cpp
$ ./swap
x, y: 250, 750
x, y: 750, 250
$

Profissionalmente

Apesar desse código dificilmente ser utilizado profissionalmente esse exercício é bom para ilustrar outra situação. O enunciado do problema não especificava exatamente os limites da solução, dando abertura a interpretações.

Ao descrever os requisitos de um sistema, é necessário tomar muito cuidado com a redação, e tentar se o mais detalhista possível. O que pode aparecer óbvio para uma pessoa, ou um time, pode não fazer parte da realidade de outra pessoa, ou outro time.

O risco maior são requisitos mal interpretados, uma falha que pode gerar discussões técnicas e comerciais muito grandes, com grande potencial para causar prejuízos. Por isso que é tão importante atenção especial na especificação dos requisitos de um sistema.