2013-03-20 8 views
1

У меня этот код.C++ Если цикл внутри цикла for. Пределы

for(int j=0; j<=n; j++) { 
    Xnew2 = j*(Y+R2)/n; 
    Ynew2 = pow((((Y+R2)*(Y+R2)) - (Xnew2*Xnew2)), 0.5); 
    cout<<"\n("<<Xnew2<<","<<Ynew2<<")"; 
} 

Я хочу, чтобы все значения, которые будут отображаться, но я также хочу, чтобы создать ограничение на отображенных, чтобы убедиться, что Ynew2 не может идти выше, чем 310 или любой меньше -310 значений. Радиус - 482,7 мм, это число, которое в настоящее время имеют значения.

Как это сделать? Я попытался положить в него петлю if, но это не сработало, и все, что я попробовал, дало мне только одно значение. Любая помощь?

+1

Что было, если вы положили в цикле? –

+0

Если Ynew2 <= 310 // просто пытался увидеть, могу ли я получить одно значение для работы cout << "\ n (" << Xnew2 << "," << Ynew2 << ")"; –

+0

'if (Ynew <= 310) cout << ...' должен работать и предотвращать отображение значений * больше *, чем 310. С другой стороны, значения будут больше, чем -310. –

ответ

1

Попробуйте это:

for(int j=0; j<=n; j++) { 
    Xnew2 = j*(Y+R2)/n; 
    Ynew2 = pow((((Y+R2)*(Y+R2)) - (Xnew2*Xnew2)), 0.5); 

    if(abs(Ynew2) <= 310)) 
     cout<<"\n("<<Xnew2<<","<<Ynew2<<")"; 
} 

Мы используем функцию abs, чтобы получить абсолютное значение переменной Ynew2, и сравнить ее с 310. Если это меньше или равно 310, то отобразить в противном случае мы этого не делаем.

Sidenote: вы должны избегать использования \n и использовать std::endl (или просто endl, если у вас есть соответствующий using декларация).

+0

Хорошо, я попробовал код. Проблема в том, что она отображает только 3 значения, а не 10, о которых я прошу (когда я объявляю n как 10). Это только потому, что есть только 3 значения, которые не отменены лимитами. Хорошо, сделаем, что объясняет, почему вы избегаете \ n? –

+0

Правильно - только три значения 'Ynew2' попадают в диапазон [-310, 310], остальные отбрасываются. Причиной является то, что 'endl' является подходящим способом для вставки новой строки (например, для некоторых терминалов может потребоваться' \ r \ n' вместо '\ n') и выполняет дополнительную работу, включая очистку внутренних буферов, и т. д. –

+0

Большое спасибо, было очень полезно. Изменит \ n. Еще раз спасибо! –

0
for(int j=0; j<=n; j++) 
{ 
    Xnew2 = j*(Y+R2)/n; 
    Ynew2 = pow((((Y+R2)*(Y+R2)) - (Xnew2*Xnew2)), 0.5); 
    if (Ynew2 < 310 && Ynew2 > -310) 
     cout<<"\n("<<Xnew2<<","<<Ynew2<<")"; 
} 
+0

Это, похоже, не показывает указанное количество значений таким образом? –

+0

Я думаю, это зависит от того, что вы хотите, когда значения находятся за пределами установленных вами пределов. Какое поведение вы хотите? – Silas

0
const int YLIMIT = 310; 
    for(int j=0; j<=n; j++) { 
     Xnew2 = j*(Y+R2)/n; 
     int Ynew2Raw = pow((((Y+R2)*(Y+R2)) - (Xnew2*Xnew2)), 0.5); 
     int Ysign = Ynew2Raw >= 0 ? 1 : -1; 
     int limitedY2 = std::min(abs(Ynew2Raw, YLIMIT)); 
     Ynew2 = Ysign * limtedY2; 

     cout<<"\n("<<Xnew2<<","<<Ynew2<<")"; 
    } 
Смежные вопросы