Komplexe Zahlen Eingeben/Berechnen/Auslesen



  • Hallo,

    schreib gerade an einem Taschenrechner für komplexe Zahlen.
    Hier ist es:

    int main()
    {
    complex<double> a(4,5), b(3,2), x,;
    float c=180/3.14;
    
    //scanf(" %f ", &a);  // ????????
    
    cout << "a = " << a << " b = " << b << endl;
    cout << "real b = " << real(b) << " imag b = " << imag(b) << endl;
    x=(a*b);
    cout << " a*b= " << x << " a/(b+a) = " << a/(b+a) << endl;
    printf("\nPolarform      : %6.3f %c %6.3f%c", (abs(x)),284,(arg(x)*c),248);
    printf("\n\nKomponentenform: %6.3f + j%6.3f", real(x),imag(x) );
    
    getch();
    return 0;
    }
    

    ...naja... bin noch nicht sonderlich weit...

    Möchte gern zwei komplexe Zahlen mit miteinander +-/*, die bei der Eingabe plus den Operator auslesen und berechnen.

    Wie muss man denn die Zahlen eingeben( hätte es so versucht : mit variable einsetzen, 2,3 , 2 5, ...).

    Kann über dieses Thema einfach nichts finden. Und würde das überhaupt funktionieren, die Zahlen aus dem String auszulesen ohne größeren aufwand?

    dann gibs da ja noch diese template klassen, für was brauch ich die denn ?
    und wie würde man denn werte in polarform eingeben?

    Grüße
    Martin



  • gut



  • Schau mal hier.

    Die Streamoperatoren sind bereits überladen, wenn du ein anderes Format willst, empfehle ich std::stringstream .



  • danke für deine antwort,
    leider ist mir das schon mehr oder weniger bekannt

    ich denk mir halt dass hinter diesem eingabeproblem eine ganz simple lösung steckt und ich einfach zu blöd bin sie zu finden.

    wenn ich jetzt zb das so mache :

    scanf(" %f ", &real(a));
    

    sagt der compiler dass das eine ungültige verwendung des & ist...

    kann mir bitte wer weiterhelfen!!!?!?

    grüße martin



  • Aho schrieb:

    wenn ich jetzt zb das so mache :

    scanf(" %f ", &real(a));
    

    sagt der compiler dass das eine ungültige verwendung des & ist...

    Mach das besser nicht. Verwende kein scanf() in C++, dafür gibt es std::cin . Zudem müsstest du dazu einen LValue haben. Hättest du www.cplusplus.com angeschaut, wüsstest du auch, was die Funktion std::real() macht.

    Aho schrieb:

    kann mir bitte wer weiterhelfen!!!?!?

    Gerne. Aber dazu müsstest du vielleicht etwas genauer sagen, was du genau machen willst, und nicht welche Ansätze du dafür vorschlägst. Was soll eingegeben werden? 4 + 3i ? (4,3) ? Reichen die bereits vorhandenen Streamoperatoren nicht? Kennst du std::stringstream ?

    Ein Fragezeichen reicht im Weiteren, das wirkt seriöser.



  • Aho schrieb:

    ich denk mir halt dass hinter diesem eingabeproblem eine ganz simple lösung steckt und ich einfach zu blöd bin sie zu finden.

    Hallo Martin,

    wenn man's weis, ist es einfach - also:

    std::complex< double > c;
        if( cin >> c )
        {
            std::cout << "Gelesen: " << c << std::endl;
        }
    

    das erfordert ein #include <iostream> und ein #include <complex>.

    Das Format für eine komplex Zahl ist (realteil,imaginärteil) - zum Beispiel: (1.2,0.5)
    Eine einfache Zahl ohne Klammern wird als Realteil interpretiert und der Imaginärteil wird zu 0 gesetzt.

    Probier's einfach mal aus.

    Zum Thema Taschenrechner hilft Dir vielleicht dieser Ausdruck-Parser weiter.

    Gruß
    Werner


Anmelden zum Antworten