Exercice langage C corrigé résolution d’équation de deuxième degré

/* 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;
	}
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *