FastFiber

Getal laten afronden

Gestart door Tom, vr 04 03 2005, 10:52:51

Vorige topic - Volgende topic

HofCAD

Citaat van: Kenny HBeste HofCAD,

Uw programma's zijn zoals altijd goed  :vreegoe: , maar bij vorige progjes krijg ik volgende melding.

CiteerCommand: round50
; error: too few arguments

Command:
Command: round25
; error: too few arguments

Command:

Ik denk dat het probleem ligt bij:

(defun Signof   (num)

Beste Kenny H,

De twee programma's die je hebt geschreven, zijn niet geschikt om
met negatieve getallen te werken. :o  :shock:
Round50 geeft bij -70.8 het antwoord van 71
en round25 geeft bij -70.8 het antwoord nil.


De programma's round50 en round25 die ik heb geprogrammeerd,
zijn geprogrameerd om in andere programma's te gebruiken.
Afronden via de commandoregel vind ik onzinnig :twisted: , omdat ik vroeger
een 10 voor hoofdrekenen had 8) ; ondanks mijn blonde haren. :oops:
Men moet ze dus bijv. als volgt gebruiken:

(setq x 80 x (round50 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80 x (round25 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.0 x (round50 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.0 x (round25 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.2499 x (round50 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.2499 x (round25 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.25 x (round50 x)) ;zet in de variabele x 80.0 en geeft 80.0
(setq x 80.25 x (round25 x)) ;zet in de variabele x 80.5 en geeft 80.5
(setq x 80.5 x (round50 x)) ;zet in de variabele x 81.0 en geeft 81.0
(setq x 80.5 x (round25 x)) ;zet in de variabele x 80.5 en geeft 80.5
(setq x 80.7499 x (round50 x)) ;zet in de variabele x 81.0 en geeft 81.0
(setq x 80.7499 x (round25 x)) ;zet in de variabele x 80.5 en geeft 80.5
(setq x 80.75 x (round50 x)) ;zet in de variabele x 81.0 en geeft 81.0
(setq x 80.75 x (round25 x)) ;zet in de variabele x 81.0 en geeft 81.0

en

(print pi); drukt de waarde pi (= 3.141592653589793143) als 3.14159 af
(setq pi_benaderd1 (round50 pi) ) ;zet in de variabele pi_benaderd1 3.0 en geeft 3.0
(setq pi_benaderd2 (/ (round50 (* pi 10)) 10)) ;zet in de variabele pi_benaderd2 3.1 en geeft 3.1
(setq pi_benaderd3 (/ (round50 (* pi 100)) 100)) ;zet in de variabele pi_benaderd3 3.14 en geeft 3.14
(setq pi_benaderd4 (/ (round50 (* pi 1000)) 1000)) ;zet in de variabele pi_benaderd4 3.142 en geeft 3.142
(setq pi_benaderd5 (/ (round50 (* pi 10000)) 10000)) ;zet in de variabele pi_benaderd4 3.1416 en geeft 3.1416
(setq pi_benaderd6 (round25 pi)) ;zet in de variabele pi_benaderd6 3.0 en geeft 3.0
(setq pi_benaderd7 (/ (round25 (* pi 10)) 10)) ;zet in de variabele pi_benaderd7 3.15 en geeft 3.15
(setq pi_benaderd8 (/ (round25 (* pi 100)) 100)) ;zet in de variabele pi_benaderd8 3.14 en geeft 3.14
(setq pi_benaderd9 (/ (round25 (* pi 1000)) 1000)) ;zet in de variabele pi_benaderd9 3.1415 en geeft 3.1415
(setq pi_benaderd10 (/ (round25 (* pi 10000)) 10000)) ;zet in de variabele pi_benaderd10 3.1416 en geeft 3.1416

Voor het uittesten zou ik deze twee hulpprogramma's hebben geschreven.

(defun c:test1()
(setq maat (getdist "\nGeef de maat op:"))
(princ "\nDe afgeronde maat volgens round50 is:\n")
(print (round50 maat))
(princ)
)
(defun c:test2()
(setq maat (getdist "\nGeef de maat op:"))
(princ "\nDe afgeronde maat volgens round25 is:\n")
(print (round25 maat))
(princ)
)


Ondanks dat ze zijn totaal niet bedoeld  voor commandoregel invoer, kunnen ze door hun modulaire opbouw
toch divers in gezet worden.
8)

Groetjes HofCAD CSI

PS Ik heb overigens eerder niet duidelijk verteld :oops:  dat, om round25 te
kunnen gebruiken men zowel round25 en round50 dient te laden;
omdat round25 intern round50 gebruikt.
ACADcadabra

WebRacer

kalm blijven jongens... :P  :P  :P
?

Kenny H

Beste HofCAD,

Ik heb mijn programma een klein beetje aangepast.
Ik laat nu ook toe om negatieve getallen te verwerken. :P
Ik heb enkel de 0.5 afronding gebruikt. Dus alles wat groter en gelijk is dan 0.5 wordt naar boven afgerond. Alles wat kleiner is dan 0.5 naar beneden afgerond.

Wat in vorige post staat van die negatieve getallen klopt maar de waarde is niet nil. Hij zegd dat wel in Autocad maar als je naar num toevoegd in watch dan staat daar de afronding in. Toen nog positief. Nu zowel posistief als negatief.

Ik heb via princ de waarde laten verdwijnen die verschijnt nadat het progje is doorlopen. Om verwarring te voorkomen aangezien hij soms nil geeft als waarde in cad, terwijl dit niet zo is via watch.

Citeer(defun c:afronden50 ()
 (setq maat (getdist "\nGeef de maat op:")); dient om te testen
 ;;; (setq maat ( weet ik veel waar/hoe jullie dit gaan gebruiken :-) )
 ;;; Ik heb enkel die van 0.5 gewijzigd. Dit is dan ook meer voorkomend dan de 0.25 afronding.
 ;;; Negatieve getallen zijn nu ook mogelijk.
 (setq absmaat (abs maat))
 (if (>= (- absmaat (fix absmaat)) 0.5)
   (setq num (fix (1+ absmaat)))
   (setq num (fix absmaat))
 )
 (if (< maat 0)
   (setq num (* -1 num)))
 (princ)
)

Ps Ik ben nog maar een beginner op vlisp en vba gebied. Ben dan ook nog maar 20 jaar. Dus is het best logisch dat jullie ervaren programeurs andere ideëen hebben om zoiets uit te voeren.  :wink:
Zo leer ik hier dus nog steeds bij. 8)

Keep up the good work
8) Volvo 4 Life 8)

HofCAD

Beste LISP-onderzoekers,

Als amateur Cad Scene Investigator is men natuurlijk opzoek
naar alternatieve oplossingen. 8)
Van de geometrische calculator CAL van AutoCAD kan men
de rekenfuncties ook gebruiken in AutoLISP.
Men dient hiervoor wel wel eerst de module te laden
waarin deze gedefinieerd zijn.
Voor AutoCAD release 14 was dit geomcal.exe, en daarna
is het geomcal.arx geworden.
Deze kan men respectievelijk laden met (xload "geomcal")
en (arxload "geomcal").

Zonder de geometrische calculator CAL te gebruiken kan men
een afrondingsprocedure als volgt schrijven: 8)


(defun round50fix (x / numtek Signof)
 ;; Signof - returns -1 or 1 for sign of number
   (defun Signof (num) (if (minusp num) -1 1))
   (setq numtek (Signof x) x (abs x))  
 (if (>= (- x (fix x)) 0.5)  
   (setq x (fix (1+ x)))  
   (setq x (fix x))
 )
(setq x (* numtek x))
)
;;
;;voorbeeld (setq a (round50fix pi)) zet in a 3 en geeft 3
;;voorbeeld (setq a (round50fix (- pi))) zet in a -3 en geeft -3
;;

Met het gebruik van de geometrische calculator CAL kan men
een afrondingsprocedure als volgt schrijven: 8)


(defun $geomcal()
(if (null cal)
(if (> (atoi (substr (getvar "ACADVER") 1 2)) 13)
(arxload "geomcal") (xload "geomcal")))
)
(defun round50fix_CAL(x)
($geomcal)
(setq x (c:cal "ROUND (x)"))
)
;;
;;voorbeeld (setq a (round50fix_CAL pi)) zet in a 3 en geeft 3
;;voorbeeld (setq a (round50fix_CAL (- pi))) zet in a -3 en geeft -3
;;

Het is aan de lezer van dit onderzoeksverslag om zijn eigen
conclusies te trekken, en bij toepassing de procedures zorgvuldig
te controleren. :)
Ik ben namelijk blond en op zeer hoge leeftijd, waardoor
fouten eerder gewoonte dan uitzondering zijn. :oops:
Ongezouten kritiek is dus zeer welkom, want daar leert men van
en dat houd mijn scherp van geest. :wink:

Groetjes HofCAD
CSI.

PS1 De onderzoeker WebRacer heeft ook een bijdrage in mijn onderzoek
geleverd op: :D
http://www.cadsite.be/forum/viewtopic.php?t=687
Dat de AutoCAD variabele DimZIN een invloed heeft op RTOS, was
ik namelijk totaal vergeten. :oops:
In het boek 'Het AutoLISP handboek' van Leo van der Geest en van
Ad den Otter uit 1990 met ISBN 9067891509 staat dit overigens al
beschreven.  8)

PS2 Om verder onderzoek aan te moedigen, heb ik onderstaande
bibliotheek met subprocedures geschreven. 8)
In het eerste deel zijn de subprocedures geschreven zonder het
het gebruik van de geometrische calculator CAL en in het tweede
deel zijn dezelfde subprocedures geschreven met CAL.
Algemeen is het namelijk belangrijk om een programma modulair met
subprocedures op te zetten, waarvoor men dan goed moet weten hoe
elke subprocedure precies werkt en dat vooral bij speciale waarden.
Alleen dan kan men bepalen of men buiten de subprocedure extra
voorwaarden moet schrijven voor het afvangen van fouten.
Als voorbeeld: wat doet een subprocedure die de tangens berekent
bij een hoek van 90, 180 en 270 graden.  :roll:  
Zie onder de voorbeelden bij tan (x), tand (x), tan_CAL(x) en tand_CAL(x). 8)
De uitkomsten hiervan zijn niet altijd gelijk aan wat men verwacht! :(
Naast de wiskunde en wijze van programeren, kan ook de eindige
nauwkeurigheid hier een oorzaak van zijn. 8)
Men kan dan besluiten om de subprocedure aan te passen, of buiten
de subprocedure er mee rekening te houden door voorwaarden op te nemen.
Hierbij wens ik U veel plezier bij het onderzoek toe.


;;;;;******************************************
;;;;;Ter vergelijking een biblioteek zonder CAL
;;;;;******************************************

(defun round50fix (x / numtek Signof);afronding tot een geheel getal
 ;; Signof - returns -1 or 1 for sign of number
   (defun Signof (x) (if (minusp x) -1 1))
   (setq numtek (Signof x) x (abs x))  
 (if (>= (- x (fix x)) 0.5)  
   (setq x (fix (1+ x)))  
   (setq x (fix x))
 )
(setq x (* numtek x))
)
;;
;;voorbeeld (setq a (round50fix pi)) zet in a 3 en geeft 3
;;voorbeeld (setq a (round50fix (- pi))) zet in a -3 en geeft -3
;;
(defun round50 (x / numtek Signof);afronding tot een geheel reeel getal
 ;; Signof - returns -1 or 1 for sign of number
   (defun Signof (x) (if (minusp x) -1 1))
   (setq numtek (Signof x) x (abs x))  
 (if (>= (- x (fix x)) 0.5)  
   (setq x (fix (1+ x)))  
   (setq x (fix x))
 )
(setq x (* numtek (float x)))
)
;;
;;voorbeeld (setq a (round50 pi)) zet in a 3.0 en geeft 3.0
;;voorbeeld (setq a (round50 (- pi))) zet in a -3.0 en geeft -3.0
;;
(defun d2r(x) ;omzetting van graden in radialen
 (setq x (* pi (/ x 180.0)))
;;of (setq x (cvunit x "degree" "radian")) maar is langzamer
)
;;
;;voorbeeld (setq a (d2r 45)) zet in a 0.7853981633974482 en geeft 0.785398
;;
(defun r2d(x) ;omzetting van radialen in graden
 (setq x (* 180.0 (/ x pi)))
;;of (setq x (cvunit x "radian" "degree")) maar is langzamer
)
;;
;;voorbeeld (setq a (r2d (/ pi 4))) zet in a 45.0 en geeft 45.0
;;
(defun tan (x) ;tangens functie met hoek in radialen
 (setq x (/ (sin x) (cos x)))
)
;;
;;voorbeeld (setq a (tan (/ pi 4))) zet in a 1.0 en geeft 1.0
;;voorbeeld (setq a (tan (/ pi 2))) zet in a 1.633177872838384E+16 en geeft 1.63318e+016!!!!
;;voorbeeld (setq a (tan pi)) zet in a -1.224606353822377E-16 en geeft -1.22461e-016!!!!
;;
(defun tand (x) ;tangens functie met hoek in graden
 (setq x (/ (sin (d2r x)) (cos (d2r x))))
)
;;
;;voorbeeld (setq a (tand 45)) zet in a 1.0 en geeft 1.0
;;voorbeeld (setq a (tand 90)) zet in a 1.633177872838384E+16 en geeft 1.63318e+016!!!!
;;voorbeeld (setq a (tand 180)) zet in a -1.224606353822377E-16 en geeft -1.22461e-016!!!!
;;
(defun asin (x) ;arcsin functie met uitvoerhoek in radialen
(cond
  ((= x 1) (setq x (/ pi 2)))
  ((= x -1) (setq x (/ pi -2)))
  (setq x (atan (/ x (sqrt (+ (* (- x) x) 1)))))
)
)
;;
;;voorbeeld (setq a (asin -1.0)) zet in a -1.570796326794896 en geeft -1.5708
;;voorbeeld (setq a (asin -0.5)) zet in a -0.5235987755982989 en geeft -0.523599
;;voorbeeld (setq a (asin 0)) zet in a 0.0 en geeft 0.0
;;voorbeeld (setq a (asin 0.5)) zet in a 0.5235987755982989 en geeft 0.523599
;;voorbeeld (setq a (asin 1.0)) zet in a 1.570796326794896 en geeft 1.5708
;;
(defun asind (x) ;arcsin functie met uitvoerhoek in graden
(cond
  ((= x 1) (setq x 90.0))
  ((= x -1) (setq x -90.0))
  (setq x (r2d (atan (/ x (sqrt (+ (* (- x) x) 1))))))
)
)
;;
;;voorbeeld (setq a (asind -1.0)) zet in a -90.0 en geeft -90.0
;;voorbeeld (setq a (asind -0.50)) zet in a -30.0 en geeft -30.0
;;voorbeeld (setq a (asind 0)) zet in a 0.0 en geeft 0.0
;;voorbeeld (setq a (asind 0.5)) zet in a 30.0 en geeft 30.0
;;voorbeeld (setq a (asind 1.0)) zet in a 90.0 en geeft 90.0
;;
(defun acos (x) ;arccos functie met uitvoerhoek in radialen
(cond
  ((= x 0) (setq x (/ pi 2)))
  ((= x -1) (setq x (/ pi -2)))
  (setq x (atan (/ (sqrt (- 1 (* x x))) x)))
)
)
;;
;;voorbeeld (setq a (acos -1.0)) zet in a -1.570796326794896 en geeft -1.5708
;;voorbeeld (setq a (acos -0.5)) zet in a -1.047197551196597 en geeft -1.0472
;;voorbeeld (setq a (acos 0)) zet in a 1.570796326794896 en geeft 1.5708
;;voorbeeld (setq a (acos 0.5)) zet in a 1.047197551196597 en geeft 1.0472
;;voorbeeld (setq a (acos 1.0)) zet in a 0.0 en geeft 0.0

;;
(defun acosd (x) ;arccos functie met uitvoerhoek in graden
(cond
  ((= x 0) (setq x 90.0))
  ((= x -1) (setq x -90.0))
  (setq x (r2d (atan (/ (sqrt (- 1 (* x x))) x))))
)
)
;;
;;voorbeeld (setq a (acosd -1.0)) zet in a -90.0 en geeft -90.0
;;voorbeeld (setq a (acosd -0.5)) zet in a -60.0 en geeft -60.0
;;voorbeeld (setq a (acosd 0)) zet in a 90.0 en geeft 90.0
;;voorbeeld (setq a (acosd 0.5)) zet in a 60.0 en geeft 60.0
;;voorbeeld (setq a (acosd 1.0)) zet in a 0.0 en geeft 0.0
;;

;;;Testprogramma's van subprocedures zonder CAL

(defun c:test1a()
(textscr)
(setq num (getreal "\nGeef een getal wat U op \2610.5 wilt afronden?\n"))
(setq antw (round50fix num))
(princ (strcat "Het afgeronde gehele getal op \2610.5 van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test2a()
(textscr)
(setq num (getreal "\nGeef een getal wat U op \2610.5 wilt afronden?\n"))
(setq antw (round50 num))
(princ (strcat "Het afgeronde reële getal op \2610.5 van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test3a()
(textscr)
(setq num (getreal "\nGeef een hoek in graden die U in radialen wilt?\n"))
(setq antw (d2r num))
(princ (strcat "De hoek " (rtos num 2 10) " in graden is in radialen: "))
(princ antw)
(princ)
)
(defun c:test4a()
(textscr)
(setq num (getreal "\nGeef een hoek in radialen die U in graden wilt?\n"))
(setq antw (r2d num))
(princ (strcat "De hoek " (rtos num 2 10) " in radialen is in graden: "))
(princ antw)
(princ)
)
(defun c:test5a()
(textscr)
(setq num (getreal "\nGeef een hoek in radialen waarvan U de tangens wilt?\n"))
(setq antw (tan num))
(princ (strcat "De hoek " (rtos num 2 10) " in radialen heeft een tangens van: "))
(princ antw)
(princ)
)
(defun c:test6a()
(textscr)
(setq num (getreal "\nGeef een hoek in graden waarvan U de tangens wilt?\n"))
(setq antw (tand num))
(princ (strcat "De hoek " (rtos num 2 10) " in graden heeft een tangens van: "))
(princ antw)
(princ)
)
(defun c:test7a()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogsinus in radialen wilt?\n"))
(setq antw (asin_CAL num))
(princ (strcat "De boogsinus(arcsinus) in radialen van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test8a()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogsinus in graden wilt?\n"))
(setq antw (asind num))
(princ (strcat "De boogsinus(arcsinus) in graden van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test9a()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogcosinus in radialen wilt?\n"))
(setq antw (acos num))
(princ (strcat "De boogcosinus(arccosinus) in radialen van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test10a()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogcosinus in graden wilt?\n"))
(setq antw (acosd num))
(princ (strcat "De boogcosinus(arccosinus) in graden van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)

;;;;;***************************************
;;;;;Ter vergelijking een biblioteek met CAL
;;;;;***************************************

(defun $geomcal()
(if (null cal)
(if (> (atoi (substr (getvar "ACADVER") 1 2)) 13)
(arxload "geomcal") (xload "geomcal")))
)
(defun round50fix_CAL(x)
($geomcal)
(setq x (c:cal "ROUND (x)"))
)
;;
;;voorbeeld (setq a (round50fix pi)) zet in a 3 en geeft 3
;;voorbeeld (setq a (round50fix (- pi))) zet in a -3 en geeft -3
;;
(defun round50_CAL(x)
($geomcal)
(setq x (float (c:cal "ROUND (x)")))
;;of (setq x (/ (c:cal "ROUND (x)") 1.0))
)
;;
;;voorbeeld (setq a (round50_CAL pi)) zet in a 3.0 en geeft 3.0
;;voorbeeld (setq a (round50_CAL (- pi))) zet in a -3.0 en geeft -3.0
;;
(defun d2r_CAL(x)  ;omzetting van graden in radialen
($geomcal)
(setq x (c:cal "D2R (x)"))
;;of (setq x (c:cal "CVUNIT(x,degree,radian)"))
)
;;
;;voorbeeld (setq a (d2r_CAL 45)) zet in a 0.7853981633974482 en geeft 0.785398
;;
(defun r2d_CAL(x) ;omzetting van radialen in graden
($geomcal)
(setq x (c:cal "R2D (x)"))
;;of (setq x (c:cal "CVUNIT(x,radian,degree)"))
)
;;
;;voorbeeld (setq a (r2d_CAL (/ pi 4))) zet in a 45.0 en geeft 45.0
;;
(defun tan_CAL(x) ;tangens functie met hoek in radialen
($geomcal)
(setq x (c:cal "TANG (R2D (x))"))
)
;;
;;voorbeeld (setq a (tan_CAL (/ pi 4))) zet in a 1.0 en geeft 1.0
;;voorbeeld (setq a (tan_CAL (/ pi 2))) zet in a nil en geeft error!!!!
;;voorbeeld (setq a (tan_CAL pi)) zet in a -1.22461e-016 en geeft -1.22461e-016!!!!
;;
(defun tand_CAL(x) ;tangens functie met hoek in graden
($geomcal)
(setq x (c:cal "TANG (x)"))
)
;;
;;voorbeeld (setq a (tand_CAL 45)) zet in a 1.0 en geeft 1.0
;;voorbeeld (setq a (tand_CAL 90)) zet in a nil en geeft Error!!!!
;;voorbeeld (setq a (tand_CAL 180)) zet in a -1.22461e-016 en geeft -1.22461e-016!!!!
;;
(defun asin_CAL(x) ;arcsin functie met uitvoerhoek in radialen
($geomcal)
(setq x (c:cal "D2R (ASIN (x))"))
)
;;
;;voorbeeld (setq a (asin_CAL -1.0)) zet in a -1.570796326794896 en geeft -1.5708
;;voorbeeld (setq a (asin_CAL -0.5)) zet in a -0.5235987755982989 en geeft -0.523599
;;voorbeeld (setq a (asin_CAL 0)) zet in a 0.0 en geeft 0.0
;;voorbeeld (setq a (asin_CAL 0.5)) zet in a 0.5235987755982989 en geeft 0.523599
;;voorbeeld (setq a (asin_CAL 1.0)) zet in a 1.570796326794896 en geeft 1.5708
;;
(defun asind_CAL(x) ;arcsin functie met uitvoerhoek in graden
($geomcal)
(setq x (c:cal "ASIN (x)"))
)
;;
;;voorbeeld (setq a (asind_CAL -1.0)) zet in a -90 en geeft -90
;;voorbeeld (setq a (asind_CAL -0.5)) zet in a -30 en geeft -30
;;voorbeeld (setq a (asind_CAL 0)) zet in a 0.0 en geeft 0.0
;;voorbeeld (setq a (asind_CAL 0.5)) zet in a 30.0 en geeft 30.0
;;voorbeeld (setq a (asind_CAL 1.0)) zet in a 90 en geeft 90
;;
(defun acos_CAL(x) ;arccos functie met uitvoerhoek in radialen
($geomcal)
(setq x (c:cal "D2R (ACOS (x))"))
)
;;
;;voorbeeld (setq a (acos_CAL -1.0)) zet in a 3.141592653589793 en geeft 3.14159
;;voorbeeld (setq a (acos_CAL -0.5)) zet in a 2.094395102393195 en geeft 2.0944
;;voorbeeld (setq a (acos_CAL 0)) zet in a 1.570796326794896 en geeft 1.5708
;;voorbeeld (setq a (acos_CAL 0.5)) zet in a 1.047197551196597 en geeft 1.0472
;;voorbeeld (setq a (acos_CAL 1.0)) zet in a 0.0 en geeft 0.0
;;

(defun acosd_CAL(x) ;arccos functie met uitvoerhoek in graden
($geomcal)
(setq x (c:cal "ACOS (x)"))
)
;;
;;voorbeeld (setq a (acosd_CAL -1.0)) zet in a 180.0 en geeft 180.0
;;voorbeeld (setq a (acosd_CAL -0.5)) zet in a 120.0 en geeft 120.0
;;voorbeeld (setq a (acosd_CAL 0)) zet in a 90.0 en geeft 90.0
;;voorbeeld (setq a (acosd_CAL 0.5)) zet in a 60.0 en geeft 60.0
;;voorbeeld (setq a (acosd_CAL 1.0)) zet in a 0.0 en geeft 0.0
;;

;;;;;Testprogramma's van subprocedures met CAL

(defun c:test1b()
(textscr)
(setq num (getreal "\nGeef een getal wat U op \2610.5 wilt afronden?\n"))
(setq antw (round50fix_CAL num))
(princ (strcat "Het afgeronde gehele getal op \2610.5 van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test2b()
(textscr)
(setq num (getreal "\nGeef een getal wat U op \2610.5 wilt afronden?\n"))
(setq antw (round50_CAL num))
(princ (strcat "Het afgeronde reële getal op \2610.5 van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test3b()
(textscr)
(setq num (getreal "\nGeef een hoek in graden die U in radialen wilt?\n"))
(setq antw (d2r_CAL num))
(princ (strcat "De hoek " (rtos num 2 10) " in graden is in radialen: "))
(princ antw)
(princ)
)
(defun c:test4b()
(textscr)
(setq num (getreal "\nGeef een hoek in radialen die U in graden wilt?\n"))
(setq antw (r2d_CAL num))
(princ (strcat "De hoek " (rtos num 2 10) " in radialen is in graden: "))
(princ antw)
(princ)
)
(defun c:test5b()
(textscr)
(setq num (getreal "\nGeef een hoek in radialen waarvan U de tangens wilt?\n"))
(setq antw (tan_CAL num))
(princ (strcat "De hoek " (rtos num 2 10) " in radialen heeft een tangens van: "))
(princ antw)
(princ)
)
(defun c:test6b()
(textscr)
(setq num (getreal "\nGeef een hoek in graden waarvan U de tangens wilt?\n"))
(setq antw (tand_CAL num))
(princ (strcat "De hoek " (rtos num 2 10) " in graden heeft een tangens van: "))
(princ antw)
(princ)
)
(defun c:test7b()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogsinus in radialen wilt?\n"))
(setq antw (asin_CAL num))
(princ (strcat "De boogsinus(arcsinus) in radialen van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test8b()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogsinus in graden wilt?\n"))
(setq antw (asind_CAL num))
(princ (strcat "De boogsinus(arcsinus) in graden van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test9b()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogcosinus in radialen wilt?\n"))
(setq antw (acos_CAL num))
(princ (strcat "De boogcosinus(arccosinus) in radialen van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
(defun c:test10b()
(textscr)
(setq num (getreal "\nGeef een getal x (-1 >= x <= 1) waarvan U de boogcosinus in graden wilt?\n"))
(setq antw (acosd_CAL num))
(princ (strcat "De boogcosinus(arccosinus) in graden van " (rtos num 2 10) " is: "))
(princ antw)
(princ)
)
ACADcadabra

HofCAD

Citaat van: HofCADBeste LISP-onderzoekers,

Als amateur Cad Scene Investigator is men natuurlijk opzoek
naar alternatieve oplossingen. 8)
Van de geometrische calculator CAL van AutoCAD kan men
de rekenfuncties ook gebruiken in AutoLISP.

Beste LISP-onderzoekers,

Sorry, Sorry, Sorry, maar ik heb in bovenstaande bibliotheek
een wijziging moeten aanbrengen.
Indien jullie fouten zien of verbeteringen kunnen aanbrengen,
hoor ik dat graag.

Groetjes HofCAD CSI
ACADcadabra