Here are program instructions.
IT SAYS "segmentation fault" WHEN RAN.
Specifications
You must create a Ship class:
The Ship class maintains the position data for each ship/vessel and its distance from another Ship.
It has a default constructor, which sets all of the member data to zero, and a non-default constructor that has three parameters, one for each coordinate.
It contains methods to calculate the distance to another Ship and to retrieve that distance later.
You must also overload a relational operator, such as < or >, for use in a sorting routine. Thus, a Ship object can report whether or not its distance is less than or greater than that of another Ship object.
When you input the position data for your warship, you must use that data to create a Ship object dynamically.
After reading in the number of enemy vessels, you must dynamically create an array of Ship objects to hold the enemy vessel data.
You must create a separate function for reading in the data for the enemy vessels.
After you read in the data for each enemy vessel, you must use the non-default constructor to create a Ship object and then assign it to a slot in the array. You will then call the method to calculate the distance from the warship.
After all of the data is read, you must sort the enemy vessels by their distances from the warship. You must write a separate function for sorting.
You must output the distances in sorted order. You must write a separate function to output this data.
Sample position data is available in a file named positions.txt. Each line in the file contains a single position, with each coordinate separated by a space. For example, the line of data:
10 30 85
represents the position (10,30,85) in x,y,z coordinates. The first line in the file contains the position of your warship, the next line contains the number of enemy vessels, and the remaining lines each contain the position of a single enemy vessel.
You must deallocate all dynamically-allocated memory.
Output
Your output should look as follows:
There are 7 enemy vessels
Sorted distances:
47
55
76
85
100
198
425
main.cpp
#include <iostream>
#include "Ship.h"
using namespace std;
int main()
{
int x, y, z;
int amount;
cout << "Please enter your ship data" << endl;
cin >> x;
cin >> y;
cin >> z;
Ship * myLocation = new Ship(x, y, z);
cout << "How many ships are there?" << endl;
cin >> amount;
Ship * ships = new Ship[amount];
for (int i = 0; i < amount; i++)
{
ships[i] = ships[i].getCoordinates();
}
for (int j = 0; j < amount; j++)
{
ships[j].setDistance(*myLocation, ships[j]);
}
ships[amount].sortDistance(&ships[amount], amount);
ships[amount].outputDistance(&ships[amount], amount);
return 0;
}
ship.h
class Ship
{
protected:
int x, y, z;
float distance;
Ship * ships;
public:
Ship();
Ship(int, int, int);
~Ship();
Ship & getCoordinates();
void setDistance(Ship, Ship);
float getDistance();
bool operator<(Ship &);
void sortDistance(Ship *, int);
void outputDistance(Ship *, int);
};
ship.cpp
Ship::Ship():x(0), y(0), z(0), distance(0)
{
}
Ship::Ship(int init_x, int init_y, int init_z): x(init_x), y(init_y), z(init_z)
{
}
Ship::~Ship()
{
delete [] ships;
}
Ship & Ship::getCoordinates()
{
cout << "Please eneter the coordinates of ship" << endl;
cin >> x;
cin >> y;
cin >> z;
Ship * s = new Ship(x, y, z);
return *s;
}
void Ship::setDistance(Ship s1, Ship s2)
{
distance = sqrt(((float)(s1.x - s2.x)*(s1.x - s2.x)) + ((s1.y - s2.y)*(s1.y - s2.y)) + ((s1.z - s2.z)*(s1.z - s2.z)));
}
float Ship::getDistance()
{
return distance;
}
bool Ship::operator<(Ship & other)
{
if (distance < other.distance)
return true;
else
return false;
}
void Ship::sortDistance(Ship * new_ships, int number)
{
for (int i = 0; i < number - 1; i++)
{
for (int j = 0; j < number; j++)
{
if (new_ships[i] < new_ships[j])
{
Ship temp;
temp = new_ships[i];
new_ships[i] = ships[j];
new_ships[j] = temp;
}
}
}
}
void Ship::outputDistance(Ship * new_ships, int number)
{
for (int i = 0; i < number; i++)
{
cout << "This is what ship " << i << " should be" << endl;
}
}