No outro dia vi uma expressão assim:
if(((situacao == situacao_a) ||
((situacao == situacao_b) && (strcmp(string,UMA_MACRO) == 0))) ||
((situacao == situacao_c) ||
((situacao == situacao_d) && (strcmp(string,UMA_MACRO) == 0))))
{
/* ... */
}
Este código acima está abaixo do ótimo, tanto em geração de código quanto em desempenho. Mas como otimizar?
Antes de continuar lendo, que tal você mesmo tentar fazer uma versão melhor dele? O artigo sobre avaliação incompleta pode ajudar.
Eu já tenho um blog principalmente de fotografia, mas aqui pretendo falar de computação, dando dicas, truques etc. O nome veio do fictício Necronomicon, que pelo que eu li, seria um livro praticamente perdido, com poucos exemplares sobreviventes, e ainda por cima proibido, ensinando uma arte perdida, muito pouco conhecida, chegando a ser muito perigosa. É neste sentido que uso como origem do nome deste blog. Para maiores detalhes, leia o artigo mais antigo publicado.
domingo, 25 de março de 2012
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?
C: Avaliação incompleta
Existem duas formas de avaliação em expressões lógicas, a avaliação completa e a incompleta.
Por definição, no Pascal a avaliação sempre é completa (O Turbo Pascal tinha uma opção para mudar este comportamento.), e no C é incompleta.
O que é isto? Quais são as consequências? Como melhor aproveitar isto.
Por definição, no Pascal a avaliação sempre é completa (O Turbo Pascal tinha uma opção para mudar este comportamento.), e no C é incompleta.
O que é isto? Quais são as consequências? Como melhor aproveitar isto.
Assinar:
Postagens (Atom)