# Homework Help: C++ code; unforced damped oscillator

1. Feb 6, 2010

### mathman44

1. The problem statement, all variables and given/known data

I have an assignment to make a C++ program (I've never seen C++ before, and my professor has never taught it) that makes a set of displacement values corresponding to the motion of a damped oscillator. The function is:

$$x = A*e^{(-\gamma*t/2)} * cos(\omega*t)$$

where variables are to "float", except time. Time should be defined as "int" and use it as a counter variable. $$\gamma$$ and $$\omega$$ are to be defined arbitrarily. For each time value, print out the time and the displacement.

I have absolutely no background with C++. After googling for some time, I downloaded Code::Blocks and now I have to write the file. I have never seen C++ before... so I feel kind of bad for not showing any work, but I literally have no idea how to do this. This is all I have:

#include <stdio.h>
main()
{
int time;

int lower, upper, step;
lower = 0;
upper = 300;
step = 1;

Would anyone be kind enough to lend me some hints or give me a template?

2. Feb 6, 2010

### hamster143

Code (Text):

float gamma = 1.0, omega = 0.1, A=1.0;
for(int t=lower; t<upper; t+=step)
{
float x = A * exp(-gamma*t/2) * cos(omega*t);
printf("%d\t%f\n", t, x);
}

Oh and you also need to #include <math.h> to use exp and cos.

3. Feb 6, 2010

### mathman44

Thank you so much! One other question though:

The file gets compiled, but now I get:

C:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot open output file C:\Program Files\CodeBlocks\MinGW\Untitled1.exe: Permission denied
collect2: ld returned 1 exit status

I'm using:

#include <stdio.h>
#include <math.h>
main()
{
int time;

int lower, upper, step;
lower = 0;
upper = 300;
step = 1;
float gamma = 1.0, omega = 0.1, A=1.0;
for(int t=lower; t<upper; t+=step)
{
float x = A * exp(-gamma*t/2) * cos(omega*t);
printf("%d\t%f\n", t, x);
}
}

:S

4. Feb 6, 2010

### hamster143

Is this on Vista? Most likely you don't have permission to write into C:\Program Files\CodeBlocks\MinGW\. Tinker with your command-line to make it put the executable someplace where you do have write access.

5. Feb 6, 2010

### mathman44

Thanks, that solved it! One last thing: is it possible to have the program organize the output in a formatted table (with a heading and units)?

6. Feb 6, 2010

### hamster143

Everything is possible. Add a printf() with the heading you want before the for().

7. Feb 6, 2010

### mathman44

Thanks so much, you saved me

8. Feb 6, 2010

### mathman44

:S I have:

#include <stdio.h>
#include <math.h>
main()
{
int time;

int lower, upper, step;
lower = 0;
upper = 300;
step = 1;
float gamma = 0.01, omega = 100, A=10000.0;
printf("Time(s) versus Displacement(m)\n");
for(int t=lower; t<upper; t+=step)
{
float x = A * exp(-gamma*t/2) * cos(omega*t);
printf("%d\t%f\n", t, x);
}
}

Which doesn't seem to be returning anything. Also how can I attach units to the output? Sorry to pester you guys...

9. Feb 6, 2010

### magwas

It writes to standard output. Start it from a command line.
You can write anything into the printf format string. use "man printf" on google to know more about the format string.

10. Feb 6, 2010

### mathman44

I'm doing this on windows using C::B, by the way.