Koplexe zahlen und header datei



  • hi,
    ich muss komplexe zahlen addieren, subtrahieren, multiplizieren und dividieren leider habe ich das mit der divison nicht hinbekommen.
    das ist was ich bis jetzt hab:

    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    
    struct complex
      {
    	float im, re;
      } z1,z2, ergebnis;
    
    void addieren();
    void subtrahieren();
    void multiplizieren();
    void dividieren()
    
    void main()
    {
      struct complex
      {
    	float im, re;
      } z1,z2, ergebnis;
    
    	float im, re;
    
       addieren();
       subtrahieren();
       multiplizieren();
       dividieren();
    }
    
    void addieren()
     {
      printf("Bitte geben sie 4 zahlen ein:\n");
      scanf("%f",&z1.re); 
      scanf("%fj",&z1.im); 
      scanf("%f",&z2.re); 
      scanf("%fj",&z2.im); 
      printf("addition ihrer zahlen:\n");
      ergebnis.re = z1.re + z2.re; 
      ergebnis.im = z1.im + z2.im;
      printf("%f\n",ergebnis.re);
      printf("%fj\n",ergebnis.im);
     };
    
    void subtrahieren()
    {
      printf("subtraktion ihrer zahlen:\n");
      ergebnis.re = z1.re - z2.re; 
      ergebnis.im = z1.im - z2.im;
      printf("%f\n",ergebnis.re);
      printf("%fj\n",ergebnis.im);
     };
    
    void multiplizieren()
    {
      printf("multiplikation ihrer zahlen:\n");
    
      ergebnis.re=(z1.re*z2.re)-(z1.im*z2.im);
      ergebnis.im=(z1.re*z2.im)+(z1.im*z2.re);
    
      printf("%f\n",ergebnis.re);
      printf("%fj\n",ergebnis.im);
    };
    

    ich weiß printf und scanf sind keine c++ befehle aber wir arbeiten noch damit

    und dann muss ich noch

    - Die Funktionen in einer eigenen Headerdatei schreiben und einbinden.
    - Die Doppeleinbundung verhindern.
    - Benutzermenü:
    Eingabe von zwei komplexen Zahlen mit Real- und Imaginärteil
    Auswahl der Rechenoperation
    Darstellung des Ergebnisses

    In einer ersten Version soll die Aufgabe mit der Deklaration einer Klasse „Komplexclass“
    realisiert werden.
    Darin sollen sich zunächst die Funktionen aus der prozeduralen Version im Prinzip
    widerspiegeln. Wesentlicher Unterschied: Real- und Imaginärteil werden im privaten Teil der Klasse realisiert.

    würde mich auf antworten sehr freuen
    danke schonmal

    by jambe66



  • Hi,

    wenn due schon mit C++ arbeitest, dann nimm die complexe zahlen von STL

    #include <complex>

    class Complex : public std::complex<double>
    {
    };

    dabei bekommst Du alles ariothmetische functionen, sogar mit operatore-ueberladung.



  • @etti27
    Glaubst du wirklich, damit kriegt er eine gute Bewertung seiner Arbeit? Hört sich für mich mal wieder stark nach einer unqualifizierten Schulaufgabe an ...



  • Jambe66 schrieb:

    hi,
    ich muss komplexe zahlen addieren, subtrahieren, multiplizieren und dividieren leider habe ich das mit der divison nicht hinbekommen.

    Division geht so

    complex dividiere( const complex& a, const complex& b )
        {
            float betrag = b.im * b.im + b.re * b.re;
            complex erg;
            erg.im = (a.im * b.re - a.re * b.im ) / betrag;
            erg.re = (a.re * b.re + a.im * b.im ) / betrag;
            return erg;
        }
    

    Jambe66 schrieb:

    ich weiß printf und scanf sind keine c++ befehle aber wir arbeiten noch damit

    warum?

    Jambe66 schrieb:

    und dann muss ich noch

    - Die Funktionen in einer eigenen Headerdatei schreiben und einbinden.
    - Die Doppeleinbundung verhindern.
    - Benutzermenü:
    Eingabe von zwei komplexen Zahlen mit Real- und Imaginärteil
    Auswahl der Rechenoperation
    Darstellung des Ergebnisses

    In einer ersten Version soll die Aufgabe mit der Deklaration einer Klasse „Komplexclass“
    realisiert werden.
    Darin sollen sich zunächst die Funktionen aus der prozeduralen Version im Prinzip
    widerspiegeln. Wesentlicher Unterschied: Real- und Imaginärteil werden im privaten Teil der Klasse realisiert.

    Nicht nur. Viel wichtiger ist das Implementieren von Operatoren, so dass man später so was

    complex c1( 9, -3.5 ), c2( -0.6, 3 );
      complex c3 = c1 / c2;
    

    hinschreiben kann

    Jambe66 schrieb:

    würde mich auf antworten sehr freuen

    auf welche Frage? Wo genau ist Dein Problem - mal abgesehen von der Division (s.o.)

    Gruß
    Werner



  • Jambe66 schrieb:

    - Die Funktionen in einer eigenen Headerdatei schreiben und einbinden.

    Das ist recht einfach - du packst von allen Funktionen die Prototypen (reiner Funktionskopf) in den Header und bindest diesen per #include am Anfang der CPP ein.

    - Die Doppeleinbundung verhindern.

    Google mal nach "Include-Guard", da findet sich bestimmt das richtige für dich.



  • danke für die antworten das mit der division hat geklappt aber ich habe probleme mit dem menü

    #include <iostream>
    #include <string>
    using namespace std; 
    
    struct complex
      {
    	float im, re, betrag;
      } z1,z2, ergebnis;
    
    void addieren();
    void subtrahieren();
    void multiplizieren();
    void dividieren();
    void ausgabe_menue();
    
    int main()
    {
      struct complex
      {
    	float im, re, betrag;
      } z1,z2, ergebnis;
    
    	float im, re, betrag;
    
       addieren();
       subtrahieren();
       multiplizieren();
       dividieren();
       ausgabe_menue();
    
          while (true) {
          int wahl=ausgabe_menue();
          if (wahl==9) break;
          switch (wahl) {
             case 1: addieren(); break;
             case 2: subtrahieren(); break;
             case 3: multiplzieren(); break;
             case 4: dividieren(); break;
             case 9: break;
          }
       }
       return 0; 
    
    }
    
    void addieren()
     {
      printf("Bitte geben sie 4 zahlen ein:\n");
      scanf("%f",&z1.re); 
      scanf("%fj",&z1.im); 
      scanf("%f",&z2.re); 
      scanf("%fj",&z2.im); 
      printf("addition ihrer zahlen:\n");
      ergebnis.re = z1.re + z2.re; 
      ergebnis.im = z1.im + z2.im;
      printf("%f ",ergebnis.re);
      printf("%fj\n",ergebnis.im);
     };
    
    void subtrahieren()
    {
      printf("subtraktion ihrer zahlen:\n");
      ergebnis.re = z1.re - z2.re; 
      ergebnis.im = z1.im - z2.im;
      printf("%f ",ergebnis.re);
      printf("%fj\n",ergebnis.im);
     };
    
    void multiplizieren()
    {
      printf("multiplikation ihrer zahlen:\n");
    
      ergebnis.re=(z1.re*z2.re)-(z1.im*z2.im);
      ergebnis.im=(z1.re*z2.im)+(z1.im*z2.re);
    
      printf("%f ",ergebnis.re);
      printf("%fj\n",ergebnis.im);
    };
    
    void dividieren()
    {
    printf("division ihrer zahlen:\n");
    
    float betrag =((z2.im * z2.im) + (z2.re * z2.re));
    ergebnis.re = ((z1.re * z2.re) + (z1.im * z2.im)) / betrag;
    ergebnis.im = ((z1.im * z2.re) - (z1.re * z2.im)) / betrag;
    
    printf("%f ",ergebnis.re);
    printf("%fj\n",ergebnis.im);
    
    }
    
    int ausgabe_menue() {
       int wahl=0;
       while (wahl==0) {
          system("cls");
          printf("1 - Addieren\n");
          printf("2 - Subtrahieren\n");
          printf("3 - Multiplizieren\n");
          printf("4 - Dividieren\n");
          printf("9 - Ende\n");
          cin>>wahl; cin.ignore();// enter aus cin buffer loeschen
          system("cls");
          if (wahl==9) break;
          if (wahl>4) { //fehler
             wahl=0; printf("falsche eingabe\n\n");
          }
          else break;
          system("pause");
       }
       return wahl;
    }
    }
    

    @CStoll :
    könntest du das mit der header datei etwas genauer beschreiben wäre echt super.



  • Jambe66 schrieb:

    danke für die antworten das mit der division hat geklappt aber ich habe probleme mit dem menü

    Und wie äußert sich das Problem?

    @CStoll :
    könntest du das mit der header datei etwas genauer beschreiben wäre echt super.

    Du packst die ganzen Deklarationen (alles von "struct complex" bis "void ausgabe_menue();") in eine eigene Datei, schreibst einen Include-Guard darum und speicherst sie unter "complex.h" ab. Anschließend ersetzt du diesen Block im Hauptprogramm durch ein einfaches "#include "complex.h".

    (und als nächstes solltest du die Funktionsdefinitionen in die Extra-Datei "complex.cpp" auslagern und diese dem Linker mitgeben)


Log in to reply