-
Compteur de contenus
363 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par fiesta13310
-
super, merci beaucoup!!
-
Bonsoir à tous! J'ai une question sur les changements de repères. Attention, on va le faire mathématique ce soir... :) soit le repère général d'autocad Oxy, et soit un nouveau repère O'x'y' dans le repère Oxy avec x parallèle à x' et y parallèle à y'. soit un point P1 de coordonné (a;B) dans le repère O'x'y'. Quels sont ses coordonnés dans le repère Oxy? autrement dit, en language lisp, j'ai sauvegardé les coordonnées de mon point P1 dans un repère que j'ai créé, et je voudrais récupérer les coordonnées de ce point dans le "scu général" d'autocad. comment faire?? Merci Merci...
-
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
bon...je pense avoir trouvé...mais il est vrai que j'ai toujours un problème avec les précisions, mais je commence a bien tout comprendre, je pense qu'il fallait juste un petit rappel... Merci -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
ben en fait si, j'ai tenu compte de notre discussion précédemment car grace a tes conseils, j'ai pu corriger pleins de problèmes, et créer d'autres fonctions. Mais je suis certaine que la distance fait 12.1, car j'ai créé une ligne de distance 12.1, c'est moi qui l'ai faite cette ligne, et qui ai rentré sa longueur... c'est pour ca que je ne comprends pas. -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
ok merci, je vais essayer ca. Heu... un truc qui n'a rien à voir... Dans mon programme, j'ai écris : (setq long (getdist "\n donner la longueur du voile :")) (setq L1 (+ long 0.4)) (setq N1 (/ L1 2.50)) (setq reste (rem L1 2.50)) Pour traduire ceci: long : soit j'entre la valeur numérique au clavier, soit je sélectionne 2 points qui définira ma longueur L1 : à cette longueur j'y ajoute 0.4m N1 : je divise ma nouvelle longueur L1 par 2.50m reste : il me renvoit le reste de la division si elle existe. Un problème s'impose pour cet exemple : Soit: long = 12.1 Alors: L1= 12.1+0.4 = 12.5 N1 = 12.5/2.5 = 5 Et reste = 0 Quand j'entre au clavier "long" = 12.1, il me renvoit ces valeurs ci-dessus. Seulement, quand je sélectionne 2 points de distance 12.1, il me renvoit toute ces valeurs sauf "reste" où "reste" = 2.5 On dirait qu'il me dit que dans "12.5", il y a "4x2.5" et qu'il reste "2.5". Mais pourtant, pour la division de "12.5/2.5" il me renvoit bien "5" . Donc il traduit bien que dans "12.5", il y a "5x2.5" mais qu'il reste quand même 2.5... c'est incohérent! mais je ne sais pas pourquoi... une idée? -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonsoir!! J'ai encore une question à ce sujet... Une fois que j'ai insérer mon bloc, que j'ai fais un réseau et un miroir, je dispose donc d'un ensemble de bloc. Si j'ai besoin de copier ou de déplacer cet ensemble de bloc, comment je peux faire pour tous les sélectionner? Je crois avoir compris qu'il va falloir que j'utilise ssget...mais après plusieurs tentatives, je sèche... Je sais qu'on peut faire une sélection par nom de bloc, mais je ne peux pas l'utiliser car d'autre bloc du même nom font partis de mon plan, et je ne dois surtout pas les toucher. merci d'avance... -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
oui c'est bon merci, tout fonctionne parfaitement bien. C'est cool de m'avoir aidé! merci!! Cordialement! -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
ben j'ai fais comme ca moi : (defun c:test9 () (command "scu" "") (setq ACC (getvar "osmode")); désactivation de l'accroch objet (setvar "osmode" 0) (setq long (getdist "\n donner la longueur du voile :" )) (setq larg (getdist "\n donner la largeur du voile :" )) (setvar "OSMODE" ACC) (setq pt1 (getpoint "\n spécifier le point d'insertion : ")) (setq rep (getstring "\n voulez-vous inserer votre banche à gauche? (o/n) : ")) (setq ang0 (getangle pt1 "\n angle d'orientation des banches /Ox :")) (setvar "osmode" 0) (setq nbbanche (rtos (fix (/ long 2.5)) 2 0)) (setq demilarg (/ larg -2)) (setq p1 (list 0 demilarg)) (setq p2 (list 1 demilarg)) (setvar "cmdecho" 0) (if (= rep "o") (command "scu" "3" pt1 (polar pt1 ang0 1)(polar pt1 (+ ang0 (/ pi 2)) 1) "inserer" "B250" "0" "1" "1" "0" "" (setq e (entlast))""; récupère le nom de la dernière entité insérer : soit le bloc (setq ss (ssadd)); Crée un jeu de sélection vide (ssadd e ss); place l'entité dans le jeu de sélection "reseau" "d" "" "rec" "1" nbbanche "2.50" "" (while (setq e (entnext e)) (ssadd e ss) ) "miroir" ss "" p1 p2 "n" ) ;"miroir" (setq NJ (ssget "\n choisir un ensemble d'objet :")) "" (setq mil1 (getpoint "\n 1er point :" )) (setq mil1 (getpoint "\n 2ème point :" )) "n" ) (command "inserer" "B250bis" pt1 "1" "0") ) (command "scu" "g") (setvar "OSMODE" ACC) (setq reponse (strcat "la longueur est de " (rtos long 2 4) " m et la largeur de " (rtos larg 2 4) " m" )) ) -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
salut, Plus personne ne veut me répondre? :) je répète : quand j'écris ceci dans mon programme, (setq e (entlast)) (setq ss (ssadd)) (ssadd e ss) Pour passer de l'un à l'autre il faut que j'appuis sur entrée à chaque fois. Le passage ne se fait pas automatiquement. Pourquoi? Merci d'avance -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
bonjour! Encore une question : ca marche, mais à haque fois je dois faire "entrée" au clavier pour exécuter les commandes. Comment faire pour éviter ceci? Merci -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
génial!! Ca a marché, merci beaucoup!! :D -
Quelle fonction utiliser pour des objets?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Justement, je ne veux pas l'équivalent de "d" puisque "d" c'est que le dernier objet. Moi je veux tous les objets qui ont été copié en réseau. -
Bonjour à tous! Dans ma programmation, j'insère des commandes dans cet ordre là : commande "inserer" commande "reseau" commande "miroir" Tout d'abord, j'insère un bloc, ensuite je le copie en réseau, puis pour finir, je voudrai faire un miroir de toute ces copies. Voici le passage en question : (command "scu" "3" pt1 (polar pt1 ang0 1)(polar pt1 (+ ang0 (/ pi 2)) 1) "inserer" "B250" "0" "1" "1" "0" "reseau" "d" "" "rec" "1" nbbanche "2.50" "miroir" "d" "" (setq mil1 (getpoint "\n 1er point :" )) (setq mil1 (getpoint "\n 2ème point :" )) "n" ) Sauf qu'en faisant ceci, le miroir s'exécute uniquement pour le dernier bloc et c'est normal car j'ai écris "miroir" "d" (comme dernier). Du coup, je voulais remplacer "d" par une fonction (setq objet (....)). Et justement, quelle est cette fonction qui sert à sélectionner des objets? Je sais que : pour les angles = getangle pour les distances = getdist pour les points = getpoint ... et pour les objets??????? Merci d'avance, bonne fin de journée à tous!
-
pas bête...je vais essayer de faire comme ca... Parce qu'après j'ai un réseaux puis un miroir à faire suivant une direction
-
salut, Ben le truc c'est qu'un coup j'insère mon bloc par la droite, et un coup par la gauche...mais je vais essayer de trouver un autre moyenx tampis... merci quand même!
-
Bonjour Olivier Merci d'avoir répondu si vite Justement, ce qui me chagrine, c'est que je ne peux pas choisir mon point de base étant donné que je ne vois pas mon bloc à l'insertion.Je m'explique... Supposons que le bloc soit un carré par exemple, et que son point d'insertion soit le point inférieur gauche. Imaginons que je veuille l'inserer par le point inférieur droit. Si dans ma barre de commande je tape "inserer", je choisis donc mon bloc carré, et ensuite il me demande de "spécifier un point d'insertion" ou "[Pointdebase...]... donc j'ai mon bloc carré acroché au curseur par son coin inférieur gauche, je tape "P", et là mon bloc se fige dans l'espage objet, et je peux cliquer sur le coin inférieur droit pour définir son nouveau point de base...et je le bouge non plus par son coin inférieur gauche mais par son coin inférieur droit...et ceci est possible parce que mon bloc est présent dans l'espace papier. Alors qu'en programmation, si j'écris ceci (command "inserer" "bloc" "P" pause pause "1" "1" "0") Il me demande de "choisir le point de base", mais je peux pas cliquer sur le coin vu que je vois pas le bloc... Je sais pas si tu comprends tout, mais essaie tu verras ce que je veux dire...
-
Bonjour à tous! Je suis en train de programmer une insertion de bloc, mais le point de base n'est pas toujours le bon. si je tape "inserer" dans la barre de commande, je choisis mon bloc, et ensuite on me demande de "spécifier un point d'insertion" ou "[Pointdebase...]. Donc si je tape "P" au clavier, je peut redéfinir le point de base de mon bloc, et ceci est possible car mon bloc apparait, il est visible à l'écran ... Mais dans ma programmation, quand j'écris : (command "inserer" "bloc" "p"... on me demande bien de redéfinir mon point de base, mais mon bloc n'est pas visible...donc je peux pas... Comment peut-on programmer l'insertion d'un bloc en pouvant définir le point de base au cours de la programmation? Merci d'avance
-
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Salut! Si je ne suis pas arrivée à me faire comprendre, dites le moi parce que je rame....j'ai besoin d'aide... Merci! Cordialement, Lucie -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour! je replonge dans mon fameux programme et je me pose une grosse question... Tout d'abord, voici le programme en question ; === programme principal (defun C:banche1 () ; Pour commencer le programme, il faut d'abord renseigner le nombre de banche par l'intérmédiaire d'une boite de dialogue. ; Cette boite dcl lancera un programme en fonction du choix. ; ; 1) Lancement de la boite de dialogue : (setq dcl_id (load_dialog "banche1dcl.DCL")) ;charge la boite de dialogue (if (not (new_dialog "banche1" dcl_id) ;si il ne la trouve pas il sort "exit" ) ; fin du not (exit) ) ; fin du if (action_tile "Na" "(setq Na1 $value)") (action_tile "Nb" "(setq Nb1 $value)") (action_tile "Nc" "(setq Nc1 $value)") (action_tile "Nd" "(setq Nd1 $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq ok (start_dialog)) ;test pour savoir si tout a ete entré (unload_dialog dcl_id) ;(if (and (= ok 1) (/= Na nil) (/= Nb nil) (/= Nc nil) (/= Nd nil)) ; si toutes les données sont rentrées (longvoile); on lance la fonction longvoile ) ; fin du programme (c: banche1) (princ) ; ; Programme pour voile linéaire sans angles ; Fichier Voiles linéaires sans angles.LSP ;Programme donnant la somme des longueurs des voiles (defun longvoile() ;(vl-load-com) ; LI : voile sélectionné ; L1 : Longueur totale des voiles ; P1 : origine du voile ; P2 : extrémité du voile ; A : nombre d'arrêt (setq L1 0) ; on met le compteur à 0 (while (setq LI (entsel "\n Sélectionner les voiles du jour en cours" )) (setq NomEntité (car LI)) (setq LISTE (entget NomEntité)) (setq P1 (cdr (assoc 10 liste))) (setq P2 (cdr (assoc 11 liste))) (setq LONG (distance P1 P2)) (setq L1 (round (+ LONG (* A 0.2)) 0.01)) ; on additione la longueur de tous les voiles sélectionés ) ; fin de while (defun round (num prec) (if (zerop (setq prec (abs prec))) num (* prec (fix ((if (minusp num) - +) (/ num prec) 0.5))) ) ) (setq A (getint "\n Combien y'a t-il d'arrêt?")) (setq N1 (round (/ L1 2.50) 0.01)) ; nombre de banche nécessaire (setq N250 (atoi Na1)) (setq N125 (atoi Nb1)) (setq N62.5 (atoi Nc1)) (setq N50 (atoi Nd1)) (command dimzin 0); c'est pour les arrondi (if (and (< N1 N250) (= A 0)) ; si j'ai assez de banche et que je n'ai pas d'arrêts (if (< L1 2.50) ; et si la longueur de mon voile et plus petit que 2.50m (setq reponse (strcat "On passe au test suivant il faut une banche plus petite" )); alors il faut une banche plus petite que 2.50m (setq reponse (strcat "on met " (rtos N1 2 0) " banche de 250 en place et reste à coffrer ce qui manque" )); sinon on met N1 banche de 250 et faire un autre programmee"))) ); fin du 1er if (if (< L1 2.50) (setq reponse (strcat "autre test et mettre une banche plus petite" )); alors il faut une banche plus petite que 2.50m (if (= 0 (- N1 (atof (rtos N1 2 0)))); si N1 est un entier (setq reponse (strcat (rtos N1 2 0) " banches de 250+ 1 banche de 62.5")) ; Je met une banche de 250 + 1 banche de 62.5 (setq reponse (strcat (rtos N1 2 0) " banches de 250 + 1 de 250")) ; si N1 est un réel, je prend N1 entier et je lui rajoute une 2.50 ); fin du 3ème if ); fin du 2ème if ); fin du if général ); fin du programme (longvoile) Ainsi que sa boite dcl : banche1:dialog {label="Renseigner les banches"; :row { :boxed_column {label="renseigner le nombre de banche"; :edit_box {label="&Nombre de banche 250:";/*edit_width=6;fixed_width=true;*/key=Na;} :edit_box {label="&Nombre de banche 125:";/*edit_width=6;fixed_width=true;*/key=Nb;} :edit_box {label="&Nombre de banche 62.5:";/*edit_width=6;fixed_width=true;*/key=Nc;} :edit_box {label="&Nombre de banche 50:";/*edit_width=6;fixed_width=true;*/key=Nd;} } } :row {ok_cancel;} :row {errtile;} } dans mon programme, j'ai x paramètres qui rentrent en compte : Le nombre de banches que je dispose: N250, N125, N62.5, N50 La longueur de mon voile: L1 La longueur de ma banche : 2.50m, 1.25m, 0.625m et 0.5m. Pour tester mon programme (longvoile) et apprendre comment celui-ci réfléchit, j'ai rentré au départ : (setq N1 (round (/ L1 2.50) 0.01)) ; nombre de banche nécessaire Autrement dit, je divise L1 par le nombre 2.50, ce qui me renvoit N1. ceci fonctionne bien évidemment que pour mes banches de 2.50m. Ensuite, dans ma fonction "if", lorsque j'écris : (setq reponse (strcat "On passe au test suivant il faut une banche plus petite" )); alors il faut une banche plus petite que 2.50m cela signifie qu'il faut refaire exactement le même test que précédemment, mais au lieu de faire : L1/2.50, il faut faire L1/1.25 et au lieu de faire : (if (and (< N1 N250) (= A 0) il faut faire (if (and (< N1 N125) (= A 0)... et ainsi de suite... inversement, si j'ai épuisée mes banches en 2.50, et qu'il me reste encore du voile à coffrer, il faut que je refasse tourner mon programme avec les autres banches en 1.25, puis quand il y en a plus, en 0.625, puis en 0.50...ect ect... en fait ma question est la suivante : n'y a t-il pas un moyen de programmer ce programme en fonction de ma longueur de voile, de mon nombre de banches sans que j'ai besoin de le réécrire plusieur fois? -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
ha oui d'accord, je comprend mieux. J'ai réussi à faire fonctionner la fonction round, je l'avais mal placée dans mon programme, ce qui fait qu'il ne faisait pas appel à cette fonction. Dans VBA, l'emplacement d'une fonction n'a pas d'importance. Par exemple on peut créer un programme à part, (par exemple le programme "pi" qui renvoit à la valeur exact de 3.14), et quand on utilise un autre programme et qu'on écrit "pi", il fait appel à la fonction "pi" enregister précédemment. Et apparemment ce n'est pas le cas dans AUTOLISP... Si je précise ceci, c'est parce que dans mon projet actuel, quand je dis "on passe au test suivant" ou bien "on doit mettre une banche plus petite" ça sous entend qu'il faut faire tourner un autre programme. il va donc falloir que je fasse appel à un autre programme... son emplacement au sein de mon projet va donc avoir beaucoup d'importance? -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
bon, cela ne marche pas. J'ai utilisé ces valeurs : N250 = 6 L1 = 12.3 A = 1 par calcul j'ai : L1= 12.3+0.2 = 12.5 N1= 12.5/2.5 = 5.0 Donc ma réponse devrait être 250+62.5, et j'obtiens 250+250 Si je met un espion sur N1, ça me renvoie : N1=5.0; jusque là tout va bien si je met un espion sur (fix N1), ça me renvoie : (fix N1)= 4....ben pourquoi?? donc forcément ca ne fait pas 0 donc "action si faux" alors que je devrais avoir "action si vrai" -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour, Désolé de ne pas avoir répondu avant mais le concours de l'entreprise était prioritaire. me voilà à pour 2 semaines, et je suis en projet, donc j'ai toute la matinée pour m'en occupé. Merci de m'offrir un peu de ton temps pour mener à bien mon programme. La fonction round fonctionnait quand j'étais à l'entreprise, mais ce matin, elle ne fonctionne plus et je ne sais pas pourquoi. je vais essayer ce que tu m'as indiqué dans ton dernier message.Bien entendu, je te tiens au courant. je te souhaite une exéllente journée. Cordialement, Lucie. -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour! Je l'ai déjà utilisé en cours la fonction fix. Mais à vrai dire, je n'ai pas compris pourquoi on l'utilisait... Tout d'abord, j'ai essayé le programme sans passer par la boite dcl. voici mon programme : (defun c:test4 () (setq LI (entsel "\n Sélectionner les voiles du jour en cours" )) (setq NomEntité (car LI)) (setq LISTE (entget NomEntité)) (setq P1 (cdr (assoc 10 liste))) (setq P2 (cdr (assoc 11 liste))) (setq L1 (distance P1 P2)) (setq A (getint "\n Combien y'a t-il d'arrêt?")) (setq N1 (/ L1 2.50)) ; nombre de banche nécessaire (setq N250 (getint "\n Combien y'a t-il de 250")); nombre de banche dispo '; (setq N11 (rtos N1 2 0))' (command dimzin 0) '; (cond ; ( (= A 0) (setq L1 L1) ) ; ( (= A 1) (setq L1 (+ L1 0.20)) ) ; ( (= A 2) (setq L1 (+ L1 0.40)) ) ; ); Fin cond' (if (and (< N1 N250) (= A 0)) ; si j.ai assez de banche et que je n.ai pas d.arrêt (if (< L1 2.50) ; et si la longueur de mon voile et plus petit que 2.50m (setq reponse (strcat "On passe au test suivant il faut une banche plus petite" )); alors il faut une banche plus petite que 2.50m (setq reponse (strcat "on met " (rtos (atoi (rtos N1)) 2 0) " banche de 250 en place et reste à coffrer ce qui manque" )); sinon on met une banche de 250 et faire un autre programme ); fin du 1er if (if (< L1 2.50) (setq reponse (strcat "autre test et mettre une banche plus petite" )); alors il faut une banche plus petite que 2.50m (if (= 0 (- N1 (atof (rtos N1 2 0)))); si N1 est un enier (setq reponse (strcat (rtos N1 2 0) " banches de 250+ 1 banche de 62.5")) ; Je met une banche de 250 + 1 banche de 62.5 (setq reponse (strcat (rtos (atoi (rtos N1)) 2 0) " banches de 250 + 1 de 250")) ; si N1 est un réel, je prend N1 entier et je lui rajoute une 2.50 ); fin du 3ème if ); fin du 2ème if ); fin du if ); fin du programme Ceci fonctionne très bien sans la fonction COND , enfin il me semble... Pour le tester j'ai pris ces valeurs là : Essai n°1 : N250=6 L1=2 A=0 tu obtiens : "On passe au test suivant il faut une banche plus petite" Essai n°2 : N250=6 L1=2 A=1 (ou 2..) tu obtiens : "autre test et mettre une banche plus petite" Essai n°3 : N250=6 L1=13 A=0 tu obtiens : "on met...banche de 250 en place et reste à coffrer ce qui manque" Essai n°4 : N250=6 L1=13 A=1 (ou 2...) tu obtiens : " ... banches de 250 + 1 de 250" (Parce que N1 fait 5.2, c'est donc un réel) Essai n°5 : N250=6 L1=12.5 A=1 (ou 2...) tu obtiens : "... banches de 250+ 1 banche de 62.5" ¨(Parce que N1 fait 5 c'est donc un entier) Lorsque je met la fonction cond, ca ne fonctionne plus pour l'essai n°5. Bien sur, j'ai changé les valeurs de cet essai. L'essai n°5 est devenu : Essai n°5 bis : N250=6 L1=12.3 A=1 tu obtiens : "... banches de 250+ 1 de 250" alors que tu devrais obtenir : "... banches de 250+ 1 banche de 62.5" En effet, dans ma condition COND, il est bien écrit que si A=1, L1= L1+0.20 d'où : L1 = 12.3+0.20 = 12.5 Au final, l'essai n°5 est identique à l'essai n°5 bis , et pourtant il ne renvoie pas la même chose. Et c'est la que dans mon dernier if (if (= 0 (- N1 (atof (rtos N1 2 0)))) je n'obtiens pas 0 mais cette fameuse valeur -1.86517e-0.14 Amicalement, -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour! En fait, je me prends toujours la tête sur mes réel et mes entiers. Je pensais que rtos arrondissait en supprimant tous les autres chiffres après la virgule. Par exemple si j'ai 3.235489 je pensais qu'en utilisant rtos j'obtiendrai 3.230000 comme j'ai dis précédemment : Si N1 est un entier Alors "on met N1 banche de 250 + 1 banche de 62.5" ; Soit je trouve N1= à un entier et je met N1 banche de 250 + juste une banche de 62.5 Sinon : (N1+1) "banches de 250" ; soit je trouve N1= à un réel alors je prend N1 entier et je lui rajoute une banche de 2.50 Et voici comment moi j'ai codé ça : (if (= 0 (- N1 (atof (rtos N1 2 2)))); si N1 est un entier (setq reponse (strcat (rtos N1 2 0) " banches de 250+ 1 banche de 62.5")) ; Je met une banche de 250 + 1 banche de 62.5 (setq reponse (strcat (rtos N1 2 0) " banches de 250 + 1 de 250")) ; si N1 est un réel, je prend N1 entier et je lui rajoute une 2.50 Autrement dit: Si N1 est un entier : (if (= 0 (- N1 (atof (rtos N1 2 2)))) ex : si N1=5; 5-5=0; c'est vérifié (action si vrai...) Si N1 est un réel : Sinon, (action si faux...) ex : si N1=5.2; 5-5.2=-0.2 et ce n'est pas vérifié A vrai dire tout fonctionnait très bien jusqu'à que je rajoute ceci : (cond ((= A 0)(setq L1 L1)) ((= A 1)(setq L1 (+ L1 0.20))) ((= A 2)(setq L1 (+ L1 0.40))) ); Fin cond Et je m'en suis rendu compte en prenant pour exemple ceci : Longueur du voile L1= 12.30m Nombre d'arrêt A=1 donc A=1, alors L1=12.30+0.20=12.50 12.50/2.50=5 donc N1=5 d'après mon programme, j'aurai du avoir la condition si vrai, et ce n'est pas le cas... -
comment faire une fonction si?
fiesta13310 a répondu à un(e) sujet de fiesta13310 dans Débuter en LISP
Bonjour. J'ai quasiment tout réussi, mais un problème se pose : si j'ai N1 = 5.0 on est d'accord que 5-5 = 0. donc N1-N1=0 en lisp : (- N1 N1) = 0.... c'est juste? que je fasse (- N1 N1) ou que je fasse (- N1 (atof (rtos N1 2 0)) ca fait toujours 0 non? Enfin en tout cas, dans ma barre de commande ca marche... mais en programmation, quand je met un espion ca me renvoi ceci : N1 = 5.0 (atof (rtos N1 2 0)) = 5.0 (- N1 (atof (rtos N1 2 0))) = -1.86517e-0.14 on voit bien que les deux premières lignes font 5 et la différence de 5 par 5 fait pas 0... pourquoi?
