Merhaba arkadaşlar :) Müsadenizle soruya da cevaba da itirazım var!
kerem1453 arkadaşımızın yuvarlama işlemi için verdiği örnekte çelişki var.
Dimenison/roundoff işlemindeki gibi yuvarlamadan bahsediyorsak;
122 -> 120'ye
123 -> 125'e
127 -> 125'e
128 -> 130'a yuvarlanır. yani simetrik yuvarlama yapılır.
123'ü 120'ye ve aynı algoritma ile 127'yi 130'a yuvarlamak mümkün olmaz.
Travacı hocam, böyle bir yuvarlatma işlemi için bu kadar uzun kod yazmaya gerek yok.
AutoLISP
rem (remainder, bölme işleminde kalan) işlevini kullanarak çok daha kısa ve hatasız yazılabilir. Çok canınız sıkılırsa örnekteki kodlar daha da kısa yazılabilir biliyorsunuz :)
Kod:
(defun c:SY (/ a) ;;; Simetrik Yuvarlama
(setq a (getint))
(if (> (rem a 5) (/ 5 2.0))
(princ (+ a (- 5 (rem a 5))))
(princ (- a (- 4 (rem a 5)))))
(princ))
(defun c:YY (/ a) ;;; Yukarı Yuvarlama
(setq a (getint)) (princ (+ a (- 5 (rem a 5))))
(princ))
(defun c:AY (/ a b) ;;; Aşağı Yuvarlama
(setq a (getint)) (princ (- a (rem a 5)))
(princ))
Seçim ve seçilen nesne içeriğinin güncellenmesini değil yalnızca işlemi örnekledim.
Kolay gelsin.