C++ code; unforced damped oscillator

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
9 replies · 6K views
mathman44
Messages
204
Reaction score
0

Homework Statement



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:

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

where variables are to "float", except time. Time should be defined as "int" and use it as a counter variable. [tex]\gamma[/tex] and [tex]\omega[/tex] 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?
 
Physics news on Phys.org
Code:
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.
 
Thank you so much! One other question though:The file gets compiled, but now I get:

Linking console executable: C:\Program Files\CodeBlocks\MinGW\Untitled1.exe
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
 
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.
 
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)?
 
Everything is possible. Add a printf() with the heading you want before the for().
 
Thanks so much, you saved me
 
: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...
 
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.
 
I'm doing this on windows using C::B, by the way.