1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

struct komplexe Zahlen Operation

  • xxyy
  • 30. November 2006 um 09:33
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • xxyy
    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
    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
    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!
    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.

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

  • xxyy
    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
    Punkte
    1.620
    Beiträge
    315
    • 30. November 2006 um 20:54
    • #9

    es sollte auch

    Code
    struct Complex z1;


    heißen

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

  • lerod
    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
    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
    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").

  • xxyy
    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!
    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum