fork(4) download
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. double fact(int i)
  5. {
  6. if(i == 0)
  7. {
  8. return 1;
  9. }
  10. if(i < 0)
  11. {
  12. return 0;
  13. }
  14. else
  15. return i * fact(i - 1); //функция для вычисления факториала
  16. }
  17. int main()
  18. {
  19. int i=0, k=1, l=1;
  20. double row=0, E; //начальные переменные
  21. scanf("%lf", &E); //ввод погрешности
  22. do
  23. {
  24. row+=1/fact(i); //вычисление ряда
  25. i++;
  26. }
  27. while(M_E-row>E); //условие, при котором цикл останавливается
  28. printf("row=%10.10lf, i=%d \n", row, i);
  29. double sum3=0, inf; //переменные для вычисления цепной дроби
  30. do
  31. {
  32. for (int k = l; k >= 1; k--)
  33. {
  34. if ((k % 2) == 0)
  35. {
  36. sum3 = 1 / (2 + sum3);
  37. }
  38. else
  39. {
  40. sum3 = 1 / (k - sum3);
  41. }
  42. }
  43. if (fabs(M_E - (sum3 + 1))<E)
  44. {
  45. break;
  46. }
  47. l++;
  48. }
  49. while (l < i + 10);
  50. inf=1+sum3; //в начале цепной дроби присутсвует единица, которая выбивается из цикла.
  51. printf("inf=%10.10lf, l=%d \n", inf, l);
  52. if(l<i)
  53. {
  54. printf("С заданной погрешностью E=%5.10lf, бесконечная дробь, с количеством итераций l=%d быстрее сходится к числу е, чем ряд, c количевством итераиций i=%d.\n", E, l, i);
  55. }
  56. else
  57. {
  58. printf("С заданной погрешностью E=%5.10lf, ряд, с количеством итераций i=%d быстрее сходится к числу е, чем бесконечная дробь, c количевством итераиций l=%d.\n", E, i, l);
  59. }
  60. return 0;
  61. }
Success #stdin #stdout 0s 3300KB
stdin
0.0004
stdout
row=2.7180555556, i=7 
inf=2.7181344358, l=6 
С заданной погрешностью E=0.0004000000, бесконечная дробь, с количеством итераций l=6 быстрее сходится к числу е, чем ряд, c количевством итераиций i=7.