#include #include //using namespace std; // <=== works very badly //instead use the following using std::cout; using std::cin; using std::endl; #define MAX 100 #define MAXCITIES 1000 struct City { char name[MAX]; double x,y; }; // returns the moved city using a return statement City moveCity(City city, int xmove, int ymove) { city.x = city.x + xmove; city.y += ymove; return city; } // returns the moved city as a reference parameter void moveCity2(City &city, int xmove, int ymove) { city.x = city.x + xmove; city.y += ymove; } // uses both techniques - possibly confusing! City moveCity3(City &city, int xmove, int ymove) { city.x = city.x + xmove; city.y += ymove; return city; } City createMidPoint(City city1, City city2) { City midway; strcpy(midway.name, "Midway"); midway.x = (city1.x + city2.x) /2; midway.y = (city1.y + city2.y) /2; return midway; } double distance(City c1, City c2) { return sqrt( pow(c1.x - c2.x,2) + pow(c1.y - c2.y,2) ); } void findClosestCities(City cities[MAXCITIES], int cityCount, City &city1, City &city2) { double minDist = distance(cities[0],cities[1]); city1 = cities[0]; city2 = cities[1]; for (int i = 0; i < cityCount; i++) { for (int j = i+1; j < cityCount; j++) { if (minDist > distance(cities[i],cities[j])) { minDist = distance(cities[i],cities[j]); city1 = cities[i]; city2 = cities[j]; } } } } int main() { City laramie; laramie.x = 0; laramie.y = 0; strcpy(laramie.name,"Laramie"); City hiddenLaramie = laramie; City fortcollins = { "Fort Collins", 20,-45 }; City cities[MAXCITIES]; int cityCount; //.... fill these up cities[0] = laramie; cities[1] = fortcollins; cityCount = 2; cities[2] = createMidPoint(cities[0],cities[1]); cityCount++; cities[0] = moveCity(cities[0],40,-120); moveCity2(laramie,400,200); for (int i = 0; i < cityCount; i++) { cout << cities[i].name << " " << cities[i].x << " " << cities[i].y << endl; } City city1, city2; findClosestCities(cities,cityCount,city1,city2); cout << "Close cities" << endl; cout << city1.name << " and " << city2.name << endl; }