Exercice langage C : Résolution d'équation de deuxième degré

Ecrire une fonction saisie qui permet de saisir A, B et C.

Ecrire une fonction résoudre qui permet de résoudre l'équation  AX2+ BX + C = 0 ET retourne

0 si l'équation n'a pas de solution

1 si l'équation n'a qu'une solution

2 si l'équation possède deux solutions

3 si R est l'ensemble de solutions

Ecrire une fonction affiche qui permet d'afficher pas de solution réelle si la valeur retournée par la fonction resoudre est 0 la valeur X1 si la valeur retournée par la fonction resoudre est 1 les valeurs X1 et X2 si la valeur retournée par la fonction resoudre est 2 l'ensemble de solution est R si la valeur retournée par la fonction resoudre est 3

Ecrire le programme principal qui fait appel à ces fonctions


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* Resolution d'une equation du second degre dans R */

#include
#include

/* Saisie des coefficients de l'equation */
void saisie (double *a, double *b, double *c);

/* resolution de l'equation: la valeur retournee donne le nombre de solutions,
 * qui se trouvent dans *x1 et *x2, la valeur 3 indique que tout R
 * est solution */
int resoudre (double a, double b, double c, double *x1, double *x2);

/* Affichage de la resolution avec la convention de la fonction resoudre */
void affiche (int v, double x1, double x2);

int main()
{
	int val;
	double a, b, c, x1,x2;

	saisie(&a, &b, &c);

	val = resoudre(a, b, c, &x1, &x2);

	affiche(val, x1, x2);

	return 0;
}

void saisie(double *a, double *b, double *c)
{
	printf("a = "); scanf("%lf",a);
	printf("b = "); scanf("%lf",b);
	printf("c = "); scanf("%lf",c);
}

int resoudre(double a, double b, double c, double *x1, double *x2)
{
	double delta;
	if (a == 0.0)
	{
		if (b == 0.0)
		{
			if (c == 0.0)
			{
				return 3;
			}
			else
			{
				return 0;
			}
		}
		else
		{
			*x1 = -c/b;
			return 1;
		}
	}
	else
	{
		delta = b*b - 4*a*c;
		if (delta < 0)
		{
			return 0;
		}
		else if (delta == 0)
		{
			*x1 = -b / 2*a;
			return 1;
		}
		else
		{
			*x1 = (-b + sqrt(delta)) / 2*a;
			*x2 = (-b - sqrt(delta)) / 2*a;
			return 2;
		}
	}
}

void affiche(int v, double x1, double x2)
{
	switch(v)
	{
		case 0: printf("pas de solution reelle\n");
			break;
		case 1: printf("une seule solution: x1 = %f\n", x1);
			break;
	 	case 2: printf("deux solutions: x1 = %f et x2 = %f\n", x1, x2);
			break;
		case 3: printf("l\'ensemble de solutions est R\n");
			break;
	}
}