INTEGRAL.PAS 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. Uses CRt;
  2. CONST
  3. minX = 59.0;
  4. maxX = 62.0;
  5. LenX = maxX-minX;
  6. Eps : real = 0.00001;
  7. {---------------------------------------------------------------}
  8. VAR
  9. Value : real;
  10. Ntr : longint;
  11. {---------------------------------------------------------------}
  12. Function F_X(X:real):real;
  13. begin
  14. { F_X := sqrt(X)*(x);}
  15. { F_X := sqrt(40000-x*x);}
  16. F_X := sin(49*x*PI/180)*cos(12.5*x*PI/180)+1;
  17. { F_X := sin(X)*cos(X*PI/180)+1;}
  18. { F_X := 1/x+1;}
  19. end;{F_X}
  20. {---------------------------------------------------------------}
  21. Procedure LeftPram;
  22. var
  23. LastVal : real;
  24. i : longint;
  25. y : real;
  26. begin
  27. Ntr := 1;
  28. repeat
  29. LastVal := Value;
  30. Value := 0;
  31. for i := 0 to Ntr-1 do
  32. begin
  33. y := F_X(lenX*i/Ntr + minX);
  34. Value := Value + y*lenX/Ntr;
  35. end;
  36. Ntr:=Ntr shl 1;
  37. until abs(Value-LastVal) < Eps;
  38. end;{LeftPram}
  39. {--------------------------------------------------------------}
  40. Procedure CenterPram;
  41. var
  42. LastVal : real;
  43. i : longint;
  44. y : real;
  45. begin
  46. Ntr := 1;
  47. repeat
  48. LastVal := Value;
  49. Value := 0;
  50. for i := 0 to Ntr-1 do
  51. begin
  52. y := F_X(lenX*i/Ntr + minX + lenX/Ntr/2);
  53. Value := Value + y*lenX/Ntr;
  54. end;
  55. Ntr:=Ntr shl 1;
  56. until abs(Value-LastVal) < Eps;
  57. end;{CenterPram}
  58. {--------------------------------------------------------------}
  59. Procedure RightPram;
  60. var
  61. LastVal : real;
  62. i : longint;
  63. y : real;
  64. begin
  65. Ntr := 1;
  66. repeat
  67. LastVal := Value;
  68. Value := 0;
  69. for i := 1 to Ntr do
  70. begin
  71. y := F_X(lenX*i/Ntr + minX);
  72. Value := Value + y*lenX/Ntr;
  73. end;
  74. Ntr:=Ntr shl 1;
  75. until abs(Value-LastVal) < Eps;
  76. end;{RightPram}
  77. {--------------------------------------------------------------}
  78. Procedure CalcTrap;
  79. var
  80. LastVal : real;
  81. i : longint;
  82. y1,y2 : real;
  83. begin
  84. Ntr := 1;
  85. repeat
  86. LastVal := Value;
  87. Value := 0;
  88. for i := 1 to Ntr do
  89. begin
  90. y1 := F_X((lenX*(i-1))/Ntr + minX);
  91. y2 := F_X( lenX* i /Ntr + minX);
  92. Value := Value + ((y1+y2)/2)*(lenX/Ntr);
  93. end;
  94. Ntr:=Ntr shl 1;
  95. until abs(Value-LastVal) < Eps;
  96. end;{CalcTrap}
  97. {--------------------------------------------------------------}
  98. VAR
  99. mode : byte;
  100. BEGIN
  101. mode:=0;
  102. WriteLn('Выберите метод интегрирования:');
  103. WriteLn(' 1: Левосторонних прямоугольников');
  104. WriteLn(' 2: Центральных прямоугольников');
  105. WriteLn(' 3: Правосторонних прямоугольноков');
  106. WriteLn(' 4: Метод трапеций');
  107. Write(#13'Нажмите: ');
  108. while not (mode in [1..4]) do Mode:=Ord(ReadKey)-$30;
  109. Write(Mode);
  110. case mode of
  111. 1: LeftPram;
  112. 2: CenterPram;
  113. 3: RightPram;
  114. 4: CalcTrap;
  115. end;
  116. WriteLn(#10#13'Интергал: ',Value:0:5);
  117. END.