Ciao a tutti
Sono alle prime armi in C, e devo risolvere un problema riguardo il risolvimento di un programma che calcoli l' integrale tra 0 e pi/2 di sqrt (sin(x))dx.
Ho trovato questo sorgente, qualcuno è in grado di spiegarmelo a grandi linee?
GRAZIE MILLE PER L' AIUTO!
ps: NATURALMENTE LA PRIMA PARTE LA CAPISCO, SE MI POTETE SPIEGARE QUANDO INIZIANO LE FUNZIONI (RETTANGOLO, TRAPEZIO E SIMPSON)....AH E ANCHE A COSA SERVE IL PUNTATORE (*fp)
GRAZIEEEEEEEEEEEEE
codice:#include <math.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #define A 0 /* Estremi dell’intervallo di integrazione A e B */ #define B M_PI/2 /* M_PI è la costante pigreco in C*/ double funzione(double x); double rettangoli(double(*fp)(double), double a, double b, int n); //sintassi funzione: tipo di ritorno (*nome puntatore)(parametro1, parametro2...")// double trapezi(double(*fp)(double), double a, double b, int n); double simpson(double(*fp)(double), double a, double b, int n); int main(void) //Inizio del Main// { int k, n; for (k=0;k<=11;k++) n=pow(2,k); printf(" INTEGRATE from 0 to pi/2 of sqrt sen(x)dx\n\n\n"); printf("\n RISULTATI CON I VARI METODI:\n\n\n"); printf("Metodo dei rettangoli: %f\n", rettangoli(funzione, A, B, n)); printf("Metodo dei trapezi : %f\n", trapezi(funzione, A, B, n)); printf("Metodo simpson : %f\n", simpson(funzione, A, B, n)); system ("pause"); return 0; } double funzione(double x) { return sqrt(sin(x)); /* Funzione da integrare */ } double rettangoli(double(*fp)(double), double a, double b, int n) //funzione metodo del rettangolo o MID POINT// { double h=0, value=0, i=0; h=(b-a)/n; for(i=0;i<b;i+=h) value+=h*(*fp)(i+h/2); return value; } double trapezi(double(*fp)(double), double a, double b, int n) //funzione metodo dei trapezi// { double h=0, value=0, i=0; h=(b-a)/n; for(i=0;i<b;i+=h) value+=(((*fp)(i)+(*fp)(i+h))*h/2); return value ; } double simpson(double(*fp)(double), double a, double b, int n) //funzione metodo di cavalieri-simpson// { double h=0, i=0, pari=0, dispari=0; int j=0; if ( n % 2 ) ++n; h=(b-a)/n; for(i=0+h;i<b;i+=h){ if(j%2==0) pari+=(*fp)(i); else dispari+=(*fp)(i); j++; } return h* ((*fp)(a)/3 + 4*pari/3 + 2*dispari/3 + (*fp)(b)/3);



Rispondi quotando
