Как сбросить переменную обратно в 0 после использования в цикле в NXC
По какой-то странной причине переменная "угол" не будет сброшена до 0, когда цикл закончится. Вся математика - это просто вычисление c = sqrt(a^2 + b^2 - 2abCos(theta)), робот не выполнит всю математику в одной строке. В полном коде a и b обе являются переменными переменными и основаны на вводе ультразвукового датчика.
Подпрограмма может вызываться до 3 раз, и переменная угла должна начинаться с 0 каждый раз, когда вызывается подпрограмма.
Я попытался поставить угол поплавка = 0; или просто угол = 0; во всех мыслимых местах, но ничего не работает. Я даже пытался использовать int angle = 0; в нескольких местах.
int angle, a, b, c, csqr, theta, cosTheta, aSqrd, bSqrd, atmb, twoab;
#define pi 3.14159265359
sub calculate()
{
repeat(2)
{
float a = 172.42;
float angle = angle + 3;
float theta = ((angle)*(pi/180));
float b = 172.42;
float cosTheta = cos(theta);
float aSqrd = pow(a, 2);
float bSqrd = pow(b, 2);
float atmb = (a * b);
float twoab = (2 * atmb);
float csqr = ((aSqrd + bSqrd) - (twoab * cosTheta));
float c = sqrt(csqr);
NumOut(0,0,angle);
Wait(3000);
ClearScreen();
}
float angle = 0;
}
task main()
{
calculate();
ClearScreen();
calculate();
}
2 ответа
Так как float angle
является локальным для метода расчета и скрывает int angle
в глобальном масштабе. int angle
не инициализируется ни к чему.
У вас есть неинициализированная переменная в цикле repeat(2).
float angle = angle + 3;