#include <stdio.h>
#include <math.h>
const int NN= 10 ;
double a,b;
int counter= 0 ;
typedef void ( * oper) ( void ) ;
struct argList{ double * refVar; double val; } ;
argList* data;
void meanArifGeom( void ) {
double x= 0.5 * ( a+ b) ;
double y= sqrt ( a* b) ;
a= x; b= y;
printf ( "x = %.10f y = %.10f\n " ,a,b) ;
return ;
}
void setVar( void ) {
argList* reff= & ( data[ counter] ) ;
* ( reff- > refVar) = reff- > val;
return ;
}
void func1( double x) {
printf ( "x = %f\n " ,x) ;
return ;
}
int main( void )
{
void ( * aa) ( double ) = & func1; //just =func1; works too
( * aa) ( 15.0 ) ; //aa(15.0); works too
oper funcStack[ NN] = { NULL } ;
argList funcArgs[ NN] = { NULL } ;
data= funcArgs;
funcStack[ counter] = & setVar; argList* curr= & ( data[ counter] ) ; curr- > refVar= & a; curr- > val= 2.0 ; counter++ ;
funcStack[ counter] = & setVar; curr= & ( data[ counter] ) ; curr- > refVar= & b; curr- > val= 3.0 ; counter++ ;
for ( int i= counter; i< NN; i++ ) { funcStack[ i] = & meanArifGeom; }
counter= 0 ;
while ( counter< NN) { ( * funcStack[ counter] ) ( ) ; counter++ ; }
return 0 ;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8bWF0aC5oPgoKY29uc3QgaW50IE5OPTEwOwpkb3VibGUgYSxiOwppbnQgY291bnRlcj0wOwoKdHlwZWRlZiB2b2lkICgqb3Blcikodm9pZCk7CnN0cnVjdCBhcmdMaXN0e2RvdWJsZSogcmVmVmFyOyBkb3VibGUgdmFsO307CgphcmdMaXN0KiBkYXRhOwoKdm9pZCBtZWFuQXJpZkdlb20odm9pZCkgewogIGRvdWJsZSB4PTAuNSooYStiKTsKICBkb3VibGUgeT1zcXJ0KGEqYik7CiAgYT14O2I9eTsKICBwcmludGYoInggPSAlLjEwZiAgeSA9ICUuMTBmXG4iLGEsYik7CiAgcmV0dXJuOwp9Cgp2b2lkIHNldFZhcih2b2lkKSB7CglhcmdMaXN0KiByZWZmPSYoZGF0YVtjb3VudGVyXSk7CgkqKHJlZmYtPnJlZlZhcik9cmVmZi0+dmFsOwogICAgcmV0dXJuOwp9Cgp2b2lkIGZ1bmMxKGRvdWJsZSB4KSB7CiAgcHJpbnRmKCJ4ID0gJWZcbiIseCk7CiAgcmV0dXJuOwp9CgppbnQgbWFpbih2b2lkKQp7Cgl2b2lkICgqYWEpKGRvdWJsZSk9JmZ1bmMxOy8vanVzdCA9ZnVuYzE7IHdvcmtzIHRvbwoJKCphYSkoMTUuMCk7Ly9hYSgxNS4wKTsgd29ya3MgdG9vCgoJb3BlciBmdW5jU3RhY2tbTk5dPXtOVUxMfTsKCWFyZ0xpc3QgZnVuY0FyZ3NbTk5dPXtOVUxMfTsKCWRhdGE9ZnVuY0FyZ3M7CglmdW5jU3RhY2tbY291bnRlcl09JnNldFZhcjthcmdMaXN0KiBjdXJyPSYoZGF0YVtjb3VudGVyXSk7Y3Vyci0+cmVmVmFyPSZhO2N1cnItPnZhbD0yLjA7Y291bnRlcisrOwoJZnVuY1N0YWNrW2NvdW50ZXJdPSZzZXRWYXI7Y3Vycj0mKGRhdGFbY291bnRlcl0pO2N1cnItPnJlZlZhcj0mYjtjdXJyLT52YWw9My4wO2NvdW50ZXIrKzsKCWZvcihpbnQgaT1jb3VudGVyO2k8Tk47aSsrKSB7ZnVuY1N0YWNrW2ldPSZtZWFuQXJpZkdlb207fQoJY291bnRlcj0wOwoJd2hpbGUoY291bnRlcjxOTikgeygqZnVuY1N0YWNrW2NvdW50ZXJdKSgpO2NvdW50ZXIrKzt9CglyZXR1cm4gMDsKfQoK