Карта0
Карта1
Карта2
Карта3
Карта4
Карта5
Карта6
Карта7
Карта8
Карта9
Карта10
Карта11
Карта12
Карта13
Карта14
Карта15
Карта16
Карта17
Карта18
Карта19
Карта20
Карта21
Карта22
Карта23
Карта24
Карта25
Карта26
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » Программирование » Pascal

Ответ
Старый 31.01.2009, 23:49   #1 (permalink)
ROCKER
 
У меня нет аватара
 
Регистрация: 23.03.2008
Возраст: 19
Сообщений: 53
Репутация: 3
Провайдер: Мультинекс
Pascal


есть ли у кого нибудь турбо паскаль. очень нужно. если есть то ссылочку можете дать?
АНДРЮХ@ вне форума   Ответить с цитированием
Старый 01.02.2009, 00:17   #2 (permalink)
Назгулище
 
Аватар для Nazgul
 
Регистрация: 21.03.2007
Адрес: Д. Песочня
Возраст: 39
Сообщений: 1,108
Репутация: 385
Провайдер: Спарк
За новинки Почетный модератор 


Turbo_Pascal_7.1.rar
__________________
---------------------------------------------------------------
Хорошо знать что хочешь, но ещё лучше понимать что имеешь.
---------------------------------------------------------------
Nazgul вне форума   Ответить с цитированием
Старый 04.11.2009, 23:47   #3 (permalink)
Священный базилик
 
Аватар для Tolsi
 
Регистрация: 01.11.2008
Адрес: Центр
Сообщений: 1,109
Репутация: 217
Провайдер: Энлинк


Помогите, пожалуйста! Необходимо разложить 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.
и пара результатов:
Цитата:
z= 1.47
eps=10^-3
Число z= 1.470, погрешность eps=0.00100
k(число итераций)=15 мой sin(z)=0.6871 правильный sin(z)=0.9949

z= 3.14
eps=10^-3
Число z= 3.140, погрешность eps=0.00100
k(число итераций)=32 мой sin(z)=0.0005 правильный sin(z)=0.0016

z= 1.7
eps=10^-4
Число z= 1.700, погрешность eps=0.00010
k(число итераций)=55 мой sin(z)=0.5865 правильный sin(z)=0.9917

z= 0.6
eps=10^-3
Число z= 0.600, погрешность eps=0.00100
k(число итераций)= 7 мой sin(z)=0.9464 правильный sin(z)=0.5646
Что не так? Решение должно быть обязательно с итерационным циклом, условие задачи

Последний раз редактировалось Tolsi, 05.11.2009 в 00:30.
Tolsi вне форума   Ответить с цитированием
Старый 05.11.2009, 00:31   #4 (permalink)
FEN
Местный
 
Аватар для FEN
 
Регистрация: 19.07.2007
Возраст: 28
Сообщений: 225
Репутация: 18
Провайдер: Мультинекс


Цитата:
Сообщение от Tolsi Посмотреть сообщение
Что не так? Решение должно быть обязательно с итерационным циклом, условие задачи
Последний раз pascal видел лет 5 назад. Но все же...
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.
FEN вне форума   Ответить с цитированием
Старый 05.11.2009, 00:55   #5 (permalink)
Администратор
 
Аватар для Predtecha
 
Регистрация: 28.07.2007
Адрес: Рязань
Сообщений: 3,169
Репутация: 1261
Провайдер: Энлинк
Альтруист За развитие форума 


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);
нигде z, которая в формуле перед произведением, не перемножается (только само произведение). Поэтому нужно при инициализации, p присвоить значение z как начальное значение.

Цитата:
z= 1.47
мой sin(z)=0.6871*1.47=1,010037 правильный sin(z)=0.9949

z= 3.14
мой sin(z)=0.0005*3.14=0,00157 правильный sin(z)=0.0016

z= 1.7
мой sin(z)=0.5865*1.7=0,99705 правильный sin(z)=0.9917

z= 0.6
мой sin(z)=0.9464*0.6=0,56784 правильный sin(z)=0.5646
И ещё одна мелочь: при выводе результата нужно указать "к" на 1 меньше, либо рассчитывать abs(sqr(z)/(sqr(k)*sqr(pi)) до k:=k+1, а уж потом сравнивать с eps. Иначе всё равно число "к" будет указывать неверное значение, вернее множитель с k:=k+1 "не войдёт" в произведении.

Последний раз редактировалось Predtecha, 05.11.2009 в 07:43.
Predtecha вне форума   Ответить с цитированием
Старый 05.11.2009, 01:22   #6 (permalink)
Священный базилик
 
Аватар для Tolsi
 
Регистрация: 01.11.2008
Адрес: Центр
Сообщений: 1,109
Репутация: 217
Провайдер: Энлинк


Цитата:
Сообщение от Predtecha Посмотреть сообщение
p:=1; --> p:=z;
реально, спасибо! =)
ps дело ещё в том, что в формуле, данной в методе, не было z перед всем этим....


(плохое качество, телефон, но разобрать отсутствие z можно)

а на формулу из интернета я только сегодня наткнулся и я даже не посмотрел

Цитата:
Сообщение от FEN Посмотреть сообщение
Последний раз pascal видел лет 5 назад. Но все же...
1. Твоя программа может зациклиться
не может, k стремится к бесконечности => abs(sqr(z)/(sqr(k)*sqr(pi)) к нулю
Цитата:
Сообщение от FEN Посмотреть сообщение
2. итерационный цикл в pascal - for
repeat можно представить в виде итерационного цикла
for i:=1 to 10000(скажем) do
begin
{что-то делаем}
if (условие,сравнение с погрешностью, скажем) then break;
{что-то делаем}
end;
а разница? for в 50+ повторов наоборот ест больше памяти и работает медленнее
Цитата:
Сообщение от FEN Посмотреть сообщение
3. Я не помню как вычисляется погрешность, но думаю, что у тебя не правильно
мой вариант:
...
оказалось и так правильно

ps я знаю, что в методичке и радике втирают куча бреда, но надо "делать так, как сказали" (с преподами не спорят), а то не сдам эти лабы

Последний раз редактировалось Tolsi, 05.11.2009 в 01:28.
Tolsi вне форума   Ответить с цитированием
Старый 05.11.2009, 02:04   #7 (permalink)
FEN
Местный
 
Аватар для FEN
 
Регистрация: 19.07.2007
Возраст: 28
Сообщений: 225
Репутация: 18
Провайдер: Мультинекс


Цитата:
Сообщение от Tolsi Посмотреть сообщение
не может, k стремится к бесконечности => abs(sqr(z)/(sqr(k)*sqr(pi)) к нулю

а разница? for в 50+ повторов наоборот ест больше памяти и работает медленнее

оказалось и так правильно
1. Правда, не может.
2. Разницы никакой. Одно и то же количество затраченой памяти и всех видов операций. Просто все поменяли местами.
3. Результаты синуса получились правильные. Но во втором случае нужная погрешность достигается уже на третьей итерации, а у тебя их 32. Так что стоит поискать правильную формулу.

зы. жаль, что тебе досталась методичка без патчей. Обычно, студенты дорисовывают недостающее.

Последний раз редактировалось FEN, 05.11.2009 в 02:08.
FEN вне форума   Ответить с цитированием
Старый 05.11.2009, 16:02   #8 (permalink)
Священный базилик
 
Аватар для Tolsi
 
Регистрация: 01.11.2008
Адрес: Центр
Сообщений: 1,109
Репутация: 217
Провайдер: Энлинк


Цитата:
Сообщение от FEN Посмотреть сообщение
3. Результаты синуса получились правильные. Но во втором случае нужная погрешность достигается уже на третьей итерации, а у тебя их 32. Так что стоит поискать правильную формулу.

зы. жаль, что тебе досталась методичка без патчей. Обычно, студенты дорисовывают недостающее.
напишу с твоей формулой и методу сам подправлю. Всем спасибо !!
Tolsi вне форума   Ответить с цитированием
Старый 21.03.2010, 21:43   #9 (permalink)
Пользователь
 
Аватар для Alex_117
 
Регистрация: 27.10.2008
Возраст: 19
Сообщений: 58
Репутация: 2


Помогите пожалуйста решить задачу!
Вычислить значение гиперболического косинуса, используя разложение его встепянной ряд:

Chx= сумма (от n-0 до бесконечности) (X^2n)/(2n)!
для сравнения вычислить по формуле chx=(eps(x)+eps(-x))/2
задание вычислять для x=1.75 с погрешностью е=0.001
Alex_117 вне форума   Ответить с цитированием
Старый 21.03.2010, 23:00   #10 (permalink)
служащий
 
Аватар для Pablo
 
Регистрация: 17.10.2007
Адрес: Роща
Возраст: 31
Сообщений: 665
Репутация: 105
Провайдер: Мультинекс
Восклицание


//функция вычисления гиперболического косинуса от 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.
Pablo вне форума   Ответить с цитированием
Ответ




Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



рекомендуем Вас http://www.komnatamsk.ru-сайт аренда комнаты в москве Университет . продажа ноутбуков б у . стеновые блоки рязань и перегородки рязань.
При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 04:19.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS