Nichtgesetzte Variablen kennzeichnen



  • Hi,
    ich habe ein Programmierproblem auf das ich jetzt schon öfter gestossen bin.

    Mein Programm sieht etwa so aus:

    double x1,x2;
    functionxy(double a, &x1, &x2)
    {
    if(a > 0)
    {
    x1 = a;
    x2 = a;
    }
    else
    {
    x1 = a;
    }
    }
    

    Es kann also sein, dass es nur eine Lösung gibt. x2 wird also nicht benötigt. Ich würde nur gern wissen, ob x1 UND x2 gesetzt sind oder ob nur eine Variable einen Wert besitzt. Unter php gibt es die nette Funktion isset(). Diese prüft genau das ab. Unter C++ könnte ich x2 natürlich einen DummyWert geben und schauen ob dieser gesetzt ist. Nur was wenn ich keinen Wert ausschliessen kann? Soll ich dann auf gut Glück irgendein seltsamen Wert nehmen?

    Wie macht ihr das? Oder programmiert ihr sowas ganz anders?

    Mfg Mo3bius



  • Mo3bius schrieb:

    double x1,x2;
    functionxy(double a, &x1, &x2)
    
    functionxy(double a, double &x1, bool &x1set, double &x2, bool &x2set)
    


  • int test = x2;
    
    // ...
    
    if (test != x2)
    {
         // wert wurde geändert
    }
    

    Gruß



  • Wie wäre es mit einem Rückgabewert der Funktion?

    bool functionxy(double a, &x1, &x2)
    {
    if(a > 0)
    {
    x1 = a;
    x2 = a;
    
    return true;
    }
    else
    {
    x1 = a;
    
    return false;
    }
    }
    

  • Mod

    Mo3bius schrieb:

    Oder programmiert ihr sowas ganz anders?

    Dies. Sag mal, was das Programm überhaupt machen soll.



  • Auch nicht wahnsinnig schön aber ganz einfach z.B.:

    double x1,x2;
    int functionxy(double a, &x1, &x2)
    {
    if(a > 0)
    {
      x1 = a;
      x2 = a;
      return 2;
    }
    else if (a < 0)
    {
      x1 = a;
      return 1;
    }
    else
      return 0;
    }
    

    Wahrscheinlich würde man es in einer konkreten Anwendung noch anders machen, kannst ja mal deinen konkreten Fall erzählen.



  • Huch das ging aber schnell mit den Antworten. 😉

    SeppJ schrieb:

    Mo3bius schrieb:

    Oder programmiert ihr sowas ganz anders?

    Dies. Sag mal, was das Programm überhaupt machen soll.

    Ich schreibe ein Programm das allgemeine kubische Gleichungen löst. Dabei kann es 0,1,2 oder 3 reelle Lösungen geben.

    Bis jetzt habe ich das etwa so gemacht:

    //a*x**3 + b*x**2 + c*x + d = 0
    bool solvecubicequation(double a,double b,double c,double d,double &x1,double &x2, double &x3)
    {
    ...
    }
    

    Ich muss sagen die Lösung von BrotBernd gefällt mir noch am besten. Da müsste ich den Rückgabewert von bool nur nach int ändern und jeweils das rihtig returnen.

    Mfg Mo3bius



  • Boost hat eine Klasse boost::optional, die du dir womöglich mal genauer ansehen willst.


  • Mod

    Wie wäre es, du gibst eine Liste der Lösungen zurück?


Anmelden zum Antworten