Nombres complexes

Fermé
SPA Genius Messages postés 2 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 15 novembre 2013 - 7 nov. 2013 à 18:04
SPA Genius Messages postés 2 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 15 novembre 2013 - 15 nov. 2013 à 07:34
Salut a tous,
Je suis un debutant en programmation en C. Je dois ecrire un programme permettant de:
1. Saisir deux nombres complexes C1 et C2
2. d'afficher chacun d'eux
3. d'additionner les deux nombres complexes et de mettre le résultat dans le premier.
4. D'afficher à nouveau les deux
5. De calculer et d'afficher leur norme.

J'ai commence, je trouve des difficultes pour des nombres complexes C1 et C2. Voici mes codes:

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

main()
{
double Re;
double Im;
double C1;
double C2;
int i;

printf("Saisir la partie reelle de C1: ");
scanf("%f", &Re);
printf("Saisir la partie imagimaire de C1: ");
scanf("%f", &Im);

C1 = Re + i*Im;
printf("Le premier nombre complexe est: ");

system ("pause");

printf("Saisir la partie reelle de C2: ");
scanf("%f", &Re);
printf("Saisir la partie imaginaire de C2: ");
scanf("%f", &Im);

C2 = Re + i*Im;
printf("Le deuxieme nombre complexe est: ");

}

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 7/11/2013 à 21:14
Bonjour,

scanf("%f", &Re);
Re est de type double. Il faut donc mettre : scanf("%lf",&Re);
De même pour les autres variables.

C1 = Re + i*Im;
Que vaut i ? Tu ne peux pas faire comme ça.
Je suppose que tu ne peux pas utiliser le type Complex, donc tu dois créer une structure

struct ... {
double re;
double im;
}
Ainsi lorsque tu définis un complexe, tu initialises une variable de type structure.
Et pour l'addition, il suffit d'additionner les parties réelles, et complexes. Etc. Après c'est des maths.


main()
Le bon prototype est : int main(void)

Et enfin, la fonction main() retourne 0 pour dire que tout s'est bien passé. Donc, il faut rajouter : return 0; en fin de fonction.
Cdlt,

Google is your friend
0
tu as plus un problème de math que de programmation:


Soit C1 et C2 deux complexes, alors il existe RE1, RE2, Img1 et Img2 4 réel tel que:
C1 = RE1 + i Img1
C2 = RE2 + i Img2

alors C1 + C2 = (RE1 + RE2) + i (Img1 + Img2)
et la norme de C1 = sqrt(RE1² + Img1²)
et en programmation i est une lettre par un complexe.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
8 nov. 2013 à 14:11
Je dirais même plus qu'il existe un unique RE1, RE2, Img1 et Img2 :-p.

Mais le problème n'est pas plus math que programmation. Je dirais autant sinon moins ^^.
0
Merci beaucoup. Avant meme de lire vos suggestions, j'ai essaye une autre facon et ca a marche. Si vous voulez voir mes codes, les voici. Et si vous voyez qu'il ya des choses a corriger, faites moi savoir. Merci

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
// Declaration de variables

float ReC1, ReC2;
float ImC1, ImC2;
float Reelle, Imaginaire;
float NC1, NC2;

printf("\t\t\t\t BONJOUR \t\t\t\n\n");
printf("BIENVENUE SUR LE PROGRAMME VOUS PERMETTANT D'EFFECTUER DES OPERATIONS SUR LES\n NOMBRES COMPLEXES\n\n");
printf("-----------------------------------------------------------------------------");

/*Saisie du premier nombre complexe*/

printf("\n Saisir la partie reelle du premier nombre complexe: ");
scanf("%f", &ReC1);
printf("\n Saisir la partie imaginaire du premier nombre complexe: ");
scanf("%f", &ImC1);

//Saisie du second nombre complexe

printf("\n Saisir la partie reelle du second nombre complexe: ");
scanf("%f", &ReC2);
printf("\n Saisir la parite imaginaire du second nombre complexe: ");
scanf("%f", &ImC2);

//Addition des nombres complexes

Reelle = ReC1 + ReC2;
Imaginaire = ImC1 + ImC2;

//Norme des nombres complexes

NC1 = sqrt(ReC1 * ReC1 + ImC1 * ImC1);
NC2 = sqrt(ReC2 * ReC2 + ImC2 * ImC2);

//Affichage des nombres complexe

printf("\n\n Le premier nombre complexe est %f + i%f", ReC1, ImC1);
printf("\n\n Le second nombre complexe est %f + i%f", ReC2, ImC2);
printf("\n\n La somme des deux nombres complexes est: %f + i%f", Reelle, Imaginaire);

//Affichage de nouveau des nombres complexes en mettant le resultat de l'addition dans le premier

printf("\n\n Le premier nombre complexe est %f + i%f", Reelle, Imaginaire);
printf("\n\n Le second nombre complexe est %f + i%f", ReC2, ImC2);

//Affichage de leur norme

printf("\n\n La norme du premier nombre complexe est %f", NC1);
printf("\n\n La norme du second nombre complexe est %f", NC2);

printf("\n\n------------------------------------------------------------------------");
printf("\t\t\t\t\t\n\n MERCI D'AVOIR UTILISE CE PROGRAMME \n\n");
printf("\t AU REVOIR\n\n");

}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
11 nov. 2013 à 15:43
Ben la plupart de mes remarques restent d'actualité (struct, ça serait plus propre pour regrouper en un type les parties réelles et imaginaires, main). C'est dommage d'avoir mis les type en float et pas en double. Surtout que tu utilises la fonction sqrt qui convertit en double. Si tu ne veux pas utiliser double mais float, alors il vaut mieux utiliser sqrtf(...) plutôt que sqrt(...)
0
SPA Genius Messages postés 2 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 15 novembre 2013
15 nov. 2013 à 07:34
Merci beaucoup pour tes commentaires, je vais apporter les corrections proposees.
0