LISP arrondi à 5cm près une longueur

Fermé
JP - 13 juin 2012 à 20:25
 JP - 14 juin 2012 à 20:16
Bonjour,

j'ai crée un petit programme pour arrondir à 5 cm le résultat d'une distance
Mais j'ai un bug
car par exemple pour 433cm le résultat obtenue et 400cm au lieu de 435cm

;détermination de la porté
(setq PRT(distance p8 p9)); distance entre les 2 points par exemple 433
(setq PRT1 ( / PRT 5)) ; ici on divise la distance par 5
(setq PRT2 (FIX PRT1)); ici on va récupéré la parti entière du résultat de la division précédente donc 86
(setq PRT3 (* PRT2 5)) ; ici on va faire la multiplication de la parti entière par 5 86*5=430
( if ( = PRT3 PRT)
(progn
(setq PORTE PRT) ; si PRT3 = PRT alors le résultat PORTE = PRT
)
(progn
(setq PORTE (+ PRT3 5)); sinon si PRT <>PRT3 alors le résultat sera 430 + 5 =435
)
)

or moi le programme m'a donner 400 je penses que ça vienst de la commande FIX

1 réponse

Bonjour,

Cette fonction devrait résoudre ton problème

(defun arrondi5 (long)
(setq long (fix long))
  (if (= (rem long 5) 0)
    (setq result long)
    (setq result (+ (- long (rem long 5)) 5)) 
  )
)


par exemple:

(setq dist 51.05); distance mesurée 51.05
(setq porte (arrondi5 dist)); distance arrondie à 55

(setq dist 55.0)); distance mesurée 55
(setq porte (arrondi5 dist)); distance arrondie à 55

A+
0
Impec

hier j'avais trouver mon erreur
mais ta solution et plus courte
0