Bonjour,
Certainement avec retard (je suis peu présent sur ce forum) pour ton exercice. Il me semble reconnaitre la syntaxe de l'AutoLisp, je vais donc m'essayer à une réponse.
Pour la fonction alert regarde du coté des fonctions de conversions dans ton cas rtos (real to string).
Pour rester dans ton exemple, j'ai monté un petit exemple avec getint (qui me semble plus adapté) pour travailler avec des entiers et itoa pour effectué la conversion en chaine de caractère.
1 2 3 4 5 6 7 8 9 10 11
| (defun sommenpremiers (/ numero resultat)
(setq numero (getint "Valeur de N svp ?")
resultat 0
)
(while (> numero 0)
(setq resultat (+ resultat numero)
numero (1- numero)
)
)
(alert (itoa resultat))
) |
Pour plus de souplesse (même si ce n'est qu'un exercice), j'aurais plutôt scindé mon code comme ceci:
1 2 3 4 5 6 7 8 9
| (defun Snp (int / res)
(setq res 0)
(while (> int 0)
(setq res (+ res int)
int (1- int)
)
)
res
) |
(defun sommenpremiers () (alert (itoa (Snp (getint "Valeur de N svp ?")))))
Et pour faire plus "lispiens", on peut également écrire Snp sous forme récursive comme ceci:
1 2 3 4 5 6
| (defun Snp (int)
(if (> int 0)
(+ int (Snp (1- int)))
0
)
) |
Pour la petite histoire, c'est avec ce raisonnement par récurrence S = 1 + 2 + 3 + ... + (n-1) + n que le petit Carl Friedrich Gauss (âgé de neuf ans à l'époque) à déduit la formule suivante S= n(n+1)/2, concernant la somme des N premiers entiers naturels.
Formule qui une fois écrit en lisp (c.a.d en notation préfixé) donne ceci:
1 2 3
| (defun Snp (n)
(/ (* n (1+ n)) 2)
) |
Cordialement,
Partager