Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2854 replies to this topic

#1561 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 06:52 AM

Trước hết, mình ngưỡng mộ bạn vì sự "làm cho tới cùng" nên vote cho bạn. Lần này có khá hơn.

Do đề bài của bạn TL không nói rõ các ký tự khác số là như thế nào, nên trong trường hợp tổng quát vẫn còn lỗi.

VD: khi ký tự khác số là dấu phẩy (,).

1,1.0 => 1,1.0

Hoặc 1E2 thì được hiểu như thế nào? Nó là 1 số (100.0) hay 2 số (1) và (2) có chèn ở giữa 1 ký tự (E) khác số?

1E2 =>1E2.0

Tuy nhiên, rất có thể nó đáp ứng y/c trong ví dụ đơn giản của TL.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1562 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 17 April 2013 - 09:28 AM

Cảm ơn các bạn đã nhiệt tình trợ giúp mình. Xin lỗi vì mình chỉ đưa 1 ví dụ mà chưa nói rõ ý định gây khó khăn cho các bạn.

Mình đang viết 1 hàm xuất kết quả tính toán. Từ dòng nhắc chọn text để lưu kết quả, nếu người dùng không muốn xuất kết quả ngay mà cần tính toán tiếp thì chỉ việc nhập thêm các phép tính. nhập xong thì xuất kết quả mới.

Việc tính toán dựa vào hàm cal với đối số khi đó là chuỗi phép tính người dùng đã nhập nên cần phải chuyển các con số integer trong đó thành real. Phải làm điều này vì phạm vi cho phép tính toán của Integer hẹp quá. Nếu phép tính chứa integer quá lớn sẽ cho kết quả không chính xác. Tại mình cẩn thận, muốn có 1 hàm tổng quát để làm việc này nên mới đưa ra 1 ví dụ dở hơi như trên.

 

Hình như bạn Tue_NV đã đoán được mục đích của mình thì phải ^^


  • 0

#1563 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 10:26 AM

Cảm ơn các bạn đã nhiệt tình trợ giúp mình. Xin lỗi vì mình chỉ đưa 1 ví dụ mà chưa nói rõ ý định gây khó khăn cho các bạn.

Mình đang viết 1 hàm xuất kết quả tính toán. Từ dòng nhắc chọn text để lưu kết quả, nếu người dùng không muốn xuất kết quả ngay mà cần tính toán tiếp thì chỉ việc nhập thêm các phép tính. nhập xong thì xuất kết quả mới.

Việc tính toán dựa vào hàm cal với đối số khi đó là chuỗi phép tính người dùng đã nhập nên cần phải chuyển các con số integer trong đó thành real. Phải làm điều này vì phạm vi cho phép tính toán của Integer hẹp quá. Nếu phép tính chứa integer quá lớn sẽ cho kết quả không chính xác. Tại mình cẩn thận, muốn có 1 hàm tổng quát để làm việc này nên mới đưa ra 1 ví dụ dở hơi như trên.

 

Hình như bạn Tue_NV đã đoán được mục đích của mình thì phải ^^

 

Đúng là mình đã đoán trúng ý bạn rồi. Thần giao cách cảm mà ^_^

Code đây các bác :

 
(defun Tue-int-real(str / str-res str2)
;;;write by Tue_NV
  ;;;;;example: (Tue-int-real "a2b3.1c5") -> "a2.0b3.1c5.0"
  ;;;;;(Tue-int-real "aa2222b3.1c56") -> "aa2222.0b3.1c56.0"
 (vl-load-com)
(setq str-res "" str2 str)
  (while (/= (strlen str2) 0)
    (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_"  (strcase str2)))
    (if (/= (strlen str2) 0) 
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) (rtos (atof str2))))
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) ))
    )
    (setq str2 (vl-string-left-trim "1234567890 ."  str2)
 str (substr str (1+ (- (strlen str) (strlen str2))) (strlen str))
    )
  )
str-res
  )

  • 1

#1564 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 03:17 PM

 

(defun HA (str / lst)
 (setq lst (vl-string->list str))
 (setq lst (mapcar (function vl-list->string)
  (if (nump (car lst))
   (HA1 lst)
   (HA2 lst))))
 (apply 'strcat (mapcar '(lambda(x) (if (wcmatch x "~*[~0-9]*") (strcat x ".0") x)) lst)))
(defun HA1 (num / res)
 (cond
  ((null num) nil)
  ((null (cdr num)) (list num))
  (T
   (while (nump (car num))
    (setq res (cons (car num) res) num (cdr num)))
   (cons (reverse res) (HA2 num)))))
(defun HA2 (num / res)
 (cond
  ((null num) nil)
  ((null (cdr num)) (list num))
  (T
   (while (not(nump (car num)))
    (setq res (cons (car num) res) num (cdr num)))
   (cons (reverse res) (HA1 num)))))
(defun nump (num)
 (or (= num 46) (<= 48 num 57)))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1565 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 03:51 PM

 

 

(defun HA (str / lst)
 (setq lst (vl-string->list str))
 (setq lst (mapcar (function vl-list->string)
  (if (nump (car lst))
   (HA1 lst)
   (HA2 lst))))
 (apply 'strcat (mapcar '(lambda(x) (if (wcmatch x "~*[~0-9]*") (strcat x ".0") x)) lst)))
(defun HA1 (num / res)
 (cond
  ((null num) nil)
  ((null (cdr num)) (list num))
  (T
   (while (nump (car num))
    (setq res (cons (car num) res) num (cdr num)))
   (cons (reverse res) (HA2 num)))))
(defun HA2 (num / res)
 (cond
  ((null num) nil)
  ((null (cdr num)) (list num))
  (T
   (while (not(nump (car num)))
    (setq res (cons (car num) res) num (cdr num)))
   (cons (reverse res) (HA1 num)))))
(defun nump (num)
 (or (= num 46) (<= 48 num 57)))

 

Lisp bác viết không chấp nhận kí tự rỗng " "

Ví dụ "(5+2) *3"


  • 0

#1566 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 04:04 PM

Rỗng vô tư mà!

(HA "(5+2)* 3") => "(5.0+2.0)* 3.0"


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1567 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 04:08 PM

Rỗng vô tư mà!

(HA "(5+2)* 3") => "(5.0+2.0)* 3.0"

 

Ồ, được rồi bác! Không hiểu sao Tue_NV test lúc đầu ko được. Sorry

Còn cái này thì lỗi nè bác :

(ha "(9*sqrt(3))")


  • 0

#1568 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 17 April 2013 - 04:18 PM

Các bác thử với Lisp này xem:

(defun C:kk( / b c a a1 lst accept cancel ac_bd ac_kt ca_bd ca_kt num)
  (setq b nil)  (setq c nil)  (setq a (getstring T "\n Nhap chuoi:")) (setq a1 "") (setq lst(list)) (setq accept(list)) (setq cancel(list)) (setq i 1)
  (setq ac_bd 1) (setq ac_kt 0) (setq ca_bd 1) (setq ca_kt 0)
  (while (<= i (strlen a))
    (setq b(substr a i 1))
    (if (< i (strlen a)) (setq c(substr a (1+ i) 1)))
    (if (= i (strlen a))
      (progn
	(setq c(substr a (strlen a) 1))
	(if (or (= c "0") (= c "1") (= c "2") (= c "3") (= c "4") (= c "5") (= c "6") (= c "7") (= c "8") (= c "9") (= c "."))
	  (setq ac_kt i))
	(if (and (/= c "0") (/= c "1") (/= c "2") (/= c "3") (/= c "4") (/= c "5") (/= c "6") (/= c "7") (/= c "8") (/= c "9") (/= c "."))
	  (setq ca_kt i))
	)
      )
    (if (and (or (= b "0") (= b "1") (= b "2") (= b "3") (= b "4") (= b "5") (= b "6") (= b "7") (= b "8") (= b "9") (= b "."))
	     (/= c "0") (/= c "1") (/= c "2") (/= c "3") (/= c "4") (/= c "5") (/= c "6") (/= c "7") (/= c "8") (/= c "9") (/= c ".")
	     )
      (progn (setq ac_kt i) (setq ca_bd (1+ i))	(setq ca_kt 0))
      )
    (if (and (or (= c "0") (= c "1") (= c "2") (= c "3") (= c "4") (= c "5") (= c "6") (= c "7") (= c "8") (= c "9") (= c "."))
	     (/= b "0") (/= b "1") (/= b "2") (/= b "3") (/= b "4") (/= b "5") (/= b "6") (/= b "7") (/= b "8") (/= b "9") (/= b ".")
	     )
      (progn (setq ac_bd (1+ i)) (setq ac_kt 0)	(setq ca_kt i))
      )
    (if (and (>= ac_bd 1) (>= ac_kt 1) (= (vl-position (list ac_bd ac_kt "A") accept) nil))
      (setq accept(append accept (list (list ac_bd ac_kt "A"))))
      )
    (if (and (>= ca_bd 1) (>= ca_kt 1) (= (vl-position (list ca_bd ca_kt "C") cancel) nil))
      (setq cancel(append cancel (list (list ca_bd ca_kt "C"))))
      )
    (setq i(1+ i))
    )
  (setq lst(append accept cancel))
  (setq lst(vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2)))))
  (foreach item lst
    (if (= (caddr item) "C")
      (setq a1(strcat a1 (substr a (car item) (- (cadr item) (car item) -1))))
      (progn
	(setq num(substr a (car item) (- (cadr item) (car item) -1)))
	(if (= (vl-string-search "." num) nil)
	  (setq a1(strcat a1 num ".0"))
	  (setq a1(strcat a1 num))
	  )
	)
      )
    )
  (alert a1)
  ) 

 

PS: Lisp bác Tuệ đứng hình luôn: (Tue-int-real "a2b3.1c'5")


  • 0

#1569 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 04:30 PM

Các bác thử với Lisp này xem:

(defun C:kk( / b c a a1 lst accept cancel ac_bd ac_kt ca_bd ca_kt num)
  (setq b nil)  (setq c nil)  (setq a (getstring T "\n Nhap chuoi:")) (setq a1 "") (setq lst(list)) (setq accept(list)) (setq cancel(list)) (setq i 1)
  (setq ac_bd 1) (setq ac_kt 0) (setq ca_bd 1) (setq ca_kt 0)
  (while (<= i (strlen a))
    (setq b(substr a i 1))
    (if (< i (strlen a)) (setq c(substr a (1+ i) 1)))
    (if (= i (strlen a))
      (progn
	(setq c(substr a (strlen a) 1))
	(if (or (= c "0") (= c "1") (= c "2") (= c "3") (= c "4") (= c "5") (= c "6") (= c "7") (= c "8") (= c "9") (= c "."))
	  (setq ac_kt i))
	(if (and (/= c "0") (/= c "1") (/= c "2") (/= c "3") (/= c "4") (/= c "5") (/= c "6") (/= c "7") (/= c "8") (/= c "9") (/= c "."))
	  (setq ca_kt i))
	)
      )
    (if (and (or (= b "0") (= b "1") (= b "2") (= b "3") (= b "4") (= b "5") (= b "6") (= b "7") (= b "8") (= b "9") (= b "."))
	     (/= c "0") (/= c "1") (/= c "2") (/= c "3") (/= c "4") (/= c "5") (/= c "6") (/= c "7") (/= c "8") (/= c "9") (/= c ".")
	     )
      (progn (setq ac_kt i) (setq ca_bd (1+ i))	(setq ca_kt 0))
      )
    (if (and (or (= c "0") (= c "1") (= c "2") (= c "3") (= c "4") (= c "5") (= c "6") (= c "7") (= c "8") (= c "9") (= c "."))
	     (/= b "0") (/= b "1") (/= b "2") (/= b "3") (/= b "4") (/= b "5") (/= b "6") (/= b "7") (/= b "8") (/= b "9") (/= b ".")
	     )
      (progn (setq ac_bd (1+ i)) (setq ac_kt 0)	(setq ca_kt i))
      )
    (if (and (>= ac_bd 1) (>= ac_kt 1) (= (vl-position (list ac_bd ac_kt "A") accept) nil))
      (setq accept(append accept (list (list ac_bd ac_kt "A"))))
      )
    (if (and (>= ca_bd 1) (>= ca_kt 1) (= (vl-position (list ca_bd ca_kt "C") cancel) nil))
      (setq cancel(append cancel (list (list ca_bd ca_kt "C"))))
      )
    (setq i(1+ i))
    )
  (setq lst(append accept cancel))
  (setq lst(vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2)))))
  (foreach item lst
    (if (= (caddr item) "C")
      (setq a1(strcat a1 (substr a (car item) (- (cadr item) (car item) -1))))
      (progn
	(setq num(substr a (car item) (- (cadr item) (car item) -1)))
	(if (= (vl-string-search "." num) nil)
	  (setq a1(strcat a1 num ".0"))
	  (setq a1(strcat a1 num))
	  )
	)
      )
    )
  (alert a1)
  ) 

PS: Lisp bác Tuệ đứng hình luôn: (Tue-int-real "a2b3.1c'5")

Bác thêm kí tự vào trong

chuỗi  "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_" là được

Thêm chổ nào cũng được  :) 

Do mười chưa viết code đưa kí tự @ nên viết gọn thế cho xong luôn.

Tại lười ấy mà


  • 0

#1570 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 04:39 PM

Lisp bác Tue_NV có thêm ' hay không thêm ' cũng chả thèm nhúc nhích luôn!

Chằng quá!!!!!!!!!!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1571 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 04:42 PM

Lisp bác Tue_NV có thêm ' hay không thêm ' cũng chả thèm nhúc nhích luôn!

Chằng quá!!!!!!!!!!

Răng không nhúc nhích được bác. Bác test thử xem:

 
(defun Tue-int-real(str / str-res str2)
;;;write by Tue_NV
  ;;;;;example: (Tue-int-real "a2b3.1c5") -> "a2.0b3.1c5.0"
  ;;;;;(Tue-int-real "aa2222b3.1c56") -> "aa2222.0b3.1c56.0"
 (vl-load-com)
(setq str-res "" str2 str)
  (while (/= (strlen str2) 0)
    (setq str2 (vl-string-left-trim "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_`'"  (strcase str2)))
    (if (/= (strlen str2) 0) 
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) (rtos (atof str2))))
(setq str-res (strcat str-res (substr str 1 (- (strlen str) (strlen str2))) ))
    )
    (setq str2 (vl-string-left-trim "1234567890 ."  str2)
 str (substr str (1+ (- (strlen str) (strlen str2))) (strlen str))
    )
  )
str-res
  )

  • 0

#1572 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 17 April 2013 - 04:50 PM

Có nhúc nhích nhưng code vẫn phải sửa lại bác ạ. Ví dụ về 2 trường hợp độ chính xác của đơn vị bản vẽ khác nhau

(Tue-int-real "a2b3.1c'''''5") => "a2b3c'''''5" 

(Tue-int-real "a2b3.1c'''''5")=>  "a2.00000000b3.10000000c'''''5.00000000"

Cái này sửa trong hàm Substr là được


  • 0

#1573 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 05:03 PM

Có nhúc nhích nhưng code vẫn phải sửa lại bác ạ. Ví dụ về 2 trường hợp độ chính xác của đơn vị bản vẽ khác nhau

(Tue-int-real "a2b3.1c'''''5") => "a2b3c'''''5" 

(Tue-int-real "a2b3.1c'''''5")=>  "a2.00000000b3.10000000c'''''5.00000000"

Cái này sửa trong hàm Substr là được

 

Sửa bằng lệnh UNITS cũng được bác

Để User tùy chọn số số lẻ thập phân vậy


  • 0

#1574 Chiron

Chiron

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 17 April 2013 - 05:05 PM

Test hàm bác Tue_NV:

(Tue-int-real "a2b3.1c'5")
"a2.0000b3.1000c'5.0000"

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"

(Tue-int-real "(9*sqrt(3))")
"(9.0000*sqrt(3.0000))"

(Tue-int-real "(5+2)* 3")
"(5.0000+2.0000)* 3.0000"

(Tue-int-real "1a2.3b4c56")
"1.0000a2.3000b4.0000c56.0000"

(Tue-int-real "a2b3.1c5")
"a2.0000b3.1000c5.0000"

 

(Tue-int-real "a2b3.1c5b")
"a2.0000b3.1000c5.0000b"
 

(Tue-int-real "81!@0800&853") => Chạy hoài không dừng.

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"
 
(Tue-int-real "(9*sqrt(3))")
"(9.0000*sqrt(3.0000))"
 
(Tue-int-real "1a2.3b4c56")
"1.0000a2.3000b4.0000c56.0000"
 
(Tue-int-real "a2b3.1c5")
"a2.0000b3.1000c5.0000"
 
(Tue-int-real "81!@0800&853") => Chạy hoài không dừng ^ ^

  • 0

#1575 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 05:09 PM

Tôi test không nhúc nhích thiệt mà! Đây là copy và paste nguyên xi"

(Tue-int-real "a2b3.1c5b")

"a2b3.1c5b"


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1576 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 06:34 PM

Ái dà! Chắc phải chờ bạn TL giải thích rõ ràng trong 1 chuỗi thì yếu tố nào là số và yếu tố nào không phải số thì may ra còn khả quan.

Ví dụ chuỗi 1..2 hoặc chuỗi 1.2.3 thì hiểu đâu là số và đâu không phải là số?

Tất cả lisp của KK, Tue_NV, DVH đều bó tay với các trường hợp này.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1577 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 09:12 PM

Test hàm bác Tue_NV:

(Tue-int-real "a2b3.1c'5")
"a2.0000b3.1000c'5.0000"

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"

(Tue-int-real "(9*sqrt(3))")
"(9.0000*sqrt(3.0000))"

(Tue-int-real "(5+2)* 3")
"(5.0000+2.0000)* 3.0000"

(Tue-int-real "1a2.3b4c56")
"1.0000a2.3000b4.0000c56.0000"

(Tue-int-real "a2b3.1c5")
"a2.0000b3.1000c5.0000"

 

(Tue-int-real "a2b3.1c5b")
"a2.0000b3.1000c5.0000b"
 

(Tue-int-real "81!@0800&853") => Chạy hoài không dừng.

(Tue-int-real "a2b3.1c'''''5")
"a2.0000b3.1000c'''''5.0000"
 
(Tue-int-real "(9*sqrt(3))")
"(9.0000*sqrt(3.0000))"
 
(Tue-int-real "1a2.3b4c56")
"1.0000a2.3000b4.0000c56.0000"
 
(Tue-int-real "a2b3.1c5")
"a2.0000b3.1000c5.0000"
 
(Tue-int-real "81!@0800&853") => Chạy hoài không dừng ^ ^

 

(Tue-int-real "81!@0800&853") => Chạy hoài không dừng ^ ^

Reply : Là do kí tự "&" chưa có trong chuỗi "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_"

Bạn thêm kí tự "&" vào trong "ABCDEFGHIKLMNOPQRSTUYZXY+-*/%( ),#@$^!~_" là được

Thêm chổ nào cũng được   :)

 

@Bác DVH: "Số" : chỉ cần đáp ứng lệnh CAL là được

Lisp bác viết bị lỗi mỗi TH này : (ha "(9*sqrt(3))")

Còn Lisp bác KK và Tue_NV chạy tốt...... :)


  • 0

#1578 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 17 April 2013 - 09:39 PM

Bác Tue_NV có vẽ hơi lạc quan về chủ đề này. Nhất là về định nghĩa số.

1). Nhắc lại: tôi test với ví dụ ở #1575 thì không nhúc nhích => không thể chạy tốt.

2). Ngay cả khái niệm "số" là đáp ứng lệnh CAL cũng khó hiểu:

1E2 là 1 số (= 100) nhưng (Tue-int-real "1E2") => 100E2 thì tính toán thế nào đây với lệnh CAL?

3). Những cái dấu chấm (.) cũng rắc rối vô vàn với cách hiểu về nó.

Bác và tôi đều đã từng lạc vào mê đồ trận "chọn text là số nguyên, số thực..." rồi mà.

Theo tôi, bạn TL phải đưa ra những giới hạn và những khái niệm rõ rệt thì may ra mới có thể.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1579 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 17 April 2013 - 10:08 PM

Bác Tue_NV có vẽ hơi lạc quan về chủ đề này. Nhất là về định nghĩa số.

1). Nhắc lại: tôi test với ví dụ ở #1575 thì không nhúc nhích => không thể chạy tốt.

2). Ngay cả khái niệm "số" là đáp ứng lệnh CAL cũng khó hiểu:

1E2 là 1 số (= 100) nhưng (Tue-int-real "1E2") => 100E2 thì tính toán thế nào đây với lệnh CAL?

3). Những cái dấu chấm (.) cũng rắc rối vô vàn với cách hiểu về nó.

Bác và tôi đều đã từng lạc vào mê đồ trận "chọn text là số nguyên, số thực..." rồi mà.

Theo tôi, bạn TL phải đưa ra những giới hạn và những khái niệm rõ rệt thì may ra mới có thể.

 

1. Tue_NV test, bác KangKung test, bạn Chiron test thấy không vấn đề gì......

2. Cảm ơn bác. Thì ra mình còn vướng 1 trường hợp 1E2, đó là chữ E trong lệnh cal. Lisp bác KK trả về 1.0E2.0 cũng không thể tính toán với CAL. Xử cái này cũng đơn giản  :) 

3. Tue_NV hiểu vấn đề đơn giản, chỉ là vấn đề vượt giới hạn số nguyên của CAL thôi. Chỉ là vấn đề ứng dụng chuyển số nguyên về số thực để không bị lỗi về số nguyên của CAL (1 ứng dụng viết bằng NET mà anh gia_bach đã từng viết)

Thôi, thì cứ để bạn TL phản hồi xem sao......


  • 0

#1580 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 17 April 2013 - 10:31 PM

Hix. Mình làm các bạn vất vả quá! Mình cũng không ngờ khi bóc tách cụ thể thì nó lại trở lên phức tạp như vây, cũng bởi vì mình chưa có thời gian để suy nghĩ về nó, khi nêu vấn đề bản thân mình cũng chưa tính được đến những trường hợp mà các bạn nêu bên trên. 

Vì vấn đề đã trở lên phức tạp hơn mình tưởng nên mình thu hẹp và cụ thể hơn yêu cầu: Chuỗi nhập vào là 1 chuỗi đảm bảo để hàm Cal hiểu đó là 1 phép tính số học, giống như khi bạn gõ lệnh Cal và nhập phép tính vậy. Cảm ơn các bạn  :)


  • 0