Problem beim Rechnen (manuell berechnetes Ergebnis != Programmausgabe)



  • Du solltest zunächst mal dein Programm in einzelne Module aufteilen. Ist doch kein Wunder, dass du bei dem großen Klumpen an Quellcode nicht mehr durch siehst. Zum Beispiel könntest du ein Eingabemodul bauen, welches getrennt von dem Berechnungsmodul funktioniert. Auf die Art könntest du mit konstanten Werten z.B. das Berechnungsmodul testen ohne dass du bei jedem Test ständig 10.000 Zahlen und Codes eingeben musst. In dem Fall würdest du deinem Fehler auch effizienter auf die Spur kommen.

    So in dem Zustand wie das Programm gerade ist, bist du der einzige der da sinnvoll auf Fehlersuche gehen kann.



    1. Funktionen! Dein "main" hat mehr als 1300 Zeilen (nach clang-format Umformatierung). Versuche, KLEINE Funktionen zu schreiben.
    2. Wie viele Stellen musst du ändern, wenn du ein neues Flugzeug unterstützen willst? Extrem vielen! Mach dir doch ein struct und sammle darin die Daten:
    struct Plane {
      std::string name;
      double fuel_consumption;
      double max_fuel;
      double empty_weight;
      ... // weitere flugzeugspezifische Werte
    };
    

    Dann wählst du nur einmal das passende Flugzeugobjekt aus und musst nicht in jedem einzelnen Befehl eine if-Kaskade einbauen.

    Und zuletzt: schalte in deinem Compiler Warnungen ein!!
    Du solltest sowas bekommen wie:

    forum.cpp:407:47: warning: '&&' within '||' [-Wlogical-op-parentheses]
                if (topoints == 0 || topoints > 0 && topoints <= 3) // 5er
                                  ~~ ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
    forum.cpp:407:47: note: place parentheses around the '&&' expression to silence this warning
                if (topoints == 0 || topoints > 0 && topoints <= 3) // 5er
                                                  ^
                                     (                            )
    forum.cpp:709:32: warning: format specifies type 'char *' but the argument has type 'char (*)[i]' [-Wformat]
                scanf("%254[^\n]", &path);
                       ~~~~~~~     ^~~~~
    forum.cpp:716:42: warning: array subscript is of type 'char' [-Wchar-subscripts]
                    cout << " Path: " << path[i]
                                             ^~
    forum.cpp:921:21: warning: expression result unused [-Wunused-value]
                        " Calculating";
                        ^~~~~~~~~~~~~~
    forum.cpp:994:21: warning: expression result unused [-Wunused-value]
                        " Calculating";
                        ^~~~~~~~~~~~~~
    forum.cpp:1067:21: warning: expression result unused [-Wunused-value]
                        " Calculating";
                        ^~~~~~~~~~~~~~
    forum.cpp:1167:20: warning: unused variable 'reftakeoffspeedlj45' [-Wunused-variable]
                double reftakeoffspeedlj45 = 175.0;     // knots
                       ^
    forum.cpp:703:19: warning: unused variable 'out' [-Wunused-variable]
                FILE *out;
                      ^
    forum.cpp:704:22: warning: implicit conversion from 'int' to 'char' changes value from 255 to -1 [-Wconstant-conversion]
                char i = 255;
                     ~   ^~~
    forum.cpp:1189:67: warning: variable 'cruisefuelgtog' is uninitialized when used here [-Wuninitialized]
                    takeoffweight = emptyweightb738 + toweightbasic + cruisefuelgtog;
                                                                      ^~~~~~~~~~~~~~
    forum.cpp:854:34: note: initialize the variable 'cruisefuelgtog' to silence this warning
                double cruisefuelgtog;
                                     ^
                                      = 0.0
    

    (Die Zeilennummern werden bei dir nur ungefähr passen. Ich musste die Windows-spezifischen Dinge entfernen und habe das Programm zuvor it clang-format formatiert)

    Solange du so Dinge drin hast wie falsches scanf-Format und die Benutzung von uninitialisierten Variablen, musst du auf jeden Fall nachbessern. Aber wichtigste Bemerkung: teile dein Programm in Funktionen auf! Berechnung der Dinge sollte unbedingt separat von der Eingabe sein!



  • Hallo, vielen Dank für die vielen und schnellen Antworten ubd konstruktiven Tipps! Ich werde eure Ratschläge befolgen und mich wieder melden sollte es dann immer noch nicht funktionieren. Lg



  • @venezianer27 sagte in Problem beim Rechnen (manuell berechnetes Ergebnis != Programmausgabe):

    während das Programm ausgibt: 1.03069e+265

    Das kann passieren, wenn durch eine sehr kleine Zahl geteilt wird.

    Möglicherweise Problem mit einer Intergerdivision

    Das hast du wohl schon selber entdeckt

    da ließ es sich aber durch das richtige Definieren mit xx.00

    Wenn nur Integertypen an einer Rechnung beteiligt sind, dann rechnet C++ mindestens in int.
    Dabei wird der Ausdruck schrittweise zerlegt und jeder Teilausruck für sich betrachtet.
    Der Typ links vom = spielt dabei überhaupt keine Rolle.



  • du kannst einen Debugger benutzen oder auch mal Zwischenergebnisse ausdrucken.

    Welche andere Programmiersprache du auch vorher gelernt hast, schließe von deren Verhalten nicht auf das Verhalten von C++.
    Mach diech vorher schlau, ob das so ist.



  • Hallo auch dir Dirk danke für die Tipps!

    Ich bin jetzt gerade dabei mein Programm zu überarbeiten und stoße dabei auf ein anderes Problem. Ich habe u.a. Strukturen für die einzelnen Airports angelegt und schaffe es jetzt nicht die double elemente dieser Strukturen an die Berechnungsfunktion zu übergeben.

    Mein Ansatz war: distance=DistanceCalculator(DepAirport.Lon,...)

    Im Kopf der Funktion mit entsprechender deklaration. Die Strukturen sind global angelegt.

    Ich habs auch schon mit Zeigern probiert bzw anderen Operanden statt Punkt. Wie kann ich mit den gewünschten Elementen der struktur rechnen?

    struct sAirport
        {
            string nameofap;
            string ICAO;
            double Lat;
            double Lon;
        };
    
    sAirport DepAirport;
    sAirport DestAirport;
    
    // Distance Calculation
    double DistanceCalculator(double DepAirport.Lat, double DepAirport.Lon, double DestAirport.Lat, double DestAirport.Lon)
    {
        long double pi = 3.141592653589793238462643383279502884;
        long double DepLatArc = ((2*pi)/360)*DepAirport.Lat;
        long double DepLonArc = ((2*pi)/360)*DepAirport.Lon;
        long double DestLatArc = ((2*pi)/360)*DestAirport.Lat;
        long double DestLonArc = ((2*pi)/360)*DestAirport.Lon;
        double distanceDepDestKM = 6378.388 * acos(sin(DepLatArc) * sin(DestLatArc) + cos(DepLatArc) * cos(DestLatArc) * cos(DestLonArc - DepLonArc));
        cout << "The distance between " << DepAirport.nameofap << " and " << DestAirport.nameofap << " is " << distanceDepDestKM << " km!\n";
        cout << "Converting to nautical miles";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        double distanceDepDestNM = distanceDepDestKM*0.539957;
        cout << "Distance in nautical miles: " << distanceDepDestNM << " nm\n";
        return distanceDepDestNM;
    }
    ...
    cout << "Calculating distance";
        for(int i=1; i<=5; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        double distanceDepDestNM=DistanceCalculator(DepAirport.Lon,DepAirport.Lat, DestAirport.Lat, DestAirport.Lon);
    


  • schaffe es jetzt nicht

    Das heißt?



  • @manni66 sagte in Problem beim Rechnen (manuell berechnetes Ergebnis != Programmausgabe):

    schaffe es jetzt nicht

    Das heißt?

    daß er es nicht schafft. duh.

    @venezianer27 Aber die Frage ist eigentlich berechtigt. https://www.youtube.com/watch?v=tD4q3leE5Uw



  • @Swordfish Ja ich weiß ist missverständlich formuliert. Ne mein Problem ist ganz einfach, dass mir die Ideen ausgehen, bzw ich vl auch einfach zu wenig Erfahrung habe, wie ich mit Elementen einer Struktur außer Ein- und Ausgabe weiter arbeiten kann. Ich suche und finde immer nur dieselben Ansätze, die bei mir nicht hinhauen wollen. Bräuchte irgendein Wort, das meinen Knoten löst 😉 Ich möchte die Entfernung anhand der Breiten- und Längengrade berechnen. Nur egal wie ich sie der Funktion übergebe, er nimmt sie so nicht an.

    Das sind die Meldungen meines Compilers. Ich muss zugeben, ich habe erst vor zwei Wochen wieder mit dem Lernen begonnnen. Davor doch einige Zeit nicht.

    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp|28|error: expected ',' or '...' before '.' token|
    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp||In function 'void planning()':|
    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp|172|error: too many arguments to function 'double DistanceCalculator(double)'|
    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp|28|note: declared here|
    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp|183|error: expected constructor, destructor, or type conversion before '(' token|
    C:\Users\Martin\Desktop\ProgrammingNewf210319\Ave\Modules\Planning.cpp|184|error: expected unqualified-id before '{' token|
    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Aktueller Quellcode:

    #include <iostream>
    #include <ctime>
    #include <windows.h>
    #include <MMSystem.h>
    #include <cstring>
    #include <fstream>
    #include <cmath>
    
    using namespace std;
    
    ifstream infile;
    ofstream outfile;
    string pilotname;
    string saving;
    
    struct sAirport
        {
            string nameofap;
            string ICAO;
            double Lat;
            double Lon;
        };
    sAirport DepAirport;
    sAirport DestAirport;
    
    // Distance Calculation prototype
    
    double DistanceCalculator(double DepAirport.Lat, double DepAirport.Lon, double DestAirport.Lat, double DestAirport.Lon);
    
    extern void planning()
    {
        // Music
        PlaySound(TEXT("Music//Planungstool.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
        // Pilot name (is declared and used in main.cpp und müsste an die Funktion bei Aufruf übergeben werden, wodurch es aber keine void Funktion mehr wäre?
        string pilotname2;
        cout << "Please tell me your name again: "; getline(cin, pilotname2);
        // Definition Departure, Destination
        cout << "To start, please provide the name of your departure airport: "; getline(cin, DepAirport.nameofap);
        cout << "Loading list where to find ICAO Codes! Please search and take a note of the airport you need! Thanks!\n";
        cout << "To search for the name use CTRL+F and type the name!\n";
        for(int i=1; i<=2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        ShellExecute(NULL, "open", "FilesForReading\\ICAO.txt", NULL, NULL, SW_SHOW);
        cout << "ICAO of Departure airport: "; getline(cin, DepAirport.ICAO);
        cout << "Saving";
        for(int i=1; i<=2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
    
        outfile.open("FilesForOutputs\\Flightplan.txt", ios::out | ios::app);
        outfile << "Flight Plan for: " << pilotname2 << endl << endl;
        outfile << "Departure Airport (Name): " << DepAirport.nameofap << endl
                << "Departure Airport (ICAO): " << DepAirport.ICAO << endl;
        outfile.close();
        cout << "Data saved successfully!\n";
        // GATE
        string gate;
        cout << "Please define the gate manually! Your selection: "; getline(cin, gate);
        cout << "Saving...\n"; Sleep(500);
        outfile.open("FilesForOutputs\\Flightplan.txt", ios::out | ios::app);
        outfile << "Gate: " << gate << endl;
        outfile.close();
        // Local Time
        int loctime;
        cout << "Retrieving local time";
        for(int i=1; i<=2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        cout << "Please tell me the local time of your departure airport from the website being opened!\n";
        Sleep(1500);
        ShellExecute(NULL, "open", "https://www.timeanddate.com/worldclock///", NULL, NULL, SW_SHOW);
        cout << "Local time: "; cin >> loctime; cin.ignore();
        cout << "Saving data";
        for(int i=1; i<=2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        outfile.open("FilesForOutputs\\Flightplan.txt", ios::out | ios::app);
        outfile << "Local Time: " << loctime << endl;
        outfile.close();
        cout << "Data saved successfully!\n"; Sleep(1000);
        // Destination airport
        cout << "Where do you wanna go?\n" << "Name of Destination: ";
        Sleep(1500);
        getline(cin, DestAirport.nameofap);
        cout << "Loading list where to find ICAO Codes! Please search and take a note of the airport you need! Thanks!\n";
        cout << "To search for the name use CTRL+F and type the name!\n";
        for(int i=1; i<=2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        ShellExecute(NULL, "open", "FilesForReading\\ICAO.txt", NULL, NULL, SW_SHOW);
        cout << "Please tell me the ICAO: "; getline(cin, DestAirport.ICAO);
        cout << "Saving";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        outfile.open("FilesForOutputs\\Flightplan.txt", ios::out | ios::app);
        outfile << "Destination airport (Name): " << DestAirport.nameofap << endl
                << "Destination airport (ICAO): " << DestAirport.ICAO << endl;
        outfile.close();
        cout << "Data saved successfully!\n";
        // Aircraft
        string aircraft;
        cout << "Please choose your aircraft for this flight from the list being opened!\n";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        cout << "Aircraft (ICAO): "; Sleep(2000);
        ShellExecute(NULL, "open", "FilesForReading\\Aircrafts.txt", NULL, NULL, SW_SHOW);
        getline(cin, aircraft);
        cout << "Saving";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        outfile.open("FilesForOutputs\\Flightplan.txt", ios::out | ios::app);
        outfile << "Aircraft: " << aircraft << endl;
        outfile.close();
        cout << "Data saved successfully!\n";
        // Airline and Flightnumber
        string airline;
        string flightnumber;
        string airlineICAO;
        cout << "Airline: "; getline(cin, airline);
        cout << "Flightnumber (google flights): "; getline(cin, flightnumber);
        cout << "ICAO Code of Airline (Link will be opened): "; Sleep(1500);
        ShellExecute(NULL, "open", "http://www.flugzeuginfo.net/table_airlinecodes_airline_dt.php", NULL, NULL, SW_SHOW);
        getline(cin, airlineICAO);
        cout << "Saving";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        outfile.open("Flightplan.txt", ios::out | ios::app);
        outfile << "Airline: " << airline << " " << flightnumber << "(" << airlineICAO << ")" << endl;
        outfile.close();
        cout << "Data saved successfully!\n";
        // Distance
        // Collecting necessary data
        cout << "Please provide the geographical data of your departure airport (Link will be opened)!\n"
             << "(Decimal degrees Latitude): "; Sleep(1500);
        ShellExecute(NULL, "open", "https://developers.google.com/maps/documentation/geocoding/intro#GeocodingRequests", NULL, NULL, SW_SHOW);
        cin >> DepAirport.Lat;
        cout << "Longitude: "; cin >> DepAirport.Lon;
        cout << "Now the same for your destination! Latitude: "; Sleep(1500);
        ShellExecute(NULL, "open", "https://developers.google.com/maps/documentation/geocoding/intro#GeocodingRequests", NULL, NULL, SW_SHOW);
        cin >> DestAirport.Lat;
        cout << "Longitude: "; cin >> DepAirport.Lon;
        // Calculation of distance
        cout << "Calculating distance";
        for(int i=1; i<=5; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        double distanceDepDestNM=DistanceCalculator(DepAirport.Lat, DepAirport.Lon, DestAirport.Lat, DestAirport.Lon);
        cout << "The distance between " << DepAirport.nameofap << " and " << DestAirport.nameofap << " is " << distanceDepDestNM << " nm!\n";
        cout << "Saving";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        outfile.open("Flightplan.txt", ios::out | ios::app);
    }
    
    DistanceCalculator(DepAirport.Lat, DepAirport.Lon, DestAirport.Lat, DestAirport.Lon);
    {
        long double pi = 3.141592653589793238462643383279502884;
        long double DepLatArc = ((2*pi)/360)*DepAirport.Lat;
        long double DepLonArc = ((2*pi)/360)*DepAirport.Lon;
        long double DestLatArc = ((2*pi)/360)*DestAirport.Lat;
        long double DestLonArc = ((2*pi)/360)*DestAirport.Lon;
        double distanceDepDestKM = 6378.388 * acos(sin(DepLatArc) * sin(DestLatArc) + cos(DepLatArc) * cos(DestLatArc) * cos(DestLonArc - DepLonArc));
        cout << "The distance between " << DepAirport.nameofap << " and " << DestAirport.nameofap << " is " << distanceDepDestKM << " km!\n";
        cout << "Converting to nautical miles";
        for(int i=1; i<= 2; ++i)
        {
            cout << "."; Sleep(1000);
        }
        cout << ".\n\n";
        double distanceDepDestNM = distanceDepDestKM*0.539957;
        cout << "Distance in nautical miles: " << distanceDepDestNM << " nm\n";
        return distanceDepDestNM;
    }
    ```cpp
    
    


  • Sag mal, hast du den Ausdruck Spaghetticode schonmal gehört?

    double DistanceCalculator(double DepAirport.Lat, double DepAirport.Lon, double DestAirport.Lat, double DestAirport.Lon)
    
    

    Name Du geben deine Variable in main() nix haben zu tun mit name von deine Parameter von Funktion DistanceCalculator().

    Du wollen

    double DistanceCalculator(sAirport DepAirport, sAirport DestAirport)
    


  • @Swordfish sagte in Problem beim Rechnen (manuell berechnetes Ergebnis != Programmausgabe):

    Du wollen
    double DistanceCalculator(sAirport DepAirport, sAirport DestAirport)

    Das sehe ich anders. Eine Funktion, den Abstand zwischen zwei Punkten auf der Erde zu berechnen, ist unabhängig von Flughäfen. Diese Funktion sollte also auch keine sAirport als Parameter haben.

    Im Allgemeinen ist es hilfreich, Funktionen mit Kleinbuchstaben benennen, Klassen mit Großbuchstaben / Hauptwörtern. Häufig nimmt man Verben als Namen. Es handelt sich hier nicht um einen Entfernungsrechner (das wäre ein Name für eine Klasse), sondern um eine Funktion "berechne Entfernung". Hier kann man auch noch spezifischer sein und diese Funktion z.B. "berechne Erdoberflächenentfernung" nennen. Das Verb "berechne" ist relativ bedeutungsarm und kann weggelassen werden. Ich würde sie letztendlich
    double earthSurfaceDistance(double lon1, double lat1, double lon2, double lat2);
    nennen (du kannst Parameter nicht "a.b" nennen, in den Namen darf kein Punkt vorkommen!). Wichtig noch: Aus eigener Erfahrung mit exakt dieser Funktion kann ich empfehlen, hier Typsicherheit einzubauen und eine Klasse Longitude und eine Latitude zu erstellen, damit man lon und lat nicht versehentlich vertauschen kann. (Man kann auch noch 1 lon/lat-Paar zu einem EarthSurfacePoint zusammenfassen - aber dann besteht weiter das Problem, wie man diesen korrekt initialisiert.) Und der Rückgabewert - tja, entweder boost::units verwenden oder irgendwie anders klar machen, in welcher Einheit der Wert zurückkommt - als "Billiglösung für Übungen" kommt dabei in Frage, die Einheit in den Funktionsnamen zu schreiben, also z.B. double earthSurfaceDistance_km(...).

    So eine Funktion kann man auch ohne Kenntnis von Flughäfen testen (daher würde ich NICHT zwei Airports als Parameter nehmen (wofür das "s" in "sAirport"? - ich würde es weglassen). - Oder höchstens als convenience-Funktion, die dann die von Airports unabhängige Funktion aufruft.

    @venezianer27: du vermischt hier schon wieder die Berechnung mt Ein- und Ausgabe! Stell dir mal vor, du willst die Entfernung von FRA zu jedem anderen Flughafen weltweit berechnen. Willst du dann wirklich jedes mal eine Sekunde schlafen?



  • Ok super danke @wob . Ich habe es jetzt so gemacht, wie du vorgeschlagen hast und auch die unnötige Vermischung von Berechnung und Ein / Ausgabe weg gelassen. Eine frage hätte ich aber noch: Du hast ja gemeint, dass es gut wäre eine Klasse Latitude und eine für die Longitude Werte zu benutzen! Die Klassen sehen bei mir jetzt so aus:

    class Latitude
    {
    public:
        // Members
        double DepLat;
        double DestLat;
        // Memberfunktion
        void showdata() // Funktion die mit diesen Werten sobald definiert arbeiten kann.
        {
            cout << "Latitude of Departure Airport: " << DepLat << endl;
            cout << "Latitude of Destination Airport: " << DestLat << endl;
        }
    };
    class Longitude
    {
    public:
        // Members
        double DepLon;
        double DestLon;
        // Memberfunktion
        void showdata()
        {
            cout << "Longitude of Departure Airport: " << DepLon << endl;
            cout << "Longitude of Destination Airport: " << DestLon << endl;
        }
    
    };
    

    Die Ausgabefunktionen sind jetzt nur mal da für Testzwecke, ich lerne gerade mit Klassen umzugehen. Und wie kann ich die Werte die der User definiert und ja nun in der Klasse deklariert sind für meine Funktion nutzen? Denn innerhalb einer Klasse können und dürfen ja keine Initialisierungen stattfinden, hab ich gelesen. Deshalb wäre es eher unvorteilhaft die Funktion der Berechnung in die Klasse als Memberfunktion einzuspeisen, mal abgesehen davon, dass ich dann nur die halben Werte habe weil es ja zwei Klassen sein sollen.



  • PS. bzw. wie kann ich die für die Funktion nötigen Werte aus der Klasse rausholen? Ich glaube ich versteh da noch einiges miss. Bitte verzeiht



  • @venezianer27 sagte in Problem beim Rechnen (manuell berechnetes Ergebnis != Programmausgabe):

    class Latitude
    {
    public:
    // Members
    double DepLat;
    double DestLat;

    Wir haben offenbar aneinander vorbei geredet.

    ich meinte sowas in der Art

    struct Latitude {
      explicit Latitude(double lat) : lat(lat) {} //wichtig: hier mit explicit arbeiten!
      double lat;
    };
    

    Also im Prinzip nur EIN double, der einen anderen Namen hat, damit man die nicht vertauschen kann.

    Damit zwingst du dich zu schreiben
    distance = earthDistance(Longitude(9.837), Latitude(53.536), Longitude(9.988), Latitude(53.630));

    sieht zwar komplizierter aus als earthDistance(9.837, 53.536, 9.988, 53.630);
    aber macht verwechslungen unwahrscheinlicher. Ich kann mir nie merken, in welcher Reihenfolge man Länge und Breite nimmt. Im ersten Fall kompiliert der Kram nicht, wenn ich den falschen Typ habe.

    Mach dein Programm erst einmal ohne solche "Kleinigkeiten" fertig.

    Die andere Variante ist:

    struct GeoCoordinates {
      double lat, lon;
    };
    
    double earthSurfaceDistance(GeoCoordinates a, GeoCoordinates b);
    

    Das ist wahrscheinlich noch besser.



  • Hi @wob dankeschön jetzt hab ich schon ein etwas klareres Bild. Das heißt im Klartext muss ich dann 4 Strukturen im gesamten anlegen, oder? also:

    struct Latitude {
      explicit Latitude(double lat) : lat(lat) {} //wichtig: hier mit explicit arbeiten!
      double lat;
    };
    

    für den Start und den Ziepunkt?

    LG


Anmelden zum Antworten