Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 15.01.2011, 04:57   #1
-Flover-
Оператор ЭВМ
 
Регистрация: 15.01.2011
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
Печаль Интересненько!!!

Здравствуйте уважаемые программеры

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

kl:=sqrt(sqr(651-642) + sqr(376-438)); // кол-во клеток
klet[j]:=trunc(kl); 
результат = 63 клетки (правильно)

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


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

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

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

смысл проги заключается в расчитывании колличества клеток между двумя точками на координатной плоскости, писал эту же прогу на делфи, решил перевести в моб, а здесь такой косяк...
(Offline)
 
Ответить с цитированием
Старый 15.01.2011, 10:38   #2
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Интересненько!!!

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

О причинах по которым 1я скобка выходит равной 0 при fixed-point (а именно в это беда) я не знаю.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо cherepets за это полезное сообщение:
-Flover- (15.01.2011), barsunduk (16.01.2011), Rock2roll (15.01.2011)
Старый 15.01.2011, 14:04   #3
-Flover-
Оператор ЭВМ
 
Регистрация: 15.01.2011
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Интересненько!!!

благодарю, помогло

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

r:=klet[j]/stringtointeger(formGetText(1)); 
выдает целое число, при любых делимых и делителей...
как исправить?

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

Последний раз редактировалось ViNT, 16.01.2011 в 15:47.
(Offline)
 
Ответить с цитированием
Старый 15.01.2011, 19:29   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Интересненько!!!

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

r:=klet[j]/stringtointeger(formGetText(1)); 
выдает целое число, при любых делимых и делителей...
как исправить?

тоесть при делении допустим 13 на 2 = 6,5 а выдает тупо 6 ((
Написать
r:=klet[j]*1.0/(stringtointeger(formGetText(1))*1.0); 
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо ViNT за это полезное сообщение:
-Flover- (15.01.2011), barsunduk (16.01.2011)
Старый 15.01.2011, 20:35   #5
-Flover-
Оператор ЭВМ
 
Регистрация: 15.01.2011
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Интересненько!!!

спасибо )) тоже помогло и думаю теперь последний мой вопрос по данной теме )))

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

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

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


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

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

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, нелепая ошибка ))

Последний раз редактировалось ViNT, 16.01.2011 в 15:46.
(Offline)
 
Ответить с цитированием
Старый 15.01.2011, 23:57   #6
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Интересненько!!!

Как вариант:
f:string; ....
if f<>'' then
x:=length(f);
приём из обычного паскаля
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 16.01.2011, 15:20   #7
-Flover-
Оператор ЭВМ
 
Регистрация: 15.01.2011
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Интересненько!!!

Сообщение от Igor Посмотреть сообщение
Как вариант:
f:string; ....
if f<>'' then
x:=length(f);
приём из обычного паскаля
спасибо конечно за ответ на сколько я понял Вы написали по поводу "как сделать чтобы в строке небыло символа конца строки"? если это так, то вариант не совсем правильный

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

f:string; ....
if 
f<>'' then
  x
:=length(f)-1
так как последний символ строки это "окончание строки" мы его в дальнейшем в циклах использовать не будем

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

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

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

и в общем-то у меня всё работает, спасибо что помогли тема закрыта
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com