Информатика и технология программирования


Вопросы без ответов


Примеры 1-5 содержат итерационные циклы, используемые в приближенных вычислениях. Содержательно определить смысл алгоритма и назначение указателя на функцию. В остальных примерах определить результат.


//------------------------------------------------------bk56-04.cpp


double F1(double a, double b, double (*pf)(double))
{ double m;
if ((*pf)(a) * (*pf)(b) &#62 0 )return(a);
while ( b-a &#62 0.0001 )
{
m = (b + a)/2;
if ((*pf)(a) * (*pf)(m) &#60 0) b=m; else a=m;
}
return a;
}
//------------------------------------------------------- 2


double F2(double x, double s0, double (*pf)(double,int))
{ double s; int n;
for (n=1, s=0.0; fabs(s0) &#62 0.0001; n++)
{ s += s0; s0 = s0 * (pf)(x,n); }
return s; }
double ff(double x, int n) { return( x/n); }
void main()
{ double x,y; y = F2(x, 1, ff); }
//------------------------------------------------------- 3


double F(double a, double b, double (*pf)(double))
{ double dd;
for (dd = 0.0001; b-a &#62 dd;)
if ((*pf)(a) &#62 (*pf)(b)) b -=dd; else a +=dd;
return a;
}
//------------------------------------------------------- 4


double F4(double x, double (*pf)(double))
{ double x1;
do {
x1 = x; x = (*pf)(x1) + x1;
if (fabs(x) &#62 fabs(x1)) return(0.0);
}
while (fabs(x1-x) &#62 0.0001);
return x;
}
//------------------------------------------------------- 5


double F5(double a, double b, int n, double(*pf)(double))
{ double s,h,x;
for (s=0., x=a, h = (b-a)/n; x &#60=b; x+=h)
s += (*pf)(x) * h;
return s;}
extern double sin(double);
void main() { cout &#60&#60 F5(0.,1.,40,sin)); }
//------------------------------------------------------- 6


void ( *P(void(*ff)(void)))(void) { return ff; }
void foo(void){ cout &#60&#60 "I'm foo" &#60&#60 endl; }
void main(){(*P(foo))();}
//------------------------------------------------------- 7


int ( *P(int(*ff)(int)))(int) { return ff; }
int inc(int n){ return n+1; }
void main(){ cout &#60&#60 (*P(inc))( 5);}
//------------------------------------------------------- 8


typedef void (*PF)(void);
PF P(PF ff) { return ff; }
void foo(void){ cout &#60&#60 "I'm foo" &#60&#60 endl; }
void main(){(*P(foo))();}
//------------------------------------------------------- 9


typedef int (*PF)(int);
PF P(PF ff) { return ff; }
int inc(int n){ return n+1; }
void main(){ cout &#60&#60 (*P(inc))( 7);}
//------------------------------------------------------ 10


double P(double(*ff [])(double) ,int n, double x )
{ return (*ff [n])(x); }
double(*FF [])(double) ={sin,cos,tan};
void main(){ cout &#60&#60 P( FF,1,0.5);}
//------------------------------------------------------ 11


typedef double(*PF)(double) ;
double P( PF ff [],int n, double x )
{ return (*ff [n])(x); }
PF FF []={sin,cos,tan};
void main(){ cout &#60&#60 P( FF,2,1.5);}





Начало  Назад  Вперед



Книжный магазин