# retrieve data from simple mathematical function; store data in vector(array)

Hello,
I am trying to implement a function that calculates the position for a counter of a motor. I would like to store the postion values for the different times in a vector (or array?). This is the function I implemented:

void main(void)
{
float pi=0; //initial position; later != 0
float a=pi;
float vi=0; //initial velocity
float b=vi;
float qf; //final position
qf=8200; //approximately 2 turns
float c=3*qf;
float d=-2*qf;

float Tf=1; //final time
float Ti=0; //initial time
float Ts=0.01; //sampling time
float nmuestras = Tf/Ts;
int i;

for (i=1;i<=nmuestras;i++)
{
float tiempo=i*Ts; //real time
float t=tiempo/Tf;

/*
float *ptr;
float pos;
ptr = &pos;
*ptr = a+b*t+c*t^2+d*t^3;
*/

//pos_final(t);
float pos;
pos = a+b*t+c*t^2+d*t^3;
//float pos = a+b*t+c*t^2+d*t^3;
int k;
pos_vector[k] = pos;//put the counter value in the array for storing counter values

k++;

}

I get the following errors and don´t know how to get rid of them:

ompiling...
test control2.cpp
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(18) : warning C4305: 'initializing' : truncation from 'const double' to 'float'
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(37) : error C2296: '^' : illegal, left operand has type 'float'
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(37) : error C2297: '^' : illegal, right operand has type 'float'
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(40) : error C2065: 'pos_vector' : undeclared identifier
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(40) : error C2109: subscript requires array or pointer type
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(40) : warning C4244: '=' : conversion from 'float' to 'int', possible loss of data
C:\datos\judith\proyecto_judith\pci 1784\test control2.cpp(40) : error C2106: '=' : left operand must be l-value
Error executing cl.exe.

test control2.obj - 5 error(s), 2 warning(s)

Do I maybe have to include libraries or introduce pointers?
Judith
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
Hi jutzki

One of your main problems is that you do not seem to be aware that expressions involving mixed decimal types always result in a value of type double. To assign the result of such an expression to a float you need to perform a cast.

e.g.
float nmuestras = Tf/Ts;  //should change to float nmuestras = (float) (Tf/Ts);

You also have a problem with this expression,

pos = a+b*t+c*t^2+d*t^3

^ is the XOR operator in C++. If you want to raise numbers to certain powers you have to use the pow() function in the Math library.

e.g. pos = (float) (a+b*t+c*pow(t, 2)+d*pow(t, 3));
0

Experts Exchange Solution brought to you by