Вычисление Значений Ряда(pascal)

Тема в разделе "Pascal and Delphi", создана пользователем n1key, 19 май 2012.

  1. n1key

    n1key Гость

    Написать программу производящую вычисления 10 значений ряда на отрезке [-3;5] . вывести на экран таблицу состоящую из 10 строк, в каждой из которых написан номер строки, значение х, значение у(х). Очередная сумма включается в ряд если она больше 0,00001.[​IMG] Помогите решить
     
  2. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    не задана точность вычислений или количество слагаемых
    а... ой не дочитал, привык видеть E=0.00001

    var x,e:real;
    i:integer;

    function y(x:real):real;
    var k,h,result:real;
    i:integer;
    begin
    result:=x;
    h:=x;
    k:=1/x;
    i:=2;
    while (h>e+e/2) do
    begin
    k:=k/x;
    h:=i*k;
    result:=result+h;
    i:=i+1;
    end;
    end;

    begin
    x:=-3;
    i:=1;
    e:=0.00001;
    while (x<5.25) do
    begin
    writeln(i,' ',x:0:5,' ',f(x):0:5);
    i:=i+1;
    x:=x+0.5;
    end;
    end.

    Примерно так, нужно только причесать, проверить правильность и доработать с выводом ровно 10 строк

    Вперед! Начало положено)
     
  3. n1key

    n1key Гость

    есть некий бред ввиде вот такого кода он неправльный на 100%
    Код (Text):
    uses crt;
    const e=0.00001;
    var l,r,s,y,x,h,p,q: real;
    i,k, n, d: integer;
    function z(t:real):real;
    begin
    z:=x+2*1/(x*x)+3*1/(x*x*x)+4*1/(x*x*x*x)
    end;
    begin
    clrscr;
    writeln('rabotaet programma vych zna4 ryada');
    writeln('| nomer stroki | zna4 X | zna4 y(x) |');
    L:=-3;
    R:=5;
    h:=(R-L)/9;
    x:=L;
    while x<R do
    begin
    y:=1;
    k:=2;
    s:=e+1;
    d:=1;
    while abs(s)>e do
    begin
    p:=1;
    q:=1;
    for i:=1 to k do
    p:=p*x;
    for i:=1 to k do
    q:=q*i;
    s:=p/q;
    k:=k+2;
    y:=y+s;
    end;
    d:=d+1;
    if y>e then
    writeln (d, y:14:5, x:15:5, z(x):15:5);
    x:=x+h;
    end;
    end.
    Добавлено: спасиб... щас буду делать
     
  4. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    накопление множителя x^... происходит в переменной k
    шаг для вывода строки и подстановки x вы вроде посчитали
    слагаемое в условии взято по модулю но не там где нужно, и не проинициировано нормально)

    в общем посмотрите че я накатал - там причесать не сложно вроде
     
  5. n1key

    n1key Гость

    Я почти разобрался Спасибо Вам
     
  6. n1key

    n1key Гость

    блин, еще проблема...
    Код (Text):
    program ekz;
    uses crt;
    var e,k,h,result, x:real;
    i :integer;
    function y(x:real):real;
    begin
    y:=x+2*1/(x*x)+3*1/(x*x*x)+4*1/(x*x*x*x)
    end;
    begin
    writeln('rabotaet programma vych zna4 ryada');
    writeln(' #  |  zna4 X   |  zna4 y(x) |');
    result:=x;
    h:=x;
    k:=1/x;
    i:=2;
    while (h>e+e/2) do
    begin
    k:=k/x;
    h:=i*k;
    result:=result+h;
    i:=i+1;
    end;


    begin
    x:=-3;
    i:=1;
    e:=0.00001;
    if (y(x)>e) then
    begin
    writeln(i,' ',x:0:5,' ',y(x):0:5);
    i:=i+1;
    end
    else
    x:=x+0.5;
    end;
    end.
    как исправить деление на ноль... подскажите плиз
     
  7. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    что-то не так в вашем коде... откуда 3 тела функции (begin...end, когда у вас их две)?
    приведите код в "визуальный порядок"... а там уже посмотрим где нуль идет
     
  8. n1key

    n1key Гость

    Код (Text):
    program ekz;
    uses crt;
    var e,k,h,result, x:real;
    i :integer;
    function y(t:real):real;
    begin
    y:=t+2*1/(t*t)+3*1/(t*t*t)+4*1/(t*t*t*t)
    end;
    begin
    writeln('rabotaet programma vych zna4 ryada');
    writeln(' #  |  zna4 X   |  zna4 y(x) |');
    result:=x;
    h:=x;
    k:=1/x;
    i:=2;
    while (h>e+e/2) do
    begin
    k:=k/x;
    h:=i*k;
    result:=result+h;
    i:=i+1;
    end;

    x:=1;
    i:=1;
    e:=0.00001;
    if (y(x)>e) then
    begin
    writeln(i,' ',x:15:5,' ',y(x):15:5);
    i:=i+1;
    end
    else
    x:=x+0.5;
    end.
    как то так должно быть
     
  9. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    ок, так лучше...
    Теперь об ошибках:
    1) изначально в паскале все глобальные переменные обнуляются... и вы нигде не присваиваете x значение начальное потому при делении k=1/x получаете k=1/0... понимаете как это исправить? но дело на самом деле не в этом... посмотрите пункт 3 и эта проблема при правильном подходе сама решится
    2) сумма ряда высчитывается неверно... вы учитываете только 4 слагаемых, а нужно складывать до тех пор, пока слагаемое>0.00001
    3) учитывать погрешность (0.00001) нужно прямо при подсчете значения функции, а не вне неё... посмотрите повнимательнее то, что я вам напечатал первый раз
     
Загрузка...
Похожие Темы - Вычисление Значений Ряда(pascal)
  1. Tipo4ek
    Ответов:
    1
    Просмотров:
    1.056
  2. Extrem
    Ответов:
    4
    Просмотров:
    1.273
  3. ballack
    Ответов:
    0
    Просмотров:
    1.108
  4. Gelergo
    Ответов:
    1
    Просмотров:
    1.765
  5. VladSh
    Ответов:
    27
    Просмотров:
    8.768

Поделиться этой страницей