#include #include #define NPMAX 100001 float fun( float x ) { float y; if( x*x > 1 ) { return(0); } else { y = pow( 1 - x*x, 0.5); return(y); } } int main() { float x[NPMAX]; float xc, dx, dy, A=0, l=0; int N; printf("Dai il nr di intervalli ( <= %d)\n", NPMAX-1); scanf("%d", &N); printf("N = %d\n", N); if ( N > (NPMAX-1)) { printf("Massimo valore consentito: %d\nRiprova!\n", NPMAX-1); return 0; } dx = 1. / (float) N; printf("dx = %f\n", dx); for(int i=0; i < (N+1); i++) { x[i] = dx * i; // si capisce che รจ uno spreco di memoria // in quanto la conoscenza simultanea di // tutti gli x[i] non serve: meglio il trucco // di memorizzare il vecchio valore ('xOld') if (i > 1) { xc = x[i] - dx/2.; A += dx * fun(xc); dy = fun(x[i]) - fun(x[i-1]); l += sqrt(dx*dx + dy*dy); } } printf("Area = %f (esatta %f)\n", A, acos(-1)/4.); printf("Arco = %f (esatto %f)\n", l, acos(-1)/2.); puts("\nStime di pi greco"); printf("Dall'area: %f\n", 4 * A); printf("Dall'arco: %f\n", 2 * l); return 0; }