![]() |
|
|
#1 (permalink) |
|
ROCKER
|
Pascal
есть ли у кого нибудь турбо паскаль. очень нужно. если есть то ссылочку можете дать?
|
|
|
|
|
|
#2 (permalink) |
|
Назгулище
Регистрация: 21.03.2007
Адрес: Д. Песочня
Возраст: 39
Сообщений: 1,108
|
__________________
--------------------------------------------------------------- Хорошо знать что хочешь, но ещё лучше понимать что имеешь. --------------------------------------------------------------- |
|
|
|
|
|
#3 (permalink) | |
|
Священный базилик
|
Помогите, пожалуйста! Необходимо разложить sin(z) на бесконечное произведение и найти его в цикле с погрешностью...
Формула ![]() Получилась программа: Код:
program lab7;
var p,t,k,i,z,eps:real;
{*
p - само бесконечное произведение
t - множитель
k - число итераций
i - sin(z) для проверки
z - исходное число
eps - погрешность
*}
begin
write('z= ');
read(z);
{вводим степень десятки, так ловчее :)}
write('eps=10^-');
read(eps);
{расчитываем ее}
eps:=exp(eps*ln(0.1));
{уголок капитана очевидности}
Writeln('Число z= ', z:2:3, ', погрешность eps=', eps:1:5);
t:=0;
{счетчик и произведение делаем единичками}
k:=1;
p:=1;
{потом сверимся >.<}
i:=sin(z);
repeat
{получаем множитель}
t:=1-(sqr(z)/(sqr(k)*sqr(pi)));
{множим}
p:=p*t;
{плюсуем}
k:=k+1;
{сравниваем с погрешностью (правильно ли?!)}
until (abs(sqr(z)/(sqr(k)*sqr(pi)))<eps);
writeln('k(число итераций)=',k:2:0,', мой sin(z)=',p:3:4,', правильный sin(z)=', sin(z):2:4);
end.
Цитата:
![]() Последний раз редактировалось Tolsi, 05.11.2009 в 00:30. |
|
|
|
|
|
|
#4 (permalink) | |
|
Местный
|
Цитата:
1. Твоя программа может зациклиться 2. итерационный цикл в pascal - for repeat можно представить в виде итерационного цикла for i:=1 to 10000(скажем) do begin {что-то делаем} if (условие,сравнение с погрешностью, скажем) then break; {что-то делаем} end; 3. Я не помню как вычисляется погрешность, но думаю, что у тебя не правильно мой вариант: введем переменную s для хранения старых значений repeat {получаем множитель} t:=1-(sqr(z)/(sqr(k)*sqr(pi))); {множим} s:=p; p:=p*t; {плюсуем} k:=k+1; {сравниваем с погрешностью} until (abs(p-s)<eps); {возможно (sqr(p-s)<eps)... не помню} Последний раз редактировалось FEN, 05.11.2009 в 01:05. |
|
|
|
|
|
|
#5 (permalink) | |
|
Администратор
|
p:=1; --> p:=z;
![]() На этом участке программы: Код:
p:=1;
{потом сверимся >.<}
i:=sin(z);
repeat
{получаем множитель}
t:=1-(sqr(z)/(sqr(k)*sqr(pi)));
{множим}
p:=p*t;
{плюсуем}
k:=k+1;
{сравниваем с погрешностью (правильно ли?!)}
until (abs(sqr(z)/(sqr(k)*sqr(pi)))<eps);
Цитата:
Последний раз редактировалось Predtecha, 05.11.2009 в 07:43. |
|
|
|
|
|
|
#6 (permalink) | |||
|
Священный базилик
|
реально, спасибо! =)
ps дело ещё в том, что в формуле, данной в методе, не было z перед всем этим.... ![]() (плохое качество, телефон, но разобрать отсутствие z можно )а на формулу из интернета я только сегодня наткнулся и я даже не посмотрел ![]() Цитата:
Цитата:
Цитата:
![]() ps я знаю, что в методичке и радике втирают куча бреда, но надо "делать так, как сказали" (с преподами не спорят), а то не сдам эти лабы ![]() Последний раз редактировалось Tolsi, 05.11.2009 в 01:28. |
|||
|
|
|
|
|
#7 (permalink) | |
|
Местный
|
Цитата:
2. Разницы никакой. Одно и то же количество затраченой памяти и всех видов операций. Просто все поменяли местами. 3. Результаты синуса получились правильные. Но во втором случае нужная погрешность достигается уже на третьей итерации, а у тебя их 32. Так что стоит поискать правильную формулу. зы. жаль, что тебе досталась методичка без патчей. Обычно, студенты дорисовывают недостающее. Последний раз редактировалось FEN, 05.11.2009 в 02:08. |
|
|
|
|
|
|
#8 (permalink) | |
|
Священный базилик
|
Цитата:
и методу сам подправлю. Всем спасибо !! ![]() |
|
|
|
|
|
|
#9 (permalink) |
|
Пользователь
|
Помогите пожалуйста решить задачу!
Вычислить значение гиперболического косинуса, используя разложение его встепянной ряд: Chx= сумма (от n-0 до бесконечности) (X^2n)/(2n)! для сравнения вычислить по формуле chx=(eps(x)+eps(-x))/2 задание вычислять для x=1.75 с погрешностью е=0.001 |
|
|
|
|
|
#10 (permalink) |
|
служащий
|
//функция вычисления гиперболического косинуса от x c заданной погрешностью e
function Ch(x:double;e:double):double; var n:integer;//значение n prev,//предыдущее слагаемое sum,//текущее значение косинуса add:double;//текущее слагаемое "суммы" begin n:=0; //значение при n=0 prev:=1; sum:=prev; add:=prev; while add>e do //если погрешность не достигнута, то считаем begin prev:=add; inc(n); //"новое слагаемое" add:=prev*x*x/(2*n)/(2*n-1); //добавляем sum:=sum+add; end; Result:=sum; end; //проверочная функция function ch_check(x:double):double; begin Result:=(exp(x)+exp(-x))/2; end; ch(1.75,0.001)=2,9641865580299 ch_check(1.75)=2,96418830972809 погрешность =1,7516981860588E-6 Последний раз редактировалось Pablo, 21.03.2010 в 23:44. |
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | |
| Опции просмотра | |
|
|