forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Интересненько!!! (http://forum.boolean.name/showthread.php?t=14057)

-Flover- 15.01.2011 04:57

Интересненько!!!
 
Здравствуйте уважаемые программеры :-)

возникла такая очень неприятная проблема....

PHP код:

kl:=sqrt(sqr(651-642) + sqr(376-438)); // кол-во клеток
klet[j]:=trunc(kl); 

результат = 63 клетки (правильно)

если подставить другие цифры, например:


PHP код:

kl:=sqrt(sqr(10-642) + sqr(1376-438)); // кол-во клеток
klet[j]:=trunc(kl); 


результат = 639 клетки (НЕ правильно!!) должно быть = 1131 !!!

почему такой глюк??? кто знает как это исправить подскажите плиз!!!

смысл проги заключается в расчитывании колличества клеток между двумя точками на координатной плоскости, писал эту же прогу на делфи, решил перевести в моб, а здесь такой косяк...

cherepets 15.01.2011 10:38

Ответ: Интересненько!!!
 
Слева в настройках приложения (Properties) выставь Real numbers: floating-point. Поможет.

О причинах по которым 1я скобка выходит равной 0 при fixed-point (а именно в это беда) я не знаю.

-Flover- 15.01.2011 14:04

Ответ: Интересненько!!!
 
благодарю, помогло :)

теперь как понимаю из-за этого другая проблема ((

PHP код:

r:=klet[j]/stringtointeger(formGetText(1)); 

выдает целое число, при любых делимых и делителей...
как исправить? :''((

тоесть при делении допустим 13 на 2 = 6,5 а выдает тупо 6 ((

ViNT 15.01.2011 19:29

Ответ: Интересненько!!!
 
Цитата:

Сообщение от -Flover- (Сообщение 175723)
теперь как понимаю из-за этого другая проблема ((

PHP код:

r:=klet[j]/stringtointeger(formGetText(1)); 

выдает целое число, при любых делимых и делителей...
как исправить? :''((

тоесть при делении допустим 13 на 2 = 6,5 а выдает тупо 6 ((

Написать
PHP код:

r:=klet[j]*1.0/(stringtointeger(formGetText(1))*1.0); 


-Flover- 15.01.2011 20:35

Ответ: Интересненько!!!
 
спасибо )) тоже помогло :-D и думаю теперь последний мой вопрос по данной теме )))

как сделать чтобы вещественное число ОКРУГЛЯТЬ до целого?))

потому что в делфи я писал, там round(x); // где х - real

а здесь на сколько я понял РАУНДа нет, и в хелпе смотрел, тоже ничего подобного не нашел... пришлось использовать trunc, но из-за этого данные не точные...


п.с. сорри что каждый раз задаю вопросы, просто они приходят по мере появления проблем... ((

вопрос снят )) решил проблему таким образом:

PHP код:

kl:=sqrt(sqr(m1[j]-n1[i]) + sqr(m2[j]-n2[i])); // кол-во клеток
   
z:= Trunc(frac(sqrt(sqr(m1[j]-n1[i]) + sqr(m2[j]-n2[i]))*1.0)*10); // выдераем дробную часть
   
if z<5 then // если дробная часть меньше 4, то не округляем
   
klet[j]:=trunc(kl);
   if 
z>=5 then   // если дробная часть больше или = 5, то округляем, тоесть прибавляем 1
    
klet[j]:=trunc(kl)+

:-)

новый вопрос ((

считываю строку: rr:=formGetText(4);
потом по циклу выбираю нужные мне данные из строки...
и вывожу: formSetText(5,....);

строку проверяю с 0 до length(rr)

в итоге мне выводит вместе с символом конца строки, пробовал цикл делать до length(rr)-1 но тогда всё зависает ((, а мне этот символ конца строки совершенно не нужен...



и этот вопрос снят )) было три цикла, а я читал в двух из трех до конца строки-1, нелепая ошибка ))

Igor 15.01.2011 23:57

Ответ: Интересненько!!!
 
Как вариант:
f:string; ....
if f<>'' then
x:=length(f);
приём из обычного паскаля

-Flover- 16.01.2011 15:20

Ответ: Интересненько!!!
 
Цитата:

Сообщение от Igor (Сообщение 175758)
Как вариант:
f:string; ....
if f<>'' then
x:=length(f);
приём из обычного паскаля

спасибо конечно за ответ :-) на сколько я понял Вы написали по поводу "как сделать чтобы в строке небыло символа конца строки"? если это так, то вариант не совсем правильный :-)

два варианта, либо ваш, только подправленный:

PHP код:

f:string; ....
if 
f<>'' then
  x
:=length(f)-1

так как последний символ строки это "окончание строки" мы его в дальнейшем в циклах использовать не будем :-)

либо 2 вариант, похожий:

скопировать в строку в другую переменную без последнего символа :-)

п.с. это конечно всё с учетом что строка бралась formGetText, за остальные не знаю как там :-)

и в общем-то у меня всё работает, спасибо что помогли :-) тема закрыта :ok:


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot