Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Границы допустимых значений переменных, 600*400=-20000-???? 
:(
    Опции темы
Ner-zul
  Дата 26.1.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



Пусть у меня есть переменная типа long int t; exclamation.gif
Допустим я выщитываю расстояния от заданной точки до второй движущейся в плоскости размером 600 на 400 пикселей(и где-то у себя в программе использую это расстояние ) по формуле:
t=dx*dx+dy*dy (ну то есть t- это квадрат расстояния) И вот в процессе движения у меня получается что переменная t принимает черт знает какие значения, в том числе и отрицательные exclamation.gif Из - за этого у меня вся программа глючит!
Сначала у меня t - было типа int и я исправил на long int, что-то изменилось но в целом это не помогло!??
Помогите пожалуйста!!!Бьюсь головой о клаву уже второй день!!!
(P.S. если хотите я выложу код своей программки)
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
bel_nikita
Дата 26.1.2004, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



используй unsigned int или unsigned long и твои отрицательные числа пропадут


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Paradox
Дата 26.1.2004, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Цитата
600 на 400 пикселей(и где-то у себя в программе использую это расстояние ) по формуле:
t=dx*dx+dy*dy
максимум получится 500000 в long int вхоит, если получается отрицаткльное ты где то напортачил
Код в студию


--------------------
---
PM MAIL WWW   Вверх
Ner-zul
Дата 26.1.2004, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



1)Я использовал и int и long int и unsigned long int (можно правда long double еще попробовать!!!)-во всех случаях прога глючит!!!
2)Я знаю и сам проверял что все значения "влезают" в long int, но почему-то все равно отрицательные вылезают!!!


unsigned long int a;
unsigned long int b;
unsigned long int a2;
unsigned long int b2;
unsigned long int kkk;
...


int x=320;
int y=240;

int dxp=300;
int dyp=400;


...

a=dxp-x;

b=dyp-y;

a2=a*a;

b2=b*b;

t=a+b;
kkk=600*400;

...

printf("%li %li %li %li %li %li ",a,b,a2,b2,t,kkk);

...
Точка с координатами x,y - движется;стока переменных создал чтобы проверит где именно глючит;переменная kkk- просто так для проверки(она кстати равна - 2****- ну то есть отрицательная)


HELP!!! HELP!!! HELP!!!
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
bel_nikita
Дата 26.1.2004, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата
int x=320;
int y=240;

int dxp=300;
int dyp=400;

в этой сточке утебя проблема
Цитата
a=dxp-x;

у тебя получается -20, но так как unsigned, то а=FFFFFFECh.

вроде бы такsmile.gif


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 26.1.2004, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



что значит %li?
%i - знаю.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ner-zul
Дата 26.1.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



1)да но когда было все просто long int точно так же глючило!
2)%li - вроде так надо писать в printf когда хочешь вывести переменную типа long int( я в учебнике смотрел) %i - просто int.
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
bel_nikita
Дата 26.1.2004, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Ner-zul
все правильно, мне кажется, у тебя ошибка в самом алгоритме вычисления
я не знаю, что ты вычесляешь, но кажется тебе надо добавить деление по модулю 2 (%320)
это, типа, если у тебя точка вылезает за границу (у тебя эта граница= 320) и ты хочешь отобразить ее вновь
вообщем у тебя движется точка в право. дошла до границы 320 и ты должен отобразить ее, но так как ты уже вылез за границу видимости ты должен отобразить ее уже с нуля. если это так то добавь a=(dxp-x)%320 или a=(dxp-x)&320, что выглядет красивее
понял? аль нет? smile.gif


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ner-zul
Дата 26.1.2004, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



Я понял что ты мне предлагаешь! и это хорошо но у меня дело в другом:
Я хочу написать подобие арканоида... И щас у меня решается вопрос как отработать соударения шарика с углами и о концы управляемой перекладины(а в углах и на концах точки) и чтобы оnследить момент ударения я рассчитываю расстояние от центра шара до той точки о которую он ударится и отобьется, и когда расстояние между этими точками равно радиусу то я зоставляю шарик двигаться в обратном напрвлении ... вот такое простое условие и такая неразрешимая проблема... как я уже говорил это расстояние глючит по страшному и шарик начинает отражаться от всего чего только хочет!!! забавно и грустно....
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
bel_nikita
Дата 26.1.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



ну, это надо на код смотреть, точнее на алгоритм вычисления
вычесление:
Цитата
a=dxp-x;
некорректное
у тебя число отрицательное получается
вообще, что такое а?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ner-zul
Дата 26.1.2004, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



1)Ну формула такая : r*r=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)
2)а = x1-x2(это я формулу на несколько переменных разделил чтобы найти где глючит)
3)Даже если разность отрицательная то а*а всегда положительное!==> r*r всегда положительное.
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.