Komplexe Zahlen Division



  • Entferne

    System.Console.ReadKey();
    

    oder ersetze es durch

    System.Console.Read(); // bzw. ReadLine();
    

    (steht ja auch so in der Fehlermeldung!)



  • Tausend Dank bis hierhin.

    Ich möchte nun jetzt noch den Fall abfangen, wenn man die komplexen Zahlen die im Nenner stehen = 0 sind.

    Complex c1 = new Complex(2.3, 3.7);
                Complex c2 = new Complex(1.4, 2.3);
    
                Complex c3 = c1 / c2;
    
                if (c2 == 0)
                {
                    System.Console.WriteLine("geht nicht");
    
                }
    
                else
                {
                    System.Console.WriteLine("Die erste komplexe Zahl: " + c1);
                    System.Console.WriteLine("Die zweite komplexe Zahl: " + c2);
                    System.Console.WriteLine("Die Division der beiden komplexen Zahlen: " + c3);
    
                    System.Console.ReadLine();
    

    So etwas habe ich versucht, das geht leider nicht. Ich weiß, dass c2==0 so ohne weiteres nicht geht, weil eine Konvertierung von einer Dezimalzahl und einer komplexen Zahl und anders rum nicht so einfach möglich ist.
    Wie ist das möglich, dass ich den o.g. Fall abfange?



  • Schlüssel können nicht gelesen werden, wenn keine der Anwendungen eine Konsole besitzt, oder wenn die Konsoleneingabe aus einer Datei umgeleitet wurde.

    Werden die Fehlermeldungen bei MS von dressierten Affen übersetzt?



  • Gelo2802 schrieb:

    Ich weiß, dass c2==0 so ohne weiteres nicht geht, weil eine Konvertierung von einer Dezimalzahl und einer komplexen Zahl und anders rum nicht so einfach möglich ist.
    Wie ist das möglich, dass ich den o.g. Fall abfange?

    Überlade den == Operator und lass Vergleiche mit int zu.



  • Hallo Gelo2802,

    du mußt selbstverständlich zuerst auf 0 abfragen und nur im anderen Fall darfst du die Division durchführen. Am besten direkt im Operator / durchführen und dort dann überprüfen, ob der Divisorausdruck "(c*c+d*d)" Null ergibt (bevor du die Division durchführst).



  • Danke für den Tipp!

    Ich habe es nochmal an einer der Stelle vor der Division probiert:

    public static Complex operator /(Complex A, Complex B)
            {
                double a = A.real;
                double b = A.imaginär;
                double c = B.real;
                double d = B.imaginär;
                double r;
                double i;
    
                //double r = (a * c + b * d) / (c * c + d * d);
                //double i = (b * c - a * d) / (c * c + d * d);
    
                double r1 = (a * c + b * d);
                double r2 = (c * c + d * d);
                double i1 = (b * c - a * d);
    
                if (r2 == 0)
                {
                    System.Console.WriteLine("geht nicht");
    
                }
    
                else
                {
                    r = r1 / r2;
                    i = i1 / r2;
    
                    return new Complex(r, i);
                }
    
            }
    

    Fehlermeldung: Nicht alle Codepfade geben einen Wert zurück.

    Ich vermute, weil ich in der for-Schleife keinen Rückgabewert liefere. Doch was soll ich da liefern?



  • Welche for-Schleife? Du hast im else-Zweig ein return, aber nicht im if-Zweig... Normalerweise würde ich da eine Exception erwarten.



  • Ach sorry, habe mich verschrieben, meine natürlich den if-Zweig, wo ich kein Return habe.



  • Ja, das ist böse. Du musst etwas zurückgeben... oder eine Exception werfen, ansonsten kommt eh eine Exception bzw. undefiniertes Verhalten.



  • So, es funktioniert. Ich habe es mit einem Exception gelöst. Sind Imagninär - und Realteil == 0, dann wird eine Exception geworfen.

    Vielen lieben Dank an alle.


Anmelden zum Antworten