Boa noite. Algum dos senhores conhece ou já possui uma função que retorne o maior valor negativo entre três números?
Algo muito parecido com a solução dessa postagem, voltado para o excel:
Basicamente, tenho três números e preciso retornar o maior valor negativo.
A princípio usei a função max
int a = max(max(x,y),z)
Essa função só funciona caso todos os valores (x, y e z) sejam negativos. Se um deles for positivo, então esse valor é que será retornado, e isso é um problema.
Para contornar a situação, fiz lógicas com if (que funciona, mas queria evitar, por isso abri o tópico)
if (x < 0 && y < 0 && z < 0) { //Todos os valores negativos
a = max(max(x, y), z);
} else if (x < 0 && y < 0 && z > 0) { //Valores x e y negativos
a = max(x, y);
} else if (x < 0 && y > 0 && z < 0) { //Valores x e z negativos
a = max(x, z);
} else if (x > 0 && y < 0 && z < 0) { //Valores y e z negativos
a = max(y, z);
} else if (x < 0 && y > 0 && z > 0) { //Apenas valor x negativo
a = x;
} else if (y < 0 && x > 0 && z > 0) { //Apenas valor y negativo
a = y;
} else if (z < 0 && x > 0 && y > 0) { //Apenas valor z negativo
a = z;
}
Exemplo de aplicação prática (caso queiram saber o motivo disso tudo):
Imagine um sistema de despertador, que tem três horários programados por dia.
O arduino fica em modo sleep, e desperta quando o alarme do RTC (modelo DS3231) dispara. Esse alarme é configurado para quando o horário atual == horário programado.
Depois que o alarme desperta, o arduino retornará ao modo sleep, mas antes, precisa atualizar o horário do próximo alarme, e para isso, precisa saber qual é o próximo horário programado.
Para saber qual é o próximo horário programado faz-se uma subtração entre horário atual e horário programado 1, 2 e 3 (vulgo x, y e z usados acima).
O resultado dessa subtração determina qual é o próximo horário a ser definido no alarme do RTC. Se o resultado for negativo, significa que esse horário programado ainda não foi disparado hoje. Se for positivo, significa que esse horário já foi disparado hoje. Ou seja, priorizo os valores negativos, e procuro pelo maior (mais próximo de 0). Caso todos sejam positivos, aí procuro pelo maior entre eles (o que corresponderia ao primeiro alarme do dia seguinte).
tl;dr Função ou forma de obter o maior valor NEGATIVO entre três números inteiros aleatórios com valores de -x à +x