[Caml Light] If imbriqués...
Arctara
Messages postés
552
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
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 :
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 :)
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:
- [Caml Light] If imbriqués...
- Light image resizer - Télécharger - Photo & Graphisme
- Windows 10 light - Télécharger - Systèmes d'exploitation
- Atlantis version light - Télécharger - Traitement de texte
- Silver light - Télécharger - Divers TV & Vidéo
- Coagula light - Télécharger - Création musicale
2 réponses
il ne manquerai pas simplement un ; pour dire que ton if est fini?
4 if 2;.. a moins que je me trompe
4 if 2;.. a moins que je me trompe
Arctara
Messages postés
552
Statut
Membre
78
Non, l'erreur passe sur le premier "else", donc au niveau du point-virgule...
Anwer
je veut télécharger caml light qui me aidé....!!!
KX
Messages postés
19031
Statut
Modérateur
3 020
@Anwer : Caml Light
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.;;