Advertisement
FrancescoMontagno

Integrale

Nov 19th, 2019
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. #define SL 256
  6. #define COEFF "coefficienti.txt"
  7. #define N 100000 //numero suddivisioni intervallo
  8.  
  9. int main()
  10.  {
  11.   int i=0, j;
  12.   float a, b, x1, x2, y1, y2, c, area;
  13.   char s[SL];
  14.   FILE *pf;
  15.  
  16.   printf("Ciao! Inserisci in un file i coefficienti (uno per riga!) di un polinomio di grado n partendo dal termine noto fino al coefficiente di x^n. Dopodiché salva il file (nella stessa cartella in cui si trova questo programma) con il nome coefficienti.txt \n");
  17.  
  18.   pf=fopen(COEFF, "r");
  19.   if(pf==NULL)
  20.     {
  21.      printf("non ho potuto aprire il file!");
  22.      return EXIT_FAILURE;
  23.     }
  24.    
  25.   while( fscanf(pf, "%s", s) == 1)  //trova il grado del polinomio. fscanf restituisce 1 se legge un valore, 0 se non legge nessun valore
  26.    i++;
  27.   fclose(pf);
  28.    
  29.   if(i==0) // si verifica nel caso in cui il file sia vuoto
  30.    {
  31.     printf("il file non contiene elementi");
  32.     return EXIT_FAILURE;
  33.    }
  34.    
  35.   do
  36.    {
  37.     printf("\ninserire il primo estremo di integrazione: ");
  38.     scanf("%s", s);
  39.     a=atof(s);
  40.     printf("\ninserire il secondo estremo di integrazione: ");
  41.     scanf("%s", s);
  42.     b=atof(s);
  43.    }
  44.   while(b<a);
  45.  
  46.  
  47.   for(x1=a, area=0; x1<b; x1+=(b-a)/N)
  48.    {
  49.     x2=x1+(b-a)/N;
  50.     pf=fopen(COEFF, "r");
  51.     for(j=0, y1=0, y2=0; j<i; j++)
  52.      {
  53.       fscanf(pf, "%s", s);
  54.       c=atof(s);
  55.       y1+=c*pow(x1,j);
  56.       y2+=c*pow(x2,j);
  57.      }
  58.     fclose(pf);
  59.     area+=(x2-x1)*(y1+y2)/2; // la formula calcola l'area del trapezio di basi y1 e y2 e altezza x2-x1
  60.    }
  61.    printf("Risolto: %.3f\n", area);
  62.    return EXIT_SUCCESS;
  63.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement