Если я наберу 3 5 3 1, он не пройдет через оператор if, я не могу понять, почему, я думал, что это должно быть, потому что эти числа не равны, кроме 3 и 3.
cin>>x1 >> y1>>x2>>y2;
if (x1<=1000000 && x1>0 && x2<=1000000 && x2>0 && y1<=1000000 && y1>0 &&
y1<=1000000 && y1>0){
xp2=x2;
yp2=y2;
xp1=x1;
yp1=y1;
cout<<">>"<<xp1<<" "<<yp1<<endl;
cout<<">>"<<xp2<<" "<<yp2<<endl;
cout<<"----------"<<endl;
//TRIES TO FIND A SUB-TREE AND TELL THE DISTANCE BETWEEN X1,Y1 AND X2,Y2
if (xp1!=xp2 && yp1!=yp2){
while(xp1!=xp2 && yp1!=yp2 || xp1!=yp1){
xp1=x1;
yp1=y1;
a2=0;
while(xp1!=xp2 && yp1!=yp2 || xp1!=yp1){
if (xp1<yp1|| xp1!=yp1){
yp1-=xp1;
a++;
}else if (xp1>yp1|| xp1!=yp1){
xp1-=yp1;
a++;
}cout<<">>"<<xp1<<" "<<yp1<<endl;
}
if (xp1!=xp2 && yp1!=yp2|| xp1!=yp1){
if (xp2<yp2|| xp1!=yp1){
yp2-=xp2;
a2++;
}else if (xp2>yp2|| xp1!=yp1){
xp2-=yp2;
a2++;
}cout<<xp2<<" "<<yp2<<"<<"<<endl;
}
cout<<"LOOP CHECK"<<endl;
}
cout<<"IF CHECK"<<endl;
}
@AlgirdasPreidžius нет, я попробую, я совсем новичок в программировании
Пожалуйста, покажите объявления типов, трудно давать какие-либо советы, когда типы неизвестны.
@SPlatten 'int x1,x2,y1,y2,xp1,xp2,yp1,yp2; int a = 0,a2= 0, att=0;'
@GvidoBērziņš Изучение того, как использовать отладчик, сэкономит вам больше времени в долгосрочной перспективе, поскольку вам не придется ждать, пока кто-то скажет вам, почему ваш код не работает, чего вы ожидаете. С помощью отладчика вы можете выполнять код построчно, просматривая значения переменных и т. д. на любом этапе выполнения.
Над какой системой вы работаете, 32-битная?
@AlgirdasPreidžius, отличный совет, не знал об этой функции, спасибо!
из вашей проблемы вы тестируете два раза y1<=1000000 && y1>0, второй раз должен быть с y2.
Когда у вас есть несколько тестов в состоянии while или if, используйте (), чтобы было понятнее, что вы ожидаете увидеть.
Я думаю, что эти условия while: «в то время как (xp1! = xp2 && yp1! = yp2 || xp1! = yp1) while (xp1! = xp2 && yp1! = yp2 || xp1! = yp1)» должны читать: «пока ( xp1!=xp2 && (yp1!=yp2 || xp1!=yp1)) while(xp1!=xp2 && (yp1!=yp2 || xp1!=yp1))"
@bruno Проблема не в том, что я изменил его, спасибо, что заметили, но он только проверяет, находится ли ввод в правильных границах.





со значениями 3 5 3 1 тест
if (xp1!=xp2 && yp1!=yp2){
ложно, потому что значения xp1 и xp2 равны 5, поэтому вы ничего не делаете
И как я сказал в замечании
if (x1<=1000000 && x1>0 && x2<=1000000 && x2>0 && y1<=1000000 && y1>0 &&
y1<=1000000 && y1>0){
должно быть
if (x1<=1000000 && x1>0 && x2<=1000000 && x2>0 && y1<=1000000 && y1>0 &&
y2<=1000000 && y2>0){`
О, если я правильно понимаю, это происходит только в том случае, если оба они верны.
да a && b истинен, когда оба а и б истинны
Вы пытались выполнить код с помощью отладчика?