I am trying to make a city distance calculator using the longitude and latitude of a city. The problem I am having is putting the cities into an array. My array attempt is commented out in the main method. Please let me know what I am doing wrong.
#include <iostream>
#include <math.h>
#define pi 3.14159265358979323846
using namespace std;
double distance(double lat1, double lon1, double lat2, double lon2, char unit);
double deg2rad(double deg);
double rad2deg(double rad);
class City
{
public:
//declare variables
string name;
double latitude;
double longitude;
City(string, double, double); //constructor
double distance(string, string);
};
double cityDistance(City a, City b);
int main() {
//construct cities
City Providence("Providence", 41.8239890, -71.4128340);
City Cranston("Cranston", 41.7798230, -71.4372800);
City NewYork("NewYork", 40.7143530, -74.0059730);
City Boston("Boston", 42.3584310, -71.0597730);
City Killington("Killington", 43.6775680, -72.7798250);
City Springfield("Springfield", 42.1014830, -72.5898110);
City Bridgeport("Bridgeport", 41.1865480, -73.1951770);
City Cambridge("Cambridge", 42.3736160, -71.1097340);
City Norwalk("Norwalk", 41.1175970, -73.4078970);
City Quincy("Quincy", 42.2528770, -71.0022710);
//put city into array
// City cityArray[] = { };
// cityArray[0] = {"Providence", 41.8239890, -71.4128340};
// cityArray[1] = {"Cranston", 41.7798230, -71.4372800};
// cityArray[2] = {"NewYork", 40.7143530, -74.0059730};
// cityArray[3] = {"Boston", 42.3584310, -71.0597730};
// cityArray[4] = {"Killington", 43.6775680, -72.7798250};
// cityArray[5] = {"Springfield", 42.1014830, -72.5898110};
// cityArray[6] = {"Bridgeport", 41.1865480, -73.1951770};
// cityArray[7] = {"Cambridge", 42.3736160, -71.1097340};
// cityArray[8] = {"Norwalk", 41.1175970, -73.4078970};
// cityArray[9] = {"Quincy", 42.2528770, -71.0022710};
//calculate distance
cout << "Distance between Providence and Cranston: " << distance(41.8239890, -71.4128340, 41.7798230, -71.4372800, 'M') << endl;
cout << "Distance between NewYork and Boston: " << distance(40.7143530, -74.0059730, 42.3584310, -71.0597730, 'M') << endl;
cout << "Distance between Killington and Norwalk: " << distance(43.6775680, -72.7798250, 41.1175970, -73.4078970, 'M') << endl;
//print distance using city name
cout << endl;
cout << "Distance between Providence and Cranston: " << cityDistance(Providence, Cranston) << endl;
cout << "Distance between NewYork and Boston: " << cityDistance(NewYork, Boston) << endl;
cout << "Distance between Killington and Norwalk: " << cityDistance(Killington, Norwalk) << endl;
//end
return 0;
}
City::City(string n, double lt, double lg)
{
name = n;
latitude = lt;
longitude = lg;
}
double deg2rad(double deg)
{
return (deg * pi / 180);
}
double rad2deg(double rad)
{
return (rad * 180 / pi);
}
double distance(double lat1, double lon1, double lat2, double lon2, char unit)
{
double theta, dist;
theta = lon1 - lon2;
dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta));
dist = acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
switch(unit) {
case 'M':
break;
case 'K':
dist = dist * 1.609344;
break;
case 'N':
dist = dist * 0.8684;
break;
}
return(dist);
}
double cityDistance(City a, City b)
{
return distance(a.latitude, a.longitude, b.latitude, b.longitude, 'M');
}
std::vectorfor this. I also suggest creating anenumfor unit.