1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: C++ code; unforced damped oscillator

  1. Feb 6, 2010 #1
    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:

    [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?
     
  2. jcsd
  3. Feb 6, 2010 #2
    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.
     
  4. Feb 6, 2010 #3
    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
     
  5. Feb 6, 2010 #4
    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.
     
  6. Feb 6, 2010 #5
    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)?
     
  7. Feb 6, 2010 #6
    Everything is possible. Add a printf() with the heading you want before the for().
     
  8. Feb 6, 2010 #7
    Thanks so much, you saved me
     
  9. Feb 6, 2010 #8
    :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...
     
  10. Feb 6, 2010 #9
    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.
     
  11. Feb 6, 2010 #10
    I'm doing this on windows using C::B, by the way.
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook