Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 06:47   #1
Зелёный
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 29
По умолчанию Не пойму в чём проблема. Кажется дело в типах.(С++)

Есть некая программа. Пишется на С++
вот сам код.Точнее проблемный кусок.

Код:
typedef struct { int h; int g; } TPoint;
s[1].h=42;
s[1].g=151;
s[2].h=430;
s[2].g=287;
int b1=-1;
float bb1=0;
float bb2=0;
int b2=-1;
float kk1=0;
float kk2=0;
long int u11,u22,u33,u44;
float bbb1=0;
float bbb2=0;
float kkk1=0;
float kkk2=0;
long int buf;
TPoint u1,u2;

if(b1>=0){
u11=s[1].h*(mast[b1].g-mast[b1+1].g)+s[1].g*(mast[b1+1].h-mast[b1].h)+(mast[b1].h*mast[b1+1].g-mast[b1].g*mast[b1+1].h);
u22=s[2].h*(mast[b1].g-mast[b1+1].g)+s[2].g*(mast[b1+1].h-mast[b1].h)+(mast[b1].h*mast[b1+1].g-mast[b1].g*mast[b1+1].h);}

if(b2>=0){
u33=long(s[1].h)*long((mast[b2].g-mast[b2+1].g))+long(s[1].g)*long((mast[b2+1].h-mast[b2].h))+long((mast[b2].h*mast[b2+1].g-mast[b2].g*mast[b2+1].h));
u44=long(s[2].h)*long((mast[b2].g-mast[b2+1].g))+long(s[2].g)*long((mast[b2+1].h-mast[b2].h))+long((mast[b2].h*mast[b2+1].g-mast[b2].g*mast[b2+1].h));}
buf=(long(u33)/long(u33))*(long(u44)/long(u44));
if(paint==2){pLine(hdc,s[1].h,s[1].g,s[2].h,s[2].g,100);
pLine(hdc,u1.h,u1.g,u2.h,u2.g,255);


}else if(paint==3){

if((u11*u22)<0){bb2=(float(mast[b1].h*mast[b1+1].g-mast[b1+1].h*mast[b1].g))/float(mast[b1].h-mast[b1+1].h);
bb1=float(s[1].h*s[2].g-s[2].h*s[1].g)/float(s[1].h-s[2].h);
kk2=(float(mast[b1].g-mast[b1+1].g))/float((mast[b1].h-mast[b1+1].h));
kk1=(float(s[1].g-s[2].g))/float(s[1].h-s[2].h);
u1.h=int((bb2-bb1)/(kk1-kk2));
u1.g=int(u1.h*kk1+bb1);} else {u1.h=s[1].h; u1.g=s[1].g;}

if(buf<0){ bbb2=float(float (mast[b2].h)*float (mast[b2+1].g)-float(mast[b2+1].h)*float(mast[b2].g))/float(float(mast[b2].h)-float(mast[b2+1].h));
bbb1=float(float(s[1].h)*float(s[2].g)-float(s[2].h)*float(s[1].g))/(float(s[1].h)-float(s[2].h));
kkk2=(float(mast[b2].g-mast[b2+1].g))/float((mast[b2].h-mast[b2+1].h));
kkk1=(float(s[1].g-s[2].g)/(float(s[1].h-s[2].h)));

u2.h=int((bbb2-bbb1)/(kkk1-kkk2));
u2.g=int(((bbb2-bbb1)/(kkk1-kkk2))*kkk1+bbb1);
//if ((kkk2)==0) pLine(hdc,s[1].h,s[1].g,s[2].h,s[2].g,100);
} else {pLine(hdc,s[1].h,s[1].g,s[2].h,s[2].g,100);}//u2.h=s[2].h; u2.g=s[2].g;}

Так вот...проблема в u33,u44. Эти переменные вычисляются и имеют примерные значения 46000 и минус 29000*вычислял вчера,поэтому точные значения не помню*

Далее...ниже делается проверка на то,являются ли эти два числа числами с разными знаками....Идея в том,чтобы умножить одно на другое,а потом сравнить результат с нулём...Если числа с разными знаками(и не равны нулю),то результат будет меньше нуля...В противном случае больше или равен.
По моим рассчётам они всё сходится,а вот DevCpp говорит,что их произведение - положительное число.

Как-то так...может путано объяснил чуть-чуть...Ах да...последние извращения с переменной buf..это уже так...от отчаяния. По идее она не нужна.
Зелёный вне форума Ответить с цитированием
Старый 26.11.2010, 09:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
if((u11*u22)<0)
А где проверка iu33,u44? Как объявлены?
p51x вне форума Ответить с цитированием
Старый 26.11.2010, 09:49   #3
Зелёный
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 29
По умолчанию

В смысле как получаем эти самые b1,b2? вот :
Код:
 for(int i=0; i<=N;i++)
                        {if(u[i]*u[i+1]<0){if (b1<0)b1=i; else b2=i;}
                                }
Зелёный вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! Не пойму, в чем дело... Baharev БД в Delphi 7 07.12.2009 19:18
Подскажите в чём дело? GMSD PHP 0 14.08.2009 14:04
Ресурсы приложения, не пойму в чём проблема. Air Общие вопросы Delphi 13 10.08.2008 21:44