Comp Sci C++ code; unforced damped oscillator

Click For Summary
The discussion revolves around creating a C++ program to calculate and display the displacement values of a damped oscillator using the formula x = A*e^{(-γ*t/2)} * cos(ω*t). The user, unfamiliar with C++, seeks guidance on writing the program and encounters a permission error when trying to compile the executable in the default directory. Suggestions include changing the output directory to one with write access and formatting the output with headers and units. The user is advised to use printf for formatting and to run the program from the command line for proper output. Overall, the thread provides insights into basic C++ programming and troubleshooting compilation issues.
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:

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?
 
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.
 
  • #10
I'm doing this on windows using C::B, by the way.
 

Similar threads

  • · Replies 15 ·
Replies
15
Views
2K
Replies
7
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
11K
  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 19 ·
Replies
19
Views
3K