Utilisation superflue d'une instruction ? & fonctionnement de begin/end
Bonjour,
Pour un pôlynome p = x2 + 2x + 3
Modélisé par ce tableau d'entiers:
Code:
# let fullPolynomial = [|3; 2; 1|];;
Où le coefficient de valeur 3 et de degrès 0 est à l'indice 0, le coefficient de valeur 2 et de degrès 1 est à l'indice 1 et le coefficient de valeur 1 et de degrès 2 est à l'indice 2.
Pour imprimer le pôlynome sous la forme 3 + 2x + x^2 j'ai ce code valide :
Code:
1 2 3 4 5 6 7 8 9 10
| (* Définition de la fonction d'impression des monômes *)
# let printMonomial(coef)(degr) =
if degr = 0 then print_int(coef) else
if coef <> 0 then
begin
print_string(" + ");
if coef <> 1 then print_int(coef); print_string("x");
if degr <> 1 then
begin print_string("^"); print_int(degr) end
end;; |
Code:
1 2 3
| (* Définition de la fonction d'impression du polynôme *)
# let printPolynomial(p) =
for i = 0 to Array.length(p) - 1 do printMonomial(p.(i))(i) done;; |
Code:
# printPolynomial(fullPolynomial); print_newline();;
Dans la fonction d'impression des monômes je ne comprends pas à quoi sert la ligne 4 (if coef <> 0 then), le code fonctionne sans cette instruction et de toute façon le coefficient ne peut être que différent de zéro??
Et j'ai du mal avec begin/end, je ne comprends pas vraiment comment ça fonctionne (en fait j'y vais au pif).
De mes explorations avec:
Code:
1 2 3 4
| # let printMonomial(coef)(degr) =
if degr = 0 then print_int(coef) else print_string(" + ");
if coef <> 1 then print_int(coef); print_string("x");
if degr <> 1 then print_string("^"); print_int(degr);; |
ET:
Code:
1 2 3 4 5 6 7
| # let printMonomial(coef)(degr) =
if degr = 0 then print_int(coef) else
begin
print_string(" + ");
if coef <> 1 then print_int(coef); print_string("x");
if degr <> 1 then print_string("^"); print_int(degr);
end;; |
J'obtient respectivement 33x^0 + 2x1 + x^2 et 3 + 2x1 + x^2, de même que pour le résultat du code valide je n'arrive pas à saisir le fonctionnement de begin/end dans ce programme (et très certainement en général).
difficulté classique avec les parenthèses en ocaml
Citation:
de toute façon le coefficient ne peut être que différent de zéro ?
Et si le polynôme est X² + 1 le coefficient de x est bien égal à zéro, n'est-ce-pas ?
begin...end est exactement la même chose que (...) ce qui ne va pas t'aider beaucoup puisque tu as l'air d'être faché(e) avec les parenthèses en ocaml. Tu n'es pas la première ni la dernière personne à souffrir la syntaxe d'ocaml. Dis-toi que ce n'est qu'un sale moment à passer, plus tard tu pourras programmer en Shen.