Calcul des opérations sur les nombres complexes (15 points)

Format d'entrée

Une ligne contneant quatre nombres réels : a1 b1 a2 b2, représentant respectivement la partie réelle et la partie imaginaire de C1 = a1 + b1i et C2 = a2 + b2i. C2 n'est jamais nul.

Format de sortie

Quatrre lignes, chacune au format : (a1+b1i) opérateur (a2+b2i) = résultat, avec les résultats arrondis à une décimale. Si la partie réelle ou imaginaire du résultat est nulle (proche de 0 à moins de 0,05), elle est omise. Si le résultat est nul, afficher "0.0".

Exemple d'entrée 1

2 3.08 -2.04 5.06

Exemple de sortie 1

(2.0+3.1i) + (-2.0+5.1i) = 8.1i
(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i
(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i
(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i

Exemple d'entrée 2

1 1 -1 -1.01

Exemple de sortei 2

(1.0+1.0i) + (-1.0-1.0i) = 0.0
(1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i
(1.0+1.0i) * (-1.0-1.0i) = -2.0i
(1.0+1.0i) / (-1.0-1.0i) = -1.0

Code correct (C)

#include <stdio.h>
#include <math.h>

#define EPS 0.1

double real1, imag1, real2, imag2;
double resReal, resImag;

int afficher(double r, double i, int estResultat);

int addition() {
    resReal = real1 + real2;
    resImag = imag1 + imag2;
    printf("(");
    afficher(real1, imag1, 0);
    printf(") + (");
    afficher(real2, imag2, 0);
    printf(") = ");
    afficher(resReal, resImag, 1);
    return 0;
}

int soustraction() {
    resReal = real1 - real2;
    resImag = imag1 - imag2;
    printf("(");
    afficher(real1, imag1, 0);
    printf(") - (");
    afficher(real2, imag2, 0);
    printf(") = ");
    afficher(resReal, resImag, 1);
    return 0;
}

int multiplication() {
    resReal = real1 * real2 - imag1 * imag2;
    resImag = real1 * imag2 + real2 * imag1;
    printf("(");
    afficher(real1, imag1, 0);
    printf(") * (");
    afficher(real2, imag2, 0);
    printf(") = ");
    afficher(resReal, resImag, 1);
    return 0;
}

int division() {
    double denom = real2 * real2 + imag2 * imag2;
    resReal = (real1 * real2 + imag1 * imag2) / denom;
    resImag = (-real1 * imag2 + real2 * imag1) / denom;
    printf("(");
    afficher(real1, imag1, 0);
    printf(") / (");
    afficher(real2, imag2, 0);
    printf(") = ");
    afficher(resReal, resImag, 1);
    return 0;
}

int afficher(double r, double i, int estResultat) {
    int afficheReel = 0;
    if (estResultat && fabs(r) < EPS && fabs(i) < EPS) {
        printf("0.0");
        return 0;
    }
    if (estResultat && fabs(r) >= EPS) {
        afficheReel = 1;
        printf("%.1f", r);
    }
    if (estResultat && fabs(i) >= EPS) {
        if (afficheReel && i > 0)
            printf("+%.1fi", i);
        else
            printf("%.1fi", i);
    }
    if (!estResultat) {
        printf("%.1f", r);
        if (i < 0)
            printf("%.1fi", i);
        else
            printf("+%.1fi", i);
    }
    return 0;
}

int main() {
    scanf("%lf %lf %lf %lf", &real1, &imag1, &real2, &imag2);
    addition(); printf("\n");
    soustraction(); printf("\n");
    multiplication(); printf("\n");
    division(); printf("\n");
    return 0;
}

Note : Les variables ont été renommées pour plus de clarté, la structure logique est identique.

Étiquettes: nombres complexes opérations arithmétiques affichage conditionnel précision décimale C

Publié le 12 septembre à 13h59