mateus Posté(e) le 1 novembre 2015 Posté(e) le 1 novembre 2015 Bonjour à tous, Voilà je vous expose mon problème. Je souhaite comparer une valeur rentrée par l'utilisateur avec d'autres valeurs (réelles) que j'ai préalablement rentrer dans des variables. Je souhaite en récupérer la valeur la plus proche. Ex : l'utilisateur rentre 100Mes variables sont 1000, 200 , 120L'outil me sort le 120. Je vous remercie par avance 1
didier Posté(e) le 1 novembre 2015 Posté(e) le 1 novembre 2015 Coucou voici une petit chose tapée à la va-vite (c'est dimanche soir je suis fourbu de la semaine)je te le donne pour piste de recherche car ça ne doit pas fonctionner dans tons les cas, par exemple en cas d'égalité de différence dans la liste ! amicalement : (setq valeur 1020) (setq liste '( 1040 110 109 95 212 99 1019 )) (setq n 0) (setq listetempo (mapcar '(lambda (x) (abs (- valeur x)) ) liste) ) (setq valeur_proche (- valeur (nth 0 (vl-sort listetempo '<)))) Éternel débutant... Mon site perso : Programmer dans AutoCAD
VDH-Bruno Posté(e) le 1 novembre 2015 Posté(e) le 1 novembre 2015 Bonsoir, Très rapidement une autre façon de faire et un prétexte pour venir vous faire un petit coucou, (defun proche (val l) (defun reduce (fun lst) (if (cdr lst) (reduce fun (cons ((eval fun) (car lst) (cadr lst)) (cddr lst))) (car lst) ) ) (reduce '(lambda (x y) (if (< (abs (- val x)) (abs (- val y))) x y ) ) l ) ) _$ (proche 1020 '(1040 110 109 95 212 99 1019)) 1019 Voir cette discussion pour plus d'explication sur le procédé http://cadxp.com/topic/34706-trier-une-liste-de-dates/page__view__findpost__p__188141 Bonne continuation à tousBruno 1 Apprendre => Prendre => Rendre
didier Posté(e) le 2 novembre 2015 Posté(e) le 2 novembre 2015 Coucou S'il te plaît, fais attention aux titres des messages : C'est une coïncidence mais deux messages sortent en même tempsL'un portant sur les comparaisons d'entiers mais intitulé : Comparaison de valeurs réellesEt l'autre : Comparaison de valeursCe dernier portant sur les réels ... Bel imbroglio... Amicalement 1 Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 8 novembre 2015 Auteur Posté(e) le 8 novembre 2015 Bonjour à tous et désolé de ne répondre que maintenant. Je vous remercie Didier et VDH-BRUNO pour vos réponses ! Je me rappelle que j'allais sur ce site, il y a maintenant deux ans car je devais faire un petit outil pour mon école. Aujourd'hui en revenant ça fait plaisir de voir que vous êtes toujours abonné à la chaine ! <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> J'ai vraiment perdu le peu je connaissais en AUTOLISP donc j'essaie de m'y remettre petit à petit, simplement par plaisir et envie. Didier : Ma question est : est ce qu'il existe une autre fonction que Vl-sort qui puisse faire le même travail sur des versions d'Autocad plus anciennes? Bruno : Honnêtement je penche un peu sur ton bout de code ainsi que la réponse élémentaire de notre fameux Gilles ! Je sèche un peu, mais c'est bon :) Je ne comprends pas le programme donc j'essaie de revoir avant toutes les petites sous fonctions qu'il y a à l'intérieur pour me réaménager le cerveau :unsure: J'essaie de faire un test et ma question comment utiliser une fonction dans une autre fonction, monde code d'essai : (defun c:multip(mavar) (* mavar mavar) ) (defun c:addi(multip val1) (setq val1 2) (setq ValeurMultiplie (addi(multip(val1)))) (setq result (+ ValeurMultiplie val1)) (princ result) ) A bientôt et merci encore ! 1
mateus Posté(e) le 8 novembre 2015 Auteur Posté(e) le 8 novembre 2015 Bonjour à tous et désolé de ne répondre que maintenant. Je vous remercie Didier et VDH-BRUNO pour vos réponses ! Je me rappelle que j'allais sur ce site, il y a maintenant deux ans car je devais faire un petit outil pour mon école. Aujourd'hui en revenant ça fait plaisir de voir que vous êtes toujours abonné à la chaine ! <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> J'ai vraiment perdu le peu je connaissais en AUTOLISP donc j'essaie de m'y remettre petit à petit, simplement par plaisir et envie. Didier : Ma question est : est ce qu'il existe une autre fonction que Vl-sort qui puisse faire le même travail sur des versions d'Autocad plus anciennes? Bruno : Honnêtement je penche un peu sur ton bout de code ainsi que la réponse élémentaire de notre fameux Gilles ! Je sèche un peu, mais c'est bon :) Je ne comprends pas le programme donc j'essaie de revoir avant toutes les petites sous fonctions qu'il y a à l'intérieur pour me réaménager le cerveau :unsure: J'essaie de faire un test et ma question comment utiliser une fonction dans une autre fonction, mon code d'essai : (defun c:multip(mavar) (* mavar mavar) ) (defun c:addi(multip val1) (setq val1 2) (setq ValeurMultiplie (addi(multip(val1)))) (setq result (+ ValeurMultiplie val1)) (princ result) ) A bientôt et merci encore ! 1
(gile) Posté(e) le 8 novembre 2015 Posté(e) le 8 novembre 2015 Salut, Ci-dessous, une fonction qui implémente un algorithme simple :pour un nombre donné et une liste de nombres (arguments), on cherche la plus petite différence entre ce nombre et chacun des termes de la liste. pseudo codearguments :input = le nombre dont on cherche le plus proche dans une listelst = la liste dans laquelle on cherche le nombre le plus procheprocédure :result = premier terme de lstdelta = valeur absolue de input - resultPour chaque n, terme suivant de la listesi valeur absolue de input - n est inférieur à deltaalors result = n et delta = valeur absolue de input - n (defun nearest (;; arguments input ;; le nombre dont on cherche le plus proche lst ;; la liste des nombres à comparer / ;; variables delta ;; la valeur absolue de la plus petite différence result ;; la nombre de la liste le plus proche du nombre en argument ) ;; initialisation des variables avec le premier terme de la liste (setq result (car lst) delta (abs (- input result)) ) ;; pour chaque terme suivant dans la liste... (foreach n (cdr lst) ;; ...si la différence entre ce terme et le nombre en argument est inférieure à delta... (if (< (abs (- input n)) delta) ;; ... on affecte à result ce terme et à delta la différence (setq result n delta (abs (- input n)) ) ) ) 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
mateus Posté(e) le 8 novembre 2015 Auteur Posté(e) le 8 novembre 2015 Merci Gilles c'est exactement ce qu'il me fallait, en plus très claire à la compréhension ! parfait. Merci pour les commentaires qui m'ont bien été utiles. J'ai une petite question comment créer une liste qui serait formée depuis des variables exemple : (setq mavar1 50.00 mavar2 70.00 lst'(mavar1 mavar2)) J'essai de faire celà sur un bout de code et une erreur apparaît du type "bad function 50.00" Merci et bonne soirée. Mathieu
Patrick_35 Posté(e) le 9 novembre 2015 Posté(e) le 9 novembre 2015 Salut (setq mavar1 50.00 mavar2 70.00 lst (mapcar 'eval '(mavar1 mavar2)) ) @+ 1 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mateus Posté(e) le 9 novembre 2015 Auteur Posté(e) le 9 novembre 2015 Bonsoir Patrick et merci pour ta réponse :) Je clos le sujet. Bonne soirée ! 1
VDH-Bruno Posté(e) le 10 novembre 2015 Posté(e) le 10 novembre 2015 (modifié) Salut (setq mavar1 50.00 mavar2 70.00 lst (mapcar 'eval '(mavar1 mavar2)) ) @+ Slt, Pour le jeu ma variante.._$ (vl-list* mavar1 mavar2 nil)(50.0 70.0) EditOupss mal lu désolé, ma réponse est hors sujet, décidément ça va de mal en pis… Modifié le 10 novembre 2015 par VDH-Bruno Apprendre => Prendre => Rendre
Patrick_35 Posté(e) le 10 novembre 2015 Posté(e) le 10 novembre 2015 Slt, Pour le jeu ma variante.._$ (vl-list* mavar1 mavar2 nil)(50.0 70.0) EditOupss mal lu désolé, ma réponse est hors sujet, décidément ça va de mal en pis…Salut Un coup de fatigue ;)Vivement les vacances :D @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 10 novembre 2015 Posté(e) le 10 novembre 2015 Salut Un coup de fatigue ;)Vivement les vacances :D @+Merci Patrick_35 j'aurais aimé mais non, c'est disons un peu compliqué pour moi professionnellement en ce moment...A+ Apprendre => Prendre => Rendre
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant