imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 30.11.2003, 19:16     # 1
Vitus.L
Newbie
 
Регистрация: 20.05.2003
Сообщения: 34

Vitus.L МолодецVitus.L МолодецVitus.L Молодец
знатокам Паскаля

..., груз поймал - вроде такое блёвое задание, но чё-то Паскаль накосорезил. Вывожу код программы:
uses crt;
const eps=1e-5;
var h,a,b,l,x,zn,ch,s,y,st:real;
n,j,i:integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('n=');readln(n);
writeln('eps=',eps:1:5);
x:=a;
h:=(b-a)/n;
for j:=1 to n+1 do
begin
y:=exp(x*cos(pi/4))*cos(x*sin(pi/4));
ch:=1;zn:=1;s:=1;i:=1;st:=1;
repeat
ch:=cos(i*pi/4);
st:=st*x;
zn:=zn*i;
l:=ch*st/zn;
s:=s+l;
i:=i+1;
until Y=S;{eps<abs(l);}
writeln(j, ' x= ',x:6:3,' y= ',y:6:3,' s= ',s:6:3);
x:=x+h;
end;
readln
end.
Тема такая: запуская на выполнение с параметрами а=5,в=10,н=3. Ставлю брейкпойнт на 24 строку и в отладчике слежу за перем-ми Y,S. Смотрю где-то на 25й итерации переменные приравниваются. дальше по условию должен быть выход - а не фига прога продолжает работу, причем S с этой поры не изменяется, а по логике должна (S:=S+L). В чем праблы не пойму - может кто поможет?
P.S. О себе TP7.1
Win2000 Server
Очень срочно надо, людей обламывать неохота.
Я сегодня еще вернусь.
Авей...
Vitus.L вне форума  
Старый 30.11.2003, 22:19     # 2
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
поменяй Y=S на Y=<S
о результатах доложить(с)
не догадаешся сам в чём дело - напишу
SapeR вне форума  
Старый 30.11.2003, 23:15     # 3
Vitus.L
Newbie
 
Регистрация: 20.05.2003
Сообщения: 34

Vitus.L МолодецVitus.L МолодецVitus.L Молодец
интрига

вариант с Y<=S не катит, потому что цикл нужно завершать при равенстве обоих аргументов. Последнее у меня достигается на 25й итерации.
А при твоем варианте цикл вылетает аж на 2-3 проходе.
Повторяю нужно, чтобы Y = S.
P.S. Или я что-то не понимаю, хотелось бы выслушать твою точку зрения. Как ты там говорил:

)ж не догадаешся сам в чём дело - напишу

Жду ответа...
Vitus.L вне форума  
Старый 30.11.2003, 23:50     # 4
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
сравнивая 2 флоата (real) будь готов к тому что они могут быть очень похожи но не равны.
если "меньше либо равно" не катит, ставь
Код:
until abs(Y-S)<eps;
SapeR вне форума  
Старый 01.12.2003, 00:54     # 5
Vitus.L
Newbie
 
Регистрация: 20.05.2003
Сообщения: 34

Vitus.L МолодецVitus.L МолодецVitus.L Молодец
слова благодарности

Очень признателен за помощь. Последнее сообщение очень помогло.
В догонку: а если нужно будет сравнивать Float на ><, все-таки каким образом разрешить эту проблему.
Люди ведь и не такие задачи решают, не будут же они во всяких мантисах разбираться.
Я на = когда-то применял побайтовое сравнение (и то как оказывается нет гарантий).
Vitus.L вне форума  
Старый 01.12.2003, 11:14     # 6
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
Побайтовое не поможет - та же причина. Если хочеш усложнить проверку, то проверяй так
Код:
x1 = mantissa1 * 2^base1
x2 = mantissa2 * 2^base2
base1=base2
mantissa1~=mantissa2
А у меня (на С++) из проекта в проект кочуют макросы
Код:
#define EPSILON         (1.0e-05)
#define GR(a,b)         ( (a)>((b)+EPSILON) )
#define GE(a,b)         ( (a)>((b)-EPSILON) )
#define LS(a,b)         ( (a)<((b)-EPSILON) )
#define LE(a,b)         ( (a)<((b)+EPSILON) )
// почти равно (equial)
#define EQ(a,b)         ( GE((a),(b)) && LE((a),(b)) )
// икс между А и Б (between)
#define BTW(a,b,x)      (  ( GE((x),(a)) && LE((x),(b)) ) || ( GE((x),(b)) && LE((x),(a)) )  )
SapeR вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 19:00.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.