1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

struct komplexe Zahlen Operation

  • xxyy
  • 30. November 2006 um 09:33
  • Unerledigt
  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 09:33
    • #1

    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.

    Zitat

    struct Complex { double re,
    im;
    };


    int main()

    {

    printf("1. Zahl: ");
    scanf("%f %f", &z1.x, &z1.y);
    printf("2. Zahl: ");
    scanf("%f %f",&z2.x, &z2.y);


    }

    Alles anzeigen

    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.

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 30. November 2006 um 09:36
    • #2
    Zitat von xxyy


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

    wäre nett, wenn du uns verraten würdest, welchen fehler.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 09:46
    • #3

    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

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 30. November 2006 um 11:51
    • #4
    Zitat von xxyy

    '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*

  • samyjr
    8
    samyjr
    Mitglied
    Reaktionen
    4
    Punkte
    609
    Beiträge
    117
    • 30. November 2006 um 15:03
    • #5

    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 :)

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 15:44
    • #6

    Danke für eure Antworten...

    die main() hab ich jetzt so:

    Zitat


    int main()
    {

    double z1, z2;


    printf("1. Zahl: ");
    scanf("%f %f", &z1.x, &z1.y);
    printf("2. Zahl: ");
    scanf("%f %f",&z2.x, &z2.y);
    }

    Alles anzeigen

    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.

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 30. November 2006 um 19:12
    • #7

    Sollte das in der Deklaration nicht "complex z1,z2;" sein? Ein double ist kein struct.

    Dipper dipper dii dipper dii dipper dii duuu

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 20:49
    • #8

    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...

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 30. November 2006 um 20:54
    • #9

    es sollte auch

    Code
    struct Complex z1;


    heißen

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 21:18
    • #10

    Danke für die Antwort!

    Also habe jetzt für die Addition insgesamt

    Zitat


    int main()
    {

    struct Complex z,z1, z2;


    printf("1. Zahl: ");
    scanf("%f %f", &z1.x, &z1.y);
    printf("2. Zahl: ");
    scanf("%f %f",&z2.x, &z2.y);

    z=add(z1,z2);
    printf("%f %fi",&z.x, &z.y);

    Alles anzeigen

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

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 30. November 2006 um 21:39
    • #11

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

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 21:51
    • #12

    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).

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 30. November 2006 um 22:07
    • #13
    Zitat von lerod

    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

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 30. November 2006 um 22:12
    • #14

    ä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*

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 30. November 2006 um 22:15
    • #15

    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!

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 1. Dezember 2006 um 00:10
    • #16
    Zitat von xxyy

    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

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 1. Dezember 2006 um 23:11
    • #17

    %lf fällt mir jetzt auch wieder ein. In dem Tutorial von Pronix steht bei double das Formatzeichen %f. Nur bei long double %lf. komisch...

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 1. Dezember 2006 um 23:16
    • #18

    printf und scanf haben da unterschiedliche Formatzeichen, die darf man nicht verwechseln.

    *plantsch*

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern