division durch 0



  • if((linie1.richtung.x == linie2.richtung.x) && (linie1.richtung.y == linie2.richtung.y) && (linie1.richtung.z == linie2.richtung.z))
                              { cout << " Die Geraden sind Parallel!" << endl; parallel=1;}
    
        if(linie1.richtung.x > linie2.richtung.x)
        {
            if((0 == linie1.richtung.x % linie2.richtung.x)  &&  (0 == linie1.richtung.y % linie2.richtung.y) &&  (0 == linie1.richtung.z % linie2.richtung.z)) 
            {cout << "Die Geraden sind Parallel!" << endl; parallel=1;}                  
        }
    
        if(linie1.richtung.x < linie2.richtung.x)
        {
            if((0 == linie2.richtung.x % linie1.richtung.x) && (0 == linie2.richtung.y % linie1.richtung.y) && (0 == linie2.richtung.z % linie1.richtung.z)) 
            {cout << "Die Geraden sind Parallel!" << endl; parallel=1;}                  
        }
    

    Hallo alle,
    Ich hab eine Frage. Wenn ich modulo von 0 mache dann kommt ein Fehler. Wie kann ich das am besten umgehen. Ich hab hier schon reichlich rumprobiert und bin nicht wirklich auf eine Zufriedenstellende Lösung gekommen.
    Freue mich um jede Hilfe, MfG Simon



  • Rechen mit den Determinanten, dann hast du das Problem nicht 🙂



  • Tjo ich würds mal versuchen einfach auf Null zu prüfen 🙄 Es wird afaik auch eine Exception geworfen, aber ich weiß nicht genau ob das der Standard vorschreibt.

    Gruß



  • naja, mach doch ne if-Abfrage, ob der Wert null ist. Was erwartest du also für eine Lösung? Wir können die die Gesetze der Mathematik auch nicht aushebeln. 😉



  • Wenn ich das mit einer if anweisung mache dann wird das sehr unübersichtlich. Es geht hier um Analytische Geometrie, wobei ich nur die Richtungskompontenten anschaue. Es handelt sich weiter um 2 gerade dessen schnittpunkt oder auch nicht ich suche.Wenn der eine Wert ein vielfaches des anderen ist dann wird mir hier gesagt das es parallel ist.
    z.b.
    1 2
    2 = 4
    3 6
    aber sobald dort eine null erscheint kommen die Fehlermeldungen. Wobei es ja keine direkt division durch null ist sondern viel mehr ein prüfen auf teilbarkeit.
    z.b.
    0 0
    3 = 9
    2 = 6

    Determinanten höre ich gerade zum ersten mal, kannst du mir bitte sagen was das ist und wo ich es finde.
    Wenn der Code nicht ausreicht dann poste ich gerne noch mehr aber das Problem drüfte 100% hier liegen und ich such eine elegante Lösung.
    MfG Simon



  • Versuch's mal mit try und catch

    int i = 0 ;

    try
    {
    i = 5 / 0 ;
    }
    catch(...)
    {
    // Hier evtl. Berechnung anders machen.
    }



  • hier ist nochmal der ganze code

    //Programm zum berechnen von 2 Geraden in Raum
    #include <iostream>
    //#include <stdio.h>
    using namespace std;
    
    //position ist ein vector
    struct position
    {
           int x;
           int y;
           int z;
    };
    
    struct gerade
    {
           position pnull;
           position richtung;       
    };
    
    int main()
    { 
        bool parallel = 0;
        bool kor = 0;
        float k; // parameter
        gerade linie1;
        gerade linie2;
        position pospnull,posricht,ergebnis1,ergebnis2;
        float posi1,posi2;
    
        while(kor != 1)
        {
        //1 gerade p0
        cout << "Bitte geben sie die P0 von der ersten Geraden an! (x)" << endl;
        cin >> linie1.pnull.x;
    
        cout << "Bitte geben sie die P0 von der ersten Geraden an! (y)" << endl;
        cin >> linie1.pnull.y;
    
        cout << "Bitte geben sie die P0 von der ersten Geraden an! (z)" << endl;
        cin >> linie1.pnull.z;
    
        //1 gerade richtung
    
        cout << "Bitte geben sie die Richtung von der ersten Geraden an! (x)" << endl;
        cin >> linie1.richtung.x;
    
        cout << "Bitte geben sie die Richtung von der ersten Geraden an! (y)" << endl;
        cin >> linie1.richtung.y;
    
        cout << "Bitte geben sie die Richtung von der ersten Geraden an! (z)" << endl;
        cin >> linie1.richtung.z;
    
        //2 gerade p0
        cout << "Bitte geben sie die P0 von der zweiten Geraden an! (x)" << endl;
        cin >> linie2.pnull.x;
    
        cout << "Bitte geben sie die P0 von der zweiten Geraden an! (y)" << endl;
        cin >> linie2.pnull.y;
    
        cout << "Bitte geben sie die P0 von der zweiten Geraden an! (z)" << endl;
        cin >> linie2.pnull.z;
    
        //2 gerade richtung
    
        cout << "Bitte geben sie die Richtung von der zweiten Geraden an! (x)" << endl;
        cin >> linie2.richtung.x;
    
        cout << "Bitte geben sie die Richtung von der zweiten Geraden an! (y)" << endl;
        cin >> linie2.richtung.y;
    
        cout << "Bitte geben sie die Richtung von der zweiten Geraden an! (z)" << endl;
        cin >> linie2.richtung.z;
    
        //Vorführen der Werte
        cout << "Ist dies richtig?" << endl << endl;
        cout << "   " << linie1.pnull.x << "     " << linie1.richtung.x << endl;
        cout << "xs=" << linie1.pnull.y << " + k " << linie1.richtung.y << endl;
        cout << "   " << linie1.pnull.z << "     " << linie1.richtung.z << endl;
        cout << "   " << linie2.pnull.x << "     " << linie2.richtung.x << endl;
        cout << "  =" << linie2.pnull.y << " + k " << linie2.richtung.y << endl;
        cout << "   " << linie2.pnull.z << "     " << linie2.richtung.z << endl << endl;
        cout << "(1) Richtig , (0) Falsch - korrektur n\x94tig" <<endl;
        cin >> kor;
    
        if(kor != 0 && kor != 1)
        {kor = 1;}
    }
        // Prüfen ob parallel 
        if((linie1.richtung.x == linie2.richtung.x) && (linie1.richtung.y == linie2.richtung.y) && (linie1.richtung.z == linie2.richtung.z))
                              { cout << " Die Geraden sind Parallel!" << endl; parallel=1;}
    
        if((linie1.richtung.x > linie2.richtung.x) && (linie1.richtung.y > linie2.richtung.y) && (linie1.richtung.z > linie2.richtung.z))
        {
            if((0 == linie1.richtung.x % linie2.richtung.x)  &&  (0 == linie1.richtung.y % linie2.richtung.y) &&  (0 == linie1.richtung.z % linie2.richtung.z)) 
            {cout << "Die Geraden sind Parallel!" << endl; parallel=1;}                  
        }
    
        if((linie1.richtung.x < linie2.richtung.x) && (linie1.richtung.y < linie2.richtung.y) && (linie1.richtung.z < linie2.richtung.z))
        {
            if((0 == linie2.richtung.x % linie1.richtung.x) && (0 == linie2.richtung.y % linie1.richtung.y) && (0 == linie2.richtung.z % linie1.richtung.z)) 
            {cout << "Die Geraden sind Parallel!" << endl; parallel=1;}                  
        }
    
        // Aussrechnen der Schnittpunktes
        pospnull.x = linie1.pnull.x - linie2.pnull.x;
        pospnull.y = linie1.pnull.y - linie2.pnull.y;
        pospnull.z = linie1.pnull.z - linie2.pnull.z;
    
        posricht.x = linie2.richtung.x - linie1.richtung.x;
        posricht.y = linie2.richtung.y - linie1.richtung.y;
        posricht.z = linie2.richtung.z - linie1.richtung.z;
    
        posi1 = pospnull.x + pospnull.y + pospnull.z;
        posi2 = posricht.x + posricht.y + posricht.z;
    
        k = posi1 / posi2;
    
        ergebnis1.x = k * linie1.richtung.x + linie1.pnull.x;
        ergebnis1.y = k * linie1.richtung.y + linie1.pnull.y;
        ergebnis1.z = k * linie1.richtung.z + linie1.pnull.z;
    
        ergebnis2.x = k * linie2.richtung.x + linie2.pnull.x;
        ergebnis2.y = k * linie2.richtung.y + linie2.pnull.y;
        ergebnis2.z = k * linie2.richtung.z + linie2.pnull.z;
    
        if(ergebnis1.x == ergebnis2.x && ergebnis1.y == ergebnis2.y && ergebnis1.z == ergebnis2.z)
        {
             cout << "Der Schnittpunkt lautet:" << endl;
             cout << ergebnis1.x << endl;
             cout << ergebnis1.y << endl;
             cout << ergebnis1.z << endl;               
        }
        else
        {
            cout << "Es gibt keinen Schnittpunkt" << endl;
        }
    
        getchar();
        getchar();
    
        return(0);
    
    }
    

    Das Programm hat mehrere Macken. Nur ich hab es jetzt schon 3 oder 4 mal durchgeschaut und nichts gefunden. Wieder mal wäre ich sehr dankbar über Hilfe.
    MfG Simon



  • Verpass z.B. dem struct/ der Klasse Position mal Operatoren für -, + und ==, das macht das ganze schon mal wesentlich übersichtlicher.

    MfG Kimmi



  • Simon1 schrieb:

    Determinanten höre ich gerade zum ersten mal, kannst du mir bitte sagen was das ist und wo ich es finde.
    Wenn der Code nicht ausreicht dann poste ich gerne noch mehr aber das Problem drüfte 100% hier liegen und ich such eine elegante Lösung.
    MfG Simon

    hier


Anmelden zum Antworten