Manipulation des nombres complexes en C

Résolu/Fermé
marion - 10 oct. 2010 à 13:38
 FCLS - 17 mai 2021 à 15:53
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

Mr. D@RK Messages postés 26 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 16 octobre 2010 28
10 oct. 2010 à 15:41
#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;
}
9
Mr. D@RK Messages postés 26 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 16 octobre 2010 28
10 oct. 2010 à 15:41
N'oubliez pas de mettre "sujet resolu" ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
10 oct. 2010 à 16:00
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