sexta-feira, 23 de setembro de 2005

Contando de 1 a 100 (ANSI C)

É o quê, hômi?
Contando de 1 a 100, sem uso de condicionais (if-then), nem loops. Lembrem que os operadores lógicos também não são permitidos (&&, ||, etc...). Mas, porque não pode usar os operadores lógicos?
Porque dizer "sem instruções condicionais", significa "sem operadores condicionais" em C. Isso se justifica pelo fato que todas as expressões em C (e C++) são sentenças (statements), uma vez que você sempre pode ignorar o resultado de uma expressão. E todos os operadores (incluindo os binários - &&, ||, ~, etc. - e unários) são também expressões, logo (juntando 1 com 2 na breve demonstração acima) todos os operadores são também sentenças.

(código obtido de Sitikant Sahu/Índia)

#include <stdio.h>
void func2(int lower,int upper);
void func(int lower,int upper)
{
printf("%d\n",upper);
func2(lower,--upper);
}
void func3(int lower,int upper)
{
exit(-1);
}
void func2(int lower,int upper)
{
void (*a)(int,int);
a = ((int)(&func) * !(!(upper-lower))) + ((int)(&func3) * (!(upper-lower))) ;
a(lower,upper);
}
main()
{
int lower,upper;
scanf("%d",&lower);
scanf("%d",&upper);

func2(lower-1,upper);
}