Я работаю с программой, которая рассчитает расстояние между двумя географическими точками на поверхности Земли. Я довольно новичок в C ++, и я прошу прощения, если мой английский плох
Любые предложения о том, как я могу получить содержание в программе внизу в тот, что вверху без ошибок?
Это программа, которая не работает.
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main ()
double getdistance(double x1,double y1,double x2,double y2)
{
const double PI = 3.1415927;
double radius, sum;
int exit = 1;
char choice;
while (exit == 1)
{
cout << "**** Calculate Program **** \n\n"<< "1. Volume\n"<< "2. Div\n"<< "3. Calculate two geographical points\n"<< "4. Working\n\n"<< "5. Quit program\n\n";
cout << "Choose one of the options and write it here: ";
cin >> choice;
switch (choice)
{
//
case '1':
float volume (float radius);
{
cout << "radius you want to calculate: " << endl;
cin >> radius;
sum = 4.0/3.0 * PI * pow (radius, 3);
cout << "Volume: " << sum << endl;
}
break;//
case '2':
cout<<"div \n";
break;
//
case '3':
radius=6371; // radius km
double pi=3.14159265;
double x1,y1,x2,y2;
// X og Y coords
x1=(x1/180)*pi;
y1=(y1/180)*pi;
x2=(x2/180)*pi;
y2=(y2/180)*pi;
// if else
if (x1==x2 && y1==y2)
return 0;
else
{
if ((sin(x2)*sin(x1)+cos(x2)*cos(x1)*cos(y2-y1))>1)
return radius*acos(1.0);
else
return radius*acos(sin(x2)*sin(x1)+cos(x2)*cos(x1)*cos(y2-y1));//
double x1,y1,x2,y2;
cout<<"Write the coords you like to calculate distance from: \n";
cin>>x1>>y1;
cin>>x2>>y2;
cout<<"distance in km : \n";
cout<<getdistance(x1,y1,x2,y2)<<endl;
return 0;
}
break;case '4':
cout<<"working \n";
break;//
case '5':
exit = 0;
break;
default:
exit = 0;
cout << "ERROR!";
} // Switch quit
} // While quit
return 0;
}
Это программа, которая работает, но я должен поместить ее в кейс 3 в программе выше.
# include <iostream>
# include <cstdio>
# include <cmath>
using namespace std;
double getdistance(double x1,double y1,double x2,double y2)
{
double radius;
radius=6371; // radius km
double pi=3.14159265;
// X og Y coord
x1=(x1/180)*pi;
y1=(y1/180)*pi;
x2=(x2/180)*pi;
y2=(y2/180)*pi;if (x1==x2 && y1==y2)
return 0;
else
{
if ((sin(x2)*sin(x1)+cos(x2)*cos(x1)*cos(y2-y1))>1)
return radius*acos(1.0);
else
return radius*acos(sin(x2)*sin(x1)+cos(x2)*cos(x1)*cos(y2-y1));
}
}
int main()
{
double x1,y1,x2,y2;
cout<<"Write the coords you like to calculate distance from: \n";
cin>>x1>>y1;
cin>>x2>>y2;
cout<<"distance in km : \n";
cout<<getdistance(x1,y1,x2,y2)<<endl;
return 0;
}
Программа, как она кажется, хорошо. Что касается операторов switch, они работают только с целыми числами или односимвольными значениями. switch
не сравнивает строки или числа с плавающей точкой. Возможно, размещение полного кода вашей альтернативы поможет выявить проблему.
РЕДАКТИРОВАТЬ
int main ()
double getdistance(double x1,double y1,double x2,double y2)
{
Это не верно. Когда вы объявляете функции, вы должны объявлять их до main
и определить их до или после main
хотя условно вы бы их определили после.
то есть
//#include directives
double getdistance(double x1,double y1,double x2,double y2);
int main() {
// code for main()
}
double getdistance(double x1,double y1,double x2,double y2) {
//code for your function
}
Других решений пока нет …