Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление суммы ряда с заданной точностью
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Single
Помогите пожалуйста решить задачу на вычесление суммы ряда с заданной точностью по таким вот формулам
cos(i)*sin(i)+i*x/(i*(2*i))+abs(i+x*ln(e))

Сама точность 5*exp(-6*ln(10))

Наклепал вот такую задачу, но она неверная, помогите исправить пожалуйста недочёты в ней

program lab4;
uses crt;
const e=2.71;
label t1;
var
a,x,s,ecp:real;
n,i:integer;
begin
clrscr;
ecp:=5*exp(-6*ln(10));
writeln('tocnost=',ecp:1:6,'');
a:=x;
x:=0.71;
n:=6;
s:=x;
i:=0;
t1: for i:=1 to n do
begin
a:=cos(i)*sin(i)+i*x/(i*(2*i))+abs(i+x*ln(e));
s:=s+a;
i:=i+1;
writeln('chusla progresii=',a:6:2,'');
end;
if a<ecp then goto t1;
writeln('kolichestvo chlenov=',i);
writeln('suma chleniv=',s:6:3,'');
readkey;
end.



Результат нужно выдать в таком порядке
• Точность =
• Член 1=
• Член 2=
Сумма чисел прогресии =
Айра
Single, пользуйся тегами пожалуйста.

1. А чему должно быть равно x по условию? у тебя оно по умолчанию равно нулю..
2. Когда вычисляешь точность лучше пользоваться не for (тем более с goto), a while'ом:
while (abs(a)>ecp) and (i<=6) do


Попробуй пока так..
volvo
Цитата
ecp:=5*exp(-6*ln(10));
Это обязательно? Может проще задать тоже константой:
Const ecp = 5E-6;
?

Кстати, зачем ты вычисляешь ln(e) все время? Он же равен 1-це. Ты бы формулу исходную привел, а не переработанную тобой... (теги [ sup ] и [ /sup ] без пробелов для написания показателей степени)
Single
По условию задачи нужно делать с помощью меток.
х=0,71

Точность задана так 5*10-6
Айра
Цитата
По условию задачи нужно делать с помощью меток.

blink.gif Сразу вспомнились слова нашего декана: "Основное свойство оператора перехода: квалификация программиста обратно пропорциональна количеству операторов перехода, которые он использует в своих программах".. ну да ладно, давай разбираться. smile.gif

1. точность, как сказал volvo, лучше задать в виде
Const ecp = 5E-6;

2. за х сорри.. смутило a:=х (можно просто a:=0.0), а дальше была немного невнимательна.. wink.gif
3.
for i:=1 to n do
begin
...
i:=i+1; // <- изменение параметра цикла for "вручную" крайне нежелательно,
// а у меня вообще не проходит компиляцию..
...
end;


Для чего тебе это изменение? ..нужно, чтоб значение i менялось по какому-то правилу (например только нечетные) или что?
Rian
Цитата(Айра @ 3.12.2007 21:35) *

Для чего тебе это изменение? ..нужно, чтоб значение i менялось по какому-то правилу (например только нечетные) или что?


По тому, что там написано, он использует эту переменную для подсчёта проходов цикла (если правильно догадался) ,а => количества элементов в ряду. Но количество проходов всегда постоянно и зависит только от n?-оно равно n.

А точность это, по сути, величина дробной части? или нет.
Single
Насколько я понял, препод сказал, что член может быть только один т.к точность у меня очень маленькая. А вот как это всё правильно изобразить, что то немогу понять... А ещё n показывает, кол-во членов, хотел обмануть препода но невышло. Вот как то от этого нужно избавится sad.gif
Rian
Народ, а всё таки, как считать точность, если она с первого элемента больше заданной?
Этот ряд не есть сходящимся. Когда мы считали Pi, то число приближалось к нужному с каждым проходом и дробная часть росла 14-141-1415-14159 и т.д. , а тут сразу(2.51748224420 blink.gif )
volvo
Цитата
Этот ряд не есть сходящимся.
Да ты можешь написать нормально, ряд-то какой? Формулу приведи, тебя же просили, как можно тебе помочь, если ты там что-то намудрил, а ПОТОМ выкладываешь результат своих раздумий? Ты выложи УСЛОВИЕ (в нормальном виде, а не в Паскалевской записи)
Rian
Цитата(volvo @ 4.12.2007 19:11) *

Да ты можешь написать нормально, ряд-то какой? Формулу приведи, тебя же просили, как можно тебе помочь, если ты там что-то намудрил, а ПОТОМ выкладываешь результат своих раздумий? Ты выложи УСЛОВИЕ (в нормальном виде, а не в Паскалевской записи)


volvo, сорри, а к кому относилась разгромная статья?
Мой вариант проги:

program lab4;
uses crt;
const e=2.71;
var
a,x,s,ecp:real;
i:integer;
begin
clrscr;
ecp:=5e-6;
a:=0;
x:=0.71;
s:=x;
i:=1;
while (abs(a-trunc(a) )>ecp)and(i<=5)or(a=0) do
begin
a:=cos(i)*sin(i)+i*x/(i*(2*i))+abs(i+x*ln(e));{формула}
s:=s+a;{сумма ряда}
i:=i+1;{количество элементов ряда-изначально один}
writeln('chusla progresii=',a:6:12,'');
end;
writeln('tocnost=',ecp:1:6,'');
writeln('kolichestvo chlenov=',i);
writeln('suma chleniv=',s:6:3,'');
readkey;
end.


В принципе да, в ряду получается только один член
Может с другими значениями и точностью что-получше будет?
Айра
Опять ошибочка вышла wink.gif
Удалила текст сообщения..
volvo
$#%... YYY.gif

Объясни мне,
Цитата
Мой вариант проги:
считающей ЧТО??? Что вы выдумываете-то постоянно, не зная задания? Что это, например: ln(e)? Это что, НАДО СЧИТАТЬ? С каких пор? Устроили непонятно что... Синус в градусах или в радианах задан? Тебе известно? По условию - нет. Считает он... Ну, и что, посчитал?

Я бы все-таки дождался вменяемой реакции автора (а не просто отписки, что он сделал в прошлый раз), прежде чем вообще что-то постить...
Karakum
Помогите пожалуйста с задачей.(не стал создавать новую тему потому-что задача на эту же тему,если что сорри).
Нажмите для просмотра прикрепленного файла
Заранее благодарен.
Single
Всем спасибо, задачу уже дотумкал сам smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.