05.01
2025
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.