0

私は、地球の表面上の 2 つの地理的ポイント間の距離を計算するプログラムを使用しています。私は 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;
}
4

1 に答える 1

2

このままのプログラムは問題ないようです。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
}
于 2013-02-05T20:04:18.497 に答える