Форум «Всё о Паскале» _ Задачи _ Вычисление суммы ряда с заданной точностью
Автор: Single 3.12.2007 15:45
Помогите пожалуйста решить задачу на вычесление суммы ряда с заданной точностью по таким вот формулам 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= Сумма чисел прогресии =
Автор: Айра 3.12.2007 17:47
Single, пользуйся тегами пожалуйста.
1. А чему должно быть равно x по условию? у тебя оно по умолчанию равно нулю.. 2. Когда вычисляешь точность лучше пользоваться не for (тем более с goto), a while'ом:
while (abs(a)>ecp) and (i<=6) do
Попробуй пока так..
Автор: volvo 3.12.2007 17:58
Цитата
ecp:=5*exp(-6*ln(10));
Это обязательно? Может проще задать тоже константой:
Const ecp = 5E-6;
?
Кстати, зачем ты вычисляешь ln(e) все время? Он же равен 1-це. Ты бы формулу исходную привел, а не переработанную тобой... (теги [ sup ] и [ /sup ] без пробелов для написания показателей степени)
Автор: Single 4.12.2007 1:41
По условию задачи нужно делать с помощью меток. х=0,71
Точность задана так 5*10-6
Автор: Айра 4.12.2007 2:35
Цитата
По условию задачи нужно делать с помощью меток.
Сразу вспомнились слова нашего декана: "Основное свойство оператора перехода: квалификация программиста обратно пропорциональна количеству операторов перехода, которые он использует в своих программах".. ну да ладно, давай разбираться.
1. точность, как сказал volvo, лучше задать в виде
Const ecp = 5E-6;
2. за х сорри.. смутило a:=х (можно просто a:=0.0), а дальше была немного невнимательна.. 3.
for i:=1 to n do begin ... i:=i+1; // <- изменение параметра цикла for "вручную" крайне нежелательно, // а у меня вообще не проходит компиляцию.. ... end;
Для чего тебе это изменение? ..нужно, чтоб значение i менялось по какому-то правилу (например только нечетные) или что?
Автор: feniks25 4.12.2007 4:16
Цитата(Айра @ 3.12.2007 21:35)
Для чего тебе это изменение? ..нужно, чтоб значение i менялось по какому-то правилу (например только нечетные) или что?
По тому, что там написано, он использует эту переменную для подсчёта проходов цикла (если правильно догадался) ,а => количества элементов в ряду. Но количество проходов всегда постоянно и зависит только от n?-оно равно n.
А точность это, по сути, величина дробной части? или нет.
Автор: Single 4.12.2007 4:38
Насколько я понял, препод сказал, что член может быть только один т.к точность у меня очень маленькая. А вот как это всё правильно изобразить, что то немогу понять... А ещё n показывает, кол-во членов, хотел обмануть препода но невышло. Вот как то от этого нужно избавится
Автор: feniks25 4.12.2007 23:52
Народ, а всё таки, как считать точность, если она с первого элемента больше заданной? Этот ряд не есть сходящимся. Когда мы считали Pi, то число приближалось к нужному с каждым проходом и дробная часть росла 14-141-1415-14159 и т.д. , а тут сразу(2.51748224420 )
Автор: volvo 5.12.2007 0:11
Цитата
Этот ряд не есть сходящимся.
Да ты можешь написать нормально, ряд-то какой? Формулу приведи, тебя же просили, как можно тебе помочь, если ты там что-то намудрил, а ПОТОМ выкладываешь результат своих раздумий? Ты выложи УСЛОВИЕ (в нормальном виде, а не в Паскалевской записи)
Автор: feniks25 5.12.2007 1:40
Цитата(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.
В принципе да, в ряду получается только один член Может с другими значениями и точностью что-получше будет?
Автор: Айра 5.12.2007 1:59
Опять ошибочка вышла Удалила текст сообщения..
Автор: volvo 5.12.2007 2:20
$#%...
Объясни мне,
Цитата
Мой вариант проги:
считающей ЧТО??? Что вы выдумываете-то постоянно, не зная задания? Что это, например: ln(e)? Это что, НАДО СЧИТАТЬ? С каких пор? Устроили непонятно что... Синус в градусах или в радианах задан? Тебе известно? По условию - нет. Считает он... Ну, и что, посчитал?
Я бы все-таки дождался вменяемой реакции автора (а не просто отписки, что он сделал в прошлый раз), прежде чем вообще что-то постить...
Автор: Karakum 15.12.2007 1:53
Помогите пожалуйста с задачей.(не стал создавать новую тему потому-что задача на эту же тему,если что сорри). Заранее благодарен.