Write a function to calculate the cubic function: y = 4x 3 + 2x 2 –5x – 4 The function should...

14
Write a function to calculate the cubic function: y = 4x 3 + 2x 2 –5x – 4 The function should return y for any given value of x. Question One #include <cmath> double cubic(double x){ double y; y = 4*pow(x,3)+10*pow(x,2)-5*x-4; return y; } … or … double cubic(double x){ return (4*x*x*x + 10*x*x - 5*x - 4); } •When we say return we mean return •Unless a method is specifically for writing to screen (e.g. dump(), Print()…) only use std::cout inside a method for debugging

Transcript of Write a function to calculate the cubic function: y = 4x 3 + 2x 2 –5x – 4 The function should...

Write a function to calculate the cubic function:

y = 4x3 + 2x2 –5x – 4

The function should return y for any given value of x.

Question One

#include <cmath>double cubic(double x){ double y; y = 4*pow(x,3)+10*pow(x,2)-5*x-4; return y;}… or …

double cubic(double x){ return (4*x*x*x + 10*x*x - 5*x - 4);}

•When we say return we mean return

•Unless a method is specifically for writing to screen (e.g. dump(), Print()…) only use std::cout inside a method for debugging

Write a main program which repeatedly calls this function in a loop where x is incremented in steps of 0.05 over the range –2.5 < x < 2.5.

Question One (cont)

void main(){

for (double x = -2.5; x <= 2.5 ; x += 0.05){ double y = cubic(x);

}

return;}

void main(){ double xmin = -2.5; double ymin = cubic(xmin); for (double x = -2.5; x <= 2.5 ; x += 0.05){ double y = cubic(x); if (y < ymin) { ymin = y; xmin = x; } }

return;}

#include <iostream>void main(){ double xmin = -2.5; double ymin = cubic(xmin); for (double x = -2.5; x <= 2.5 ; x += 0.05){ double y = cubic(x); if (y < ymin) { ymin = y; xmin = x; } } std::cout << “The minimum value of y is ” << ymin << “and occurs at x = ” << xmin << std::endl; return;}

Write a main program which repeatedly calls this function in a loop where x is incremented in steps of 0.05 over the range –2.5 < x < 2.5. Determine the minimum value of y returned within the range and print it, and the value of x at which it occurs, to the screen.

Write a piece of code which performs the following functions:

• requests the user to supply a pair of integer numbers from the keyboard within a loop;

Question TwoWrite a piece of code which performs the following functions:

• writes each pair of numbers to an output file on a single line (i.e. one line in the file per pair of numbers);

Write a piece of code which performs the following functions:

• continues in the request loop until the user enters the values 0 0 at which point the loop should be broken and the program should terminate.

#include <iostream>

void main(){ int int1=1; int int2=1; while(){ std::cout << “Please enter two integers” << std::endl; std::cin >> int1 >> int2;

} return;}

#include <iostream>#include <fstream>void main(){ int int1=1; int int2=1; ofstream output(“myfile.txt”); while(){ std::cout << “Please enter two integers” << std::endl; std::cin >> int1 >> int2; output << int1 << “ “ << int2 << std::endl; } return;}

#include <iostream>#include <fstream>void main(){ int int1=1; int int2=1; ofstream output(“myfile.txt”); while(int1!=0 || int2!=0){ std::cout << “Please enter two integers (0,0) exits” << std::endl; std::cin >> int1 >> int2; if (int1==0 && int2==0) break; output << int1 << “ “ << int2 << std::endl; } return;}

Question Three

Class BroomStick{

private:

public:

}

Write a class called BroomStick.Write a class called BroomStick. The class should include:

• Suitable member variables to represent position and velocity

Write a class called BroomStick. The class should include:

• An appropriate way of initialising the broomstick position and velocity upon creation

Write a class called BroomStick. The class should include:

• Methods to set the height and velocity in the horizontal plane of the broomstick

Write a class called BroomStick. The class should include:

• Methods to return the current height and x coordinate at time t of the broomstick

Class BroomStick{

private: double x, y, z; double vx, vy;

public:

}

Class BroomStick{

private: double x, y, z; double vx, vy;

public: BroomStick(); BroomStick(double x0, double y0, double z0, double vx0, double vy0);

}

Class BroomStick{

private: double x, y, z; double vx, vy;

public: BroomStick(); BroomStick(double x0, double y0, double z0, double vx0, double vy0); void SetVelocity(double set_vx, double set_vy); void SetHeight(double height);

}

Class BroomStick{

private: double x, y, z; double vx, vy;

public: BroomStick(); BroomStick(double x0, double y0, double z0, double vx0, double vy0); void SetVelocity(double set_vx, double set_vy); void SetHeight(double height); double Height(); double XPosition(double time);}

Question Three (cont)Class BroomStick{

private: double x, y, z; double vx, vy;

public: BroomStick(); BroomStick(double x0, double y0, double z0, double vx0, double vy0); void SetVelocity(double set_vx, double set_vy); void SetHeight(double height); double Height(); double XPosition(double time);}

• Data members should always be private, if you want access to them provide a method to do this

• Positions & velocities can be floats or doubles but not really ints

Question Three - constructors

BroomStick::BroomStick(){ x = y = z = vx = vy = 0.0;}

BroomStick::BroomStick(double x0, double y0, double z0, double vx0, double vy0){ SetPosition(x0, y0); SetHeight(z0); SetVelocity(vx0, vy0);}

• You could set the member variables directly of course, but since we have methods that do this for us it is best to use these.

Question Three - set methodsvoid BroomStick::SetVelocity(double set_vx, double set_vy){ vx = set_vx; vy = set_vy;}

void BroomStick::SetHeight(double height){ z = height;}

• A method that sets a value shouldn’t assume that the user knows (or cares) what the current value is.

• A method to change the height by a certain value could be useful but is not what was asked for…

double BroomStick::AddHeight(double height){

z += height;

return z;

}

Question Three - return methods

double BroomStick::Height(){ return z;}

double BroomStick::XPosition(double time){ return (x + vx*time);}

• XPosition() should not really modify the member variables, otherwise the position returned will not be relative to the original position.

Question FourWrite classes to represent tracks and jets.

-         tracks : these are single high energy particles travelling out from the centre of the detector and are shown in yellow

-         jets: collections of tracks which clearly come from the same point. There are three distinct jets in this event

Physicists analyse these events using object oriented code.. In a real analysis we first find all of the tracks, then we run algorithms to find those tracks which are close together because they come from a Jet. Assume that this step has been done, i.e. we now know all of the tracks which belong to each Jet.

Question Four - track class

class Track {

private: double x, y, z; double vx, vy, vz;

public:

Track(); Track(double x0, double x0, double x0, double vx0, double vy0, double vz0); double X(); double Y(); double Z(); double XVelocity(); double YVelocity(); double ZVelocity();}

The Track design should be simple and embody the concept of direction and velocity.

Question Four - track class (Mk II)

class Track {

private: ThreeVector pos; ThreeVector vel;

public:

Track(); Track(ThreeVector pos0, ThreeVector vel0); Track(double x0, double x0, double x0, double vx0, double vy0, double vz0); ThreeVector Position(); ThreeVector Velcoity();}

Question Four - jet class

#include <vector> class Jet {private: std::vector<Track> tracks; ThreeVector pos; ThreeVector vel;public: Jet(); Jet(Track track); void AddTrack(Track track); void AddTracks(std::vector<Track> tracksin); int NumTracks() void ZeroTracks(); Track GetTrack(int i); ThreeVector Position(); ThreeVector Velocity();}

The Jet design should allow it to contain the Tracks which belong to it, and have suitable member variables and methods for this purpose.

Question Four - jet class methodsint Jet::NumTracks(){ return tracks.size();}

void Jet::AddTrack(Track track){ tracks.pushback(track);}

Track Jet::GetTrack(int i){ if ( i >= 0 && i < this->NumTracks()){ return tracks[i]; } else { Track empty; return empty; }}

Question Four - demonstration

void main(){ Jet Jet1, Jet2; for (int i = 0 ; i < 100 ; i++){ Track temp(rand(), rand(), rand(), rand(), rand(), rand()); Jet1.Add(temp); } for (int j = 0 ; j < 20 ; j++){ Track temp(rand(), rand(), rand(), rand(), rand(), rand()); Jet2.Add(temp); } std::cout << “Jet1 has ” << Jet1.NumTracks() << “ tracks” << std::endl;

Track test = Jet2.GetTrack(4); std::cout << “Track random has position (” << test.Position().X() << “,” << test.Position().Y() << “,” << test.Position().Z() << “)” << std::endl; return;}

Demonstrate the creation of Tracks and “empty” Jets, and then show how you would call methods of Jet objects to add Track objects into it.