Manipulation des nombres complexes en C

Résolu
marion -  
 FCLS -
Bonjour,

Je suis débutante en langage C et je dois mettre en place un programme écrit C, permettant de faire des calculs sur les nombres complexes.
La structure suivante est donnée:

typedef struct {
double Re;
double Im;
}
Complexe;

je dois écrire les fonctions suivantes:

1. La fonction Complexe LectureC() qui permet la saisie au clavier des parties reelles et imaginaires d'un nombre complexe.

2. la procédure void EcritureC(Complexe z) qui permet d'affaicher à l'écran un nombre complexe passé en parametre sous la forme z = Re + i Im.

3. La fonction Complexe SommeC(Complexe z1, Complexe z2) qui calcule la somme de deux passées en paramètre de la fonction , résultat r= z1+z2.

J'ai également des questions similaires pour faire multiplications, divisions, ...

Pour l'instant je n'ai fait que ces 3 questions mais mon programme ne fonctionne pas.

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
double Re;
double Im;
} Complexe;

Complexe lectureC(Complexe z)
{
scanf ("%f", &z.Re);
scanf ("%f", &z.Im);
return z;
}

void EcritureC(Complexe z)
{
printf ("%f = %f + i %f\n",z, z.Re, z.Im);
}

Complexe sommeC(Complexe z1, Complexe z2)
{
Complexe r;
r.Re= z1.Re+ z2.Re;
r.Im= z1.Im+ z2.Im;
return r;
}

main ()
{
Complexe z1;
Complexe z2;
Complexe z3;

printf ("entrez un nombre réel de z1 et un nomre imaginaire z1: \n");
z1 = lectureC (z1);

printf ("entrez un reel de z2 et un imaginaire z2: \n");
z2 = lectureC (z2);

Complexe sommeC(z1,z2);
printf ("la partie reel de z3 est : %f\n", z3.Re );
printf ("la partie imaginaire de z3 est : %f \n", z3.Im);
EcritureC(z3);

return 0; }

Pouvez vous m'aider?

4 réponses

  1. Mr. D@RK Messages postés 32 Statut Membre 28
     
    #include <stdio.h>
    #include <stdlib.h>

    typedef struct
    {
    double Re;
    double Im;
    } Complexe;

    void lectureC(Complexe* z)
    {
    scanf ("%lf", &z->Re);
    scanf ("%lf", &z->Im);
    }

    void EcritureC(Complexe z)
    {
    printf ("%lf + i %lf\n", z.Re, z.Im);
    }

    Complexe* sommeC(Complexe z1, Complexe z2)
    {
    Complexe* r=(Complexe*)malloc(sizeof(Complexe));
    r->Re= z1.Re+ z2.Re;
    r->Im= z1.Im+ z2.Im;
    return r;
    }

    Complexe* produitC(Complexe z1, Complexe z2)
    {
    Complexe* r=(Complexe*)malloc(sizeof(Complexe));
    r->Re= z1.Re * z2.Re - z1.Im * z2.Im;
    r->Im= z1.Re * z2.Im+ z2.Re * z1.Im;
    return r;
    }

    Complexe* divisionC(Complexe z1, Complexe z2)
    {
    Complexe* tmp=(Complexe*)malloc(sizeof(Complexe));
    Complexe* r=NULL;
    double m= z2.Im*z2.Im+z2.Re*z2.Re;
    tmp->Re= z2.Re/m;
    tmp->Im= -z2.Im/m;
    r= produitC(z1,*tmp);
    free(tmp);
    return r;
    }

    main ()
    {
    Complexe z1,z2;
    Complexe *z3=NULL;

    printf ("entrez un nombre réel de z1 et un nomre imaginaire z1: \n");
    lectureC (&z1);

    printf ("entrez un reel de z2 et un imaginaire z2: \n");
    lectureC (&z2);

    z3 = sommeC(z1,z2);
    printf ("la partie reel de z3 est : %f\n", z3->Re );
    printf ("la partie imaginaire de z3 est : %f \n", z3->Im);
    //somme
    printf("\nz1+z2=");
    EcritureC(*z3);
    free(z3);
    //produit
    printf("\nz1*z2=");
    z3=produitC(z1,z2);
    EcritureC(*z3);
    free(z3);
    //division
    printf("\nz1/z2=");
    z3=divisionC(z1,z2);
    EcritureC(*z3);
    free(z3);
    //
    system("pause");
    return 0;
    }
    10
    1. Mr. D@RK Messages postés 32 Statut Membre 28
       
      N'oubliez pas de mettre "sujet resolu" ;)
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Mr. D@RK :
      Pour les printf, il s'agit de printf("%f",...) et non de %lf.
      De plus, vous cassez un peu tout son programme en passant par des allocations dynamiques...
      0