struct komplexe Zahlen Operation

  • Hallo Leute, guten Tag euch allen!

    Ich bin dabei eine struct für komplexe Zahlen zu schreiben.
    Dann soll das Programm zwei komplexe Zahlen addieren, subtrahieren, multiplizieren und dividieren können.

    Die struct habe ich nach langer Mühe zusammengebastelt und hoffe dass sie nicht ganz falsch ist.

    Das ist zunächst nur für die Addition.

    Ich bin mir bei der Eingabe printf unsicher. Und ich weiß nicht genau wie ich die 2 Zahlen der add Funktion übergeben soll.

    Ich habe zuerst versucht das oben zu kompilieren, aber bekam einen Fehler.

    Für mich bisher ungewohnt mit struct zu arbeiten und hoffe mir kann jemand helfen.

    Vielen Dank fürs Lesen schon mal!


    EDIT: habe eben herausgefunden, dass struct vor int main() muss. bekomme aber einen Fehler bei der scanf Stelle.

  • Hallo,

    habe eben meinen Beitrag editiert.

    Also der Fehler kommt jetzt an den scanf Stellen.
    'z': nichtdeklarierter Bezeichner

    ich nehme an, dass die Adressierung etwas anders aussehen muss, aber bisher bin ich nicht drauf gekommen.

    Danke

  • 'z': nichtdeklarierter Bezeichner


    Das müßte z1 und z2 heißen, nicht z. Und ist kein Wunder, du deklarierst sie ja nicht.

    Übrigens, es ist sehr sehr sehr sehr sehr sehr sehr sehr ungewöhnlich, die beiden Komponenten einer komplexen Zahl mit x und y zu bezeichnen. Wie wärs mit real und img für Real- und Imaginärteil? Sprechende Variablennamen sind toll.

    *plantsch*

  • da kann ich plantschkuh nur zustimmen. eines der schwierigsten sachen beim programmieren ist, passende namen zu finden. das erspart mitunter extrem viel kommentiererei.

    nur noch eine frage. programmierst du das ganze in C oder C++?
    wenn du C++ verwendest, solltest dir vielleicht mal was zum Thema
    "Operator Overloading" ansehen.
    dann kannst z.B. den + Operator überladen und soetwas machen:

    complex z=c1+c2;

    sieht mir aber eher aus, dass du das ganze in C machst :)

  • Danke für eure Antworten...

    die main() hab ich jetzt so:

    Aber bekomme den Fehler

    Der linke Teil von '.x' muss eine Struktur/Union sein
    Der linke Teil von '.y' muss eine Struktur/Union sein

    Ja ist in C. Den Imaginärteil und Realteil werde ich noch umbenennen. Hast recht.

  • Ja stimmt.
    Hab draus Complex z1, z2; gemacht.

    Bekomme dann die Fehlermeldung:
    Complex': nichtdeklarierter Bezeichner
    Fehlendes ';' vor Bezeichner 'z1'
    'z1': nichtdeklarierter Bezeichner

    Das macht mich echt wahnsinnig. Hab zwar ein Beispielprogramm in C++ was mir das alles rechnet, aber es ist eben nicht in C...

  • Danke für die Antwort!

    Also habe jetzt für die Addition insgesamt

    Kompilieren ohne Fehler.
    Aber als Ergebnis bekomm ich immer 0.00000 0.00000i
    Warum?

  • Versteh nicht ganz. add ist ja die struct außerhalb int main().
    Ich habe die zwei eingegebenen Zahlen an die Funktion add übergeben und return ist ja z (das ergebnis).

  • ganz simple .. weil du dein ergebnis der operation in einer lokalen variable speicherst, anstatt im objekt selbst.


    Dem Einwand kann ich nicht ganz folgen?!

    xxyy: Beim printf darfst du keine & nehmen - sind ja keine Zeiger, die du ausgeben möchtest, sondern die Inhalte der Variablen... nur beim scanf brauchst du die Zeiger, wegen call-by-reference.

    Dipper dipper dii dipper dii dipper dii duuu

  • ähm pardon. i war irgendwie noch bei der struct definition und sorry nochmals. das mitm & operator is natürlich nicht ganz optimal, aber das irritiert mich auch grad, dass er hier lauter 0 ausspuckt. *grübel*

  • Ah, das hab ich ganz übersehen/verpeilt...

    Jetzt bekomm ich aber egal was ich eingebe
    -1851192085.......00000000 -18511920....00000000i raus.


    EDIT:

    Habe die Variablen x,y ganz oben mit float definiert und jetzt geht alles super!


    Danke euch allen nochmal!

  • Ah, das hab ich ganz übersehen/verpeilt...

    Jetzt bekomm ich aber egal was ich eingebe
    -1851192085.......00000000 -18511920....00000000i raus.


    Also bei mir hat es gepasst, nachdem ich die & bei den printf weggetan habe UND %lf anstatt nur %f genommen habe. Mit %f liest du floats ein, mit %lf doubles ("long floats").

    Dipper dipper dii dipper dii dipper dii duuu

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!