Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include<stdlib.h>
  4.  
  5. double precyzja[] ={0.01,0.0001,0.000001};
  6. FILE *fp;
  7.  
  8.  
  9. int liczba_wyrazow(double x, double precyzja){
  10. int i = 1;
  11. double suma = x;
  12. while(1){
  13. suma *= x*x /(2*i*(2*i+1));
  14. if(suma < precyzja) break;
  15.  
  16. i++;
  17. }
  18. return i - 1;
  19. }
  20.  
  21. double silnia(int s){
  22. if(s==0 || s==1) return 1;
  23. else return(s*silnia(s-1));
  24. }
  25.  
  26. double potega(double x, int n ){
  27. double val = 1.0;
  28. int i;
  29. for(i=1; i<=n ;i++){
  30. val *= x;
  31. }
  32. return val;
  33. }
  34.  
  35. double sinus(double x, int n){
  36. int i;
  37. double val = x;
  38.  
  39. for(i=1; i<=n; i++){
  40. double p = potega(-1.0,i);
  41. double px = potega(x,2*i+1);
  42. double s=silnia(2*i+1);
  43.  
  44. val += (p * px) / s;
  45. }
  46. }
  47.  
  48. double sinus_tyl(double x, int n){
  49. int i;
  50. double val = x;
  51.  
  52. for(i=n; i>=1; i--){
  53. double p = potega(-1.0,i);
  54. double px = potega(x,2*i+1);
  55. double s=silnia(2*i+1);
  56.  
  57. val += (p * px) / s;
  58. }
  59. return val;
  60. }
  61.  
  62. double sinus_przod_z_zapamietaniem(double x, int n){
  63. int i;
  64. double val = x;
  65. double wyraz = x;
  66.  
  67. for(i=1; i<=n; i++){
  68.  
  69. wyraz *= x*x /(2*i*(2*i+1));
  70.  
  71. if(i % 2 == 0) val += wyraz;
  72. else val -= wyraz;
  73.  
  74.  
  75. }
  76. return val;
  77. }
  78.  
  79. double sinus_tyl_z_zapamietaniem(double x, int n){
  80. int i;
  81. double val = x;
  82. double wyraz = potega(x,2*n + 1)/silnia(2*n+1);
  83.  
  84. for(i=n; i>=1; i--){
  85.  
  86.  
  87. if(i % 2 == 0) val += wyraz;
  88. else val -= wyraz;
  89.  
  90. wyraz /= x*x /(2*i*(2*i+1));
  91. }
  92. return val;
  93. }
  94.  
  95. void print(double x, double val, double sin,double prec){
  96. fprintf(fp,"x: %lf wynik: %.20f błąd: %lf, precyzja:%.20lf\n",x,val,fabs(sin-val),prec);
  97. }
  98.  
  99. void wypisz_wyniki(double x) {
  100. int i;
  101. int n;
  102. double val;
  103. fprintf(fp, "x: %lf wynik: %.20f\n", x, sin(x));
  104. for (i = 0; i < 3; i++) {
  105. n = liczba_wyrazow(x, precyzja[i]);
  106. print(x,sinus(x,n),sin(x),precyzja[i]);
  107. print(x,sinus_tyl(x,n),sin(x),precyzja[i]);
  108. print(x,sinus_przod_z_zapamietaniem(x,n),sin(x),precyzja[i]);
  109. print(x,sinus_tyl_z_zapamietaniem(x,n),sin(x),precyzja[i]);
  110. }
  111. }
  112.  
  113.  
  114. int main(){
  115.  
  116. fp = fopen("wyniki.txt","w");
  117. if (fp == NULL) {
  118. fprintf(fp, "Nie mogę otworzyć pliku test.txt do zapisu!\n");
  119. return 1;
  120. }
  121. wypisz_wyniki(3);
  122. return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement