[Caml Light] If imbriqués...

Arctara Messages postés 552 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour.

J'ai un petit problème en matière de Caml Light que j'apprends à l'université.
En effet, je souhaiterais faire une fonction qui, lorsqu'on lui donne trois flottants a, b et c, renvoie les solutions de l'équation ax²+bx+c=0. Voici mon code :
let poly (a, b, c) =
	if a = 0
	then print_string ("Veuillez entrer un polynôme du second degré.")
	else
		print_string ("Delta = b² - 4ac = ") print_float(b *. b - 4.0 *. a *. c)
		if b *. b - 4.0 *. a *. c < 0
		then print_string (" < 0") print_newline () print_string ("L'équation ax² + bx + c = 0 n'admet, avec les valeurs de a, b et c entrées, aucune solution réelle.")
		else
			if b *. b - 4.0 *. a *. c = 0
			then print_string (" = 0") print_newline () print_string ("L'équation ax² + bx + c = 0 admet, avec les valeurs de a, b et c entrées, une seule solution réelle : ") print_float (-b / (2.0 *. a)) print_string (".")
			else
				if b *. b - 4.0 *. a *. c > 0
				then print_string (" > 0") print_newline () print_string ("L'équation ax² + bx + c = 0 admet, avec les valeurs de a, b et c entrées, deux solutions réelles : ") print_float ((-b - sqrt(b *. b - 4.0 *. a *. c)) / (2.0 *. a)) print_string (" et ") print_float ((-b + sqrt(b *. b - 4.0 *. a *. c)) / (2.0 *. a)) print_string (".")
				else (print_string ("?")) ;;


Le problème est localisé au niveau du second "if" comme "erreur de syntaxe". Je suppose que cela vient du fait que j'essaie de continuer alors qu'un résultat a déjà été envoyé (avec le "print_string"), mais je ne sais pas comment contourner cela...

Merci d'avance :)
A voir également:

2 réponses

Moyjin Messages postés 138 Statut Membre 10
 
il ne manquerai pas simplement un ; pour dire que ton if est fini?
4 if 2;.. a moins que je me trompe
0
Arctara Messages postés 552 Statut Membre 78
 
Non, l'erreur passe sur le premier "else", donc au niveau du point-virgule...
0
Anwer
 
je veut télécharger caml light qui me aidé....!!!
0
KX Messages postés 19031 Statut Modérateur 3 020
 
@Anwer : Caml Light
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je pense Arctara a trouvé la solution depuis plusieurs mois maintenant, mais si ça intéresse quelqu'un voici une version sans erreur ;)

let poly a b c =
if (a = 0.)
then 	print_string ("Veuillez entrer un polynôme du second degré.")
else	begin
	print_string "Delta = b² - 4ac = ";
	let delta = b*.b-.4.*.a*.c in
	print_float(delta);

	if (delta < 0.)
	then 	begin
		print_string " < 0";
		print_newline ();
		print_string "L'équation ax² + bx + c = 0 n'admet, avec les valeurs de a, b et c entrées, aucune solution réelle.";
		end
	else if (delta = 0.)
	then 	begin
		print_string " = 0";
		print_newline ();
		print_string "L'équation ax² + bx + c = 0 admet, avec les valeurs de a, b et c entrées, une seule solution réelle : ";
		print_float (-.b/.(2.*.a));
		end
	else	(* delta > 0. *)
		begin
		print_string " > 0";
		print_newline ();
		print_string "L'équation ax² + bx + c = 0 admet, avec les valeurs de a, b et c entrées, deux solutions réelles : ";
		print_float ((-.b-.sqrt(delta))/.(2.*.a));
		print_string " et ";
		print_float ((-.b+.sqrt(delta))/.(2.*.a));
		end;
	end;
print_newline ();;

(* exemples *)

poly 0. 0. 0.;;
poly 1. (-2.) 1.;;
poly 1. (-3.) 2.;;
poly 1. 0. 1.;;
0