jacob navia said:
Saurabh Saxena said:
can we write the program to write no 1 to n without using
switch,do,while,for,goto,if and conditional operator where n will be
input by user.
OK OK Here it is:
#include <stdio.h>
#include <stdlib.h>
typedef void (*callback)(int);
void zero(int);
void greaterZero(int);
callback callbackTable[2] = {
zero,
greaterZero
};
void zero(int a)
{
exit(0);
}
void greaterZero(int a)
{
printf("%d\n",a--);
callbackTable[a>0](a);
}
Isn't a>0 a conditional expression? Also your program counts down
instead of up. Here's your program modified to remove the conditional
expression and to count up as stated by the OP..
#include <stdio.h>
#include <stdlib.h>
typedef void (*callback)(int);
void zero(int);
void greaterZero(int);
int orig_n;
callback callbackTable[3];
void zero(int a)
{
exit(0);
}
void greaterZero(int a)
{
printf("%d\n",orig_n-a+1);
a--;
callbackTable[(a+1)%2 + (a-1)%2]=greaterZero;
callbackTable[a%2]=zero;
callbackTable[(a+1)%2 + (a-1)%2](a);
}
int main(int argc,char *argv[])
{
orig_n=atoi(argv[1]);
greaterZero(orig_n);
return 0;
}
It relies on the fact that the sign of (a-1)%2 changes when a becomes equal
to 0. Notice that in this version I have 3 entries in the callback table
of which only entries 0 and 2 are used....
Sean