Teile von komplexen Datentypen addieren und ausgeben. (Frage)



  • Hi leute, zu meinem Code erstmal: Ich will anfangs einen neuen Datentyp definieren durch typedef, der heißt znumber. z1 und z2 sind jeweils Definitionen von znumber mit ihren eigenen Real- und Imaginärteilen.

    Nun möchte ich im main die Funktion sum aufrufen, die die einzelnen Werte von z1 und z2 summiert. anschließend wird newz als summe ausgegeben und dessen inhalt soll durch return zurück an main gegeben und durch printf ausgegeben werden.

    Die Fehler im System sind durch // im Code von mir wiedergegeben worden, mit denen ich leider nichts anfangen kann, hoffe aber dass ihr vll was damit anfangen könnt und wäre froh wenn ihr mir weiterhelfen würdet. mfg 🙄

    #include <cstdlib>
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    typedef struct complexnumber{  //Der neue Typ "znumber" wird erstellt!
    
       double real;
       double imag;
    }  znumber;
    
    znumber *sum(znumber *z1, znumber *z2){    
    
       znumber *newz=malloc(sizeof(znumber));      //invalid conversation from'void' to 'znumber' 
    
       newz->real = z1->real + z2->real;
       newz->imag = z1->imag + z2->imag;
       return newz;
    }
    
    int main(int argc, char *argv[]){
    
       znumber z1={3.5,5.6};
       znumber z2={7.5,9.6};    
       znumber a;
    
       a=*sum(z1,z2); //no match for 'operator*' in '*z1' und '*z2'
       printf("lf",a.real);
       printf("lf",a.imag);
    
       system("PAUSE");
       return EXIT_SUCCESS;
    }
    


  • Hallo,

    du hast zwar hier im C-Forum gepostet, dein Code ist jedoch nur mit einem C++ Compiler (aufgrund der ersten Zeilen) kompilierbar.
    Der restliche Code ist jedoch pures C - du mußt dich also entscheiden!
    Und mit einem C Compiler fallen dann auch die Fehlermeldungen weg.
    Ändere dazu einfach die Endung auf ".c" und editiere die ersten 5 Zeilen zu

    #include <stdlib.h>
    #include <stdio.h>
    
    /* using namespace std; // löschen */
    

    Und zusätzlich noch die Zeile

    a=*sum(&z1,&z2);
    

    Aufgrund des malloc() innerhalb der Funktion sum() hast du jedoch ein Speicherleck, da du den Speicher nicht mehr mit free() freigibst.

    Am besten du verzichtest auf die dynamische Allozierung und gibst die Struktur direkt zurück:

    znumber sum(znumber *z1, znumber *z2)
    {
       znumber newz;
       newz.real = z1->real + z2->real;
       newz.imag = z1->imag + z2->imag;
       return newz;
    }
    

    Und den Aufruf dann ohne Dereferenzierung:

    a=sum(&z1,&z2);
    

    Viel Erfolg noch.



  • #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
    
       double real;
       double imag;
    }  ZNumber;
    
    ZNumber sum(ZNumber *z1, ZNumber *z2){    
    
       ZNumber newz;
    
       newz.real = z1->real + z2->real;
       newz.imag = z1->imag + z2->imag;
    
       return newz;
    }
    
    int main(int argc, char *argv[]){
    
       ZNumber z1={3.5,5.6},
               z2={7.5,9.6},    
               a=sum(&z1,&z2);
    
       printf("%f",a.real);
       printf("%f",a.imag);
    
       return 0;
    }
    


  • ja ok, dem kann ich jetzt folge, und an die headerdateien hab ich irgendwie garnicht gedacht, DANKE auf jeden Fall schon mal für die positiven Antworten! aber du meintest mit free() freigeben, kannste kurz sagen, wie ich das mache? 😉 ansonsten ist auch net schlimm, mach ich mich mal anders schlau, muss ja irgendwo nachzulesen sein, thx nochmal.


Anmelden zum Antworten