C++ code; unforced damped oscillator

Click For Summary

Discussion Overview

The discussion revolves around creating a C++ program to simulate the motion of a damped oscillator, specifically generating displacement values based on a mathematical formula. The conversation includes aspects of programming in C++, troubleshooting compilation issues, and formatting output.

Discussion Character

  • Homework-related
  • Technical explanation
  • Exploratory

Main Points Raised

  • The initial poster expresses a lack of familiarity with C++ and requests hints or a template for their assignment involving a damped oscillator formula.
  • One participant provides a code snippet that calculates displacement values using the provided formula and suggests including the math library for necessary functions.
  • The original poster encounters a linking error related to file permissions when attempting to compile the program.
  • Another participant suggests that the error may be due to insufficient permissions to write to the specified directory and recommends changing the output location.
  • The original poster successfully resolves the permission issue and inquires about formatting the output as a table with headings and units.
  • A participant responds that adding a heading can be accomplished with an additional printf statement before the loop.
  • The original poster later shares an updated code snippet but reports that it does not produce any output and asks how to attach units to the output.
  • Another participant advises that the program writes to standard output and suggests running it from a command line, also mentioning that the format string in printf can be customized.

Areas of Agreement / Disagreement

Participants generally agree on the steps needed to troubleshoot and enhance the program, but there are no explicit resolutions to the original poster's output issues or formatting questions.

Contextual Notes

The discussion includes varying levels of familiarity with C++ programming, and the original poster's code may depend on specific configurations of their development environment.

Who May Find This Useful

Individuals learning C++ programming, particularly in the context of physics simulations or homework assignments, may find this discussion relevant.

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.
 
  • #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
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 17 ·
Replies
17
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
11K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 19 ·
Replies
19
Views
3K