sábado, 3 de março de 2012

C: Contagem de condições lógicas

Digamos que em um algoritmo é necessário que pelo menos 3 de 5 condições sejam verdadeiras para tomar uma ação. Como testar isto? Fazer um emaranhado de if? Pior, se somente 3 de 5 tem que ser verdadeiras? Fazer um emaranhado maior?

Como falado no do artigo C: Ser ou no ser - Boolean (Recomendo a leitura antes de continuar a ler este artigo.), uma operação lógica pode ser uma operação inteira que retorna 0 (falso) ou 1 (verdade). Então podemos somar o resultado das operações lógicas e ainda compará-lo:

        if(
                (
                        ( a < b ) +
                        ( b < c ) +
                        ( d < e ) +
                        ( e == f ) +
                        ( a != f )
                ) == 3
        )
        {
                /* ... */
        }

No exemplo acima, se as 3 comparações de variáveis forem verdadeiras, então o if será verdadeiro.

Este tipo de necessidade é muito rara, mas já passei por isto em um processo de detecção de formas em imagens digitalizadas.

Nenhum comentário:

Postar um comentário