Aurox_

integralePolinomi.c

Nov 30th, 2023 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 KB | None | 0 0
  1. /*Integrare polinomi da file di testo, dove il file di testo ha come primo numero il numero di polinomi, ogni polinomio ha come primo numero il grado e i coefficienti dal termine noto fino al grado massimo.*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define FILE_PATH "/home/aurelio/Desktop/informatica/filetxt/polinomi.txt"
  6. #define STRLEN 1024
  7. #define N_RETT 10000
  8. #define INF -2.0
  9. #define SUP 2.0
  10.  
  11. typedef int* pint;
  12. typedef float* pfloat;
  13. typedef FILE* pfile;
  14. typedef char* pchar;
  15.  
  16. double integrale(float inf, float sup, unsigned n_r, pfloat pcoeff, unsigned grado) {
  17.     double dx,sum,y,x,xi;
  18.     unsigned i,i_coeff;
  19.  
  20.     dx=(double)(sup-inf)/n_r;
  21.     for(i=sum=0,x=inf;i<n_r;i++) {
  22.         for(i_coeff=y=0,xi=1;i_coeff<=grado;i_coeff++) {
  23.             y+=pcoeff[i_coeff]*xi;
  24.             xi*=x;
  25.         }
  26.         sum+=y*dx;
  27.         x+=dx;
  28.     }
  29. return sum;
  30. }
  31.  
  32.  
  33. int main() {
  34.     unsigned i_pol,i_coeff,numero_polinomi,grado;
  35.     pfile pf;
  36.     char s[STRLEN];
  37.     pfloat pcoeff;
  38.     double integ;
  39.  
  40.     if(NULL==(pf=fopen(FILE_PATH,"r"))) goto err_file;
  41.  
  42.     fscanf(pf,"%s",s);
  43.     numero_polinomi=atoi(s);
  44.  
  45.     printf("Numero di polinomi da intergare pari a %d.\n",numero_polinomi);
  46.  
  47.     for(i_pol=0;i_pol<numero_polinomi;i_pol++) {
  48.         fscanf(pf,"%s",s);
  49.         grado=atoi(s);
  50.         if(NULL==(pcoeff=malloc(sizeof(float)*(grado+1)))) goto err_mem;
  51.         printf("Polinomio n.%d: ",i_pol+1);
  52.         for(i_coeff=0;i_coeff<=grado;i_coeff++) {
  53.             fscanf(pf,"%s",s);
  54.             pcoeff[i_coeff]=atof(s);
  55.             switch(i_coeff) {
  56.             case 0:
  57.                 printf("%.2f",*pcoeff);
  58.                 break;
  59.             default:
  60.                 if(pcoeff[i_coeff]<0) printf("%.2fx^%d",pcoeff[i_coeff],i_coeff);
  61.                 else if(pcoeff[i_coeff]>0) printf("+%.2fx^%d",pcoeff[i_coeff],i_coeff);
  62.                 break;
  63.             }
  64.         }
  65.         printf("\n");
  66.         integ=integrale(INF,SUP,N_RETT,pcoeff,grado);
  67.         printf("L'integrale del polinomio %d valutato da %f a %f risulta %f\n",i_pol+1,INF,SUP,integ);
  68.         free(pcoeff);
  69.     }
  70.  
  71.     return EXIT_SUCCESS;
  72.     fclose(pf);
  73.     err_file:
  74.         printf("Errore file non trovato\n");
  75.         return EXIT_FAILURE;
  76.     err_mem:
  77.         printf("Errore memoria insufficiente\n");
  78.         return EXIT_FAILURE;
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment