fork download
  1. //2L 17番 金田 創一朗
  2. //積分の方式:矩形、台形の両者
  3. #include <stdio.h>
  4. #include <math.h>
  5.  
  6. //円の式
  7. double function(double x)
  8. {
  9. return(sqrt(1-x*x));
  10. }
  11. //台形で求める場合
  12. double daike(double a,double b,int delt,double(*f)())
  13. {
  14. double s,deltax;
  15.  
  16.  
  17. deltax=(b-a)/delt;
  18.  
  19. //台形の公式
  20. s=((*f)(a)+(*f)(b))/2.0;
  21. int i;
  22. for(i=1; i<delt; i++){
  23. s+=(*f)(a+i*deltax);
  24. }
  25. s*=deltax;
  26.  
  27. return s;
  28. }
  29. //矩形で求める場合
  30. double tanke(double A,double B,int Delt,double(*F)())
  31. {
  32. double S,DeltaX;
  33.  
  34. DeltaX=(B-A)/Delt;
  35.  
  36. S=0;
  37. int I;
  38. for(I=0; I<Delt; I++){
  39. S+=(*F)(A+I*DeltaX);
  40. }
  41. S*=DeltaX;
  42.  
  43. return S;
  44. }
  45.  
  46. int main(void)
  47. {
  48. int delta;
  49. printf("分割数の入力");
  50. scanf("%d",&delta);
  51.  
  52. printf("\n分割数:%d\n",delta);
  53.  
  54. printf("*矩形*\n");
  55. printf("結果:%1.10f\n",tanke(0,1.0,delta,function)*4);
  56.  
  57. printf("*台形*\n");
  58. printf("結果:%1.10f\n",daike(0,1.0,delta,function)*4);
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 4.73s 5648KB
stdin
650000000
stdout
分割数の入力
分割数:650000000
*矩形*
結果:3.1415926567
*台形*
結果:3.1415926536