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