Advertisement
Domerk

Лаба_циклы

Dec 24th, 2012
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.38 KB | None | 0 0
  1. {Итак, если я ничего не путаю, то для выполнения программы нам потребуется следующее:}
  2. {Sl(n=0)=x  - это легко получается при помощи подстановки начального значения в флормулу}
  3. {Воодим перемнную к, которая вычисляетстся следующим образом: k = Sl(n)/Sl(n-1) = ((-1)*x*(2*(n-1)+1))/(2*n + 1)}
  4. {Отсюда получаем: Sl(n)=Sl(n-1)*k то есть Sl(n)=Sl(n-1)*((-1)*x*(2*(n-1)+1))/(2*n + 1)}
  5. {Sl(n)=-Sl(n-1)*x*(2*n-1)/(2*n + 1)}
  6.  
  7. {Важно учесть, что для получения кроависых тестовых результатов нужно довольно долго подбирать подходящий эпселан.
  8. Значения, найденные по формуле, могут сильно отличаться от вычесленных при помощи стандартной функции как раз из-за точности.
  9. Пугаться расхождений не стоит, всё работет правильно ;) }
  10.  
  11. {Входные данные: xn, xk, h, eps}
  12. {Выходные данные: sum}
  13.  
  14. var
  15. n: byte;
  16. x, xn, xk, sum, sl, eps, arctg, h: real;
  17.  
  18. begin
  19.  
  20.    writeln ('Введите начальное и конечное значения х - правильные дроби');
  21.    readln (xn, xk); {Считываем начальное и конечное значение х}
  22.  
  23.    writeln ('Введите шаг изменения х - дробное положительное число');
  24.    readln (h); {Считываем шаг изменения х}
  25.  
  26.    writeln ('Введите значение Эпсилон - число, принадлежащее промежутку (0; 0,1]');
  27.    readln (eps); {Считываем значение эпсилона}
  28.  
  29.    x:=xn; {присваиваем х начальное значение}
  30.  
  31.    writeln ('|   x   |   n   |   S   |    arctg(x)  |'); {выводим на экран шапку таблицы}
  32.    writeln ('----------------------------------------');
  33.  
  34.    repeat {вход в цикл с постусловием }
  35.       sum:=0; {начальному значению суммы присваиваем 0}
  36.       n:=0; {задаём начальное значение n}
  37.       sl:=x; {значение первого слагаемого всегда одинаково}
  38.  
  39.           while abs(sl)>=eps do begin {цикл с предусловием, выполняющийся, пока не достигнута нужная точность}
  40.                 sum:=sum+sl; {вычисляем сумму}
  41.                 n:=n+1; {увеличиваем n}
  42.                 sl:=(-Sl*x*(2*n-1))/(2*n + 1); {вычисляем новое значение слагаемого}
  43.       end;
  44.  
  45.       Arctg:=arctan(x); {вычисляем контрольное значение левой части данной формулы}
  46.       writeln ('|',x:7:2,'|',n:7,'|',sum:7:4,'|',Arctg:14:4,'|'); {выводим всё полученные результаты на экран в виде таблицы}
  47.       writeln ('----------------------------------------');
  48.       x:=x+h; {увеличиваем х на шаг}
  49.  
  50.    until (x>xk); {окончание цикла с постусловием}
  51.  
  52. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement