Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
kstdkhang

Xin Mã Lisp: Tìm Vị Trí Liền Trước Và Liền Sau Giá Trị Được Nhập Vào

Các bài được khuyến nghị

kstdkhang    1
Thân chào diễn đàn Cadviet 

Bạn nào có đoạn  mã code lisp trả về vị trí liền trước và liền sau giá trị  được nhập vào không, cho mình xin đoạn đó nhé

ví dụ: mình có danh sách

ds '(1 2 3 4 5)

Nhập vào giá trị 2.5 

Đoạn mã sẽ trả về vị trí của giá trị liền kề trước và liền kề sau , ở ví dụ trên là 2 (vị trí thứ 1) và 3(vị trí thứ 2)

Cám ơn các bạn nhiều nhiều

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.680

 

Thân chào diễn đàn Cadviet 
Bạn nào có đoạn  mã code lisp trả về vị trí liền trước và liền sau giá trị  được nhập vào không, cho mình xin đoạn đó nhé
ví dụ: mình có danh sách
ds '(1 2 3 4 5)
Nhập vào giá trị 2.5 
Đoạn mã sẽ trả về vị trí của giá trị liền kề trước và liền kề sau , ở ví dụ trên là 2 (vị trí thứ 1) và 3(vị trí thứ 2)
Cám ơn các bạn nhiều nhiều

 

Bạn muốn trả về VỊ TRÍ hay GIÁ TRỊ? Nếu giá trị nhập vào là bằng 1 element thì sao? List của bạn có trùng nhau không? List gồm các số tăng dần hay sao?...

Trả về cặp vị trí, trong đó lst là danh sách; a là giá trị nhập vào:

(list (setq c (1- (vl-position a (vl-sort (cons a lst) '<)))) (1+ c))

Trả về cặp giá trị:

(list (nth (setq c (1- (vl-position a (vl-sort (cons a lst) '<)))) lst) (nth (1+ c) lst))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
kstdkhang    1

cám ơn bạn Hà quan tâm.

xl mình không nói rõ

lisp sẽ trả về vị trí

* danh sách lst là danh sách có length bất kỳ, nhưng qui luật là giá trị thứ (i+1) lớn hơn giá trị thứ i

* nếu giá trị a nhập vào nằm ngoài chương trình sẽ báo lỗi và yêu cầu nhập lại

* nếu giá trị a bằng với giá trị bất kỳ trong bảng sẽ trả về vị trí tương ứng giá bằng a nằm trong list

* nếu không bằng giá trị nào trong list sẽ trả về 2 vị trí gần nó nhất

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ndtnv    397

* nếu giá trị a nhập vào nằm ngoài chương trình:

-  phần tử đầu: (car lst), cuối (last lst)

Bạn tự viết được

* nếu giá trị a bằng với giá trị bất kỳ trong bảng sẽ trả về vị trí tương ứng giá bằng a nằm trong list

(setq c (vl-position a lst))

* nếu không bằng giá trị nào trong list sẽ trả về 2 vị trí gần nó nhất

 c = nil khi thực hiện dòng lệnh trên: bạn Hạ đã viết ở #2

Bạn dùng các hàm if hoặc cond để tự hoàn thiện

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Cũng nên chú ý là (vl-position 3.0 '(1 2 3 4 5)) sẽ trả về nil, cho nên nhiều khi (setq c (vl-position a lst)) không cho kết quả đúng.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
kstdkhang    1

*cám ơn các lisp thủ đã giúp đỡ.

*vậy làm thế nào để giải quyết được lỗi trên vậy Tot77

*các hàm vl- ... hay nhỉ. bạn nào có tài liệu tiếng việt nói về các hàm đó giới thiệu cho mình đk.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Bạn làm như sau:

 

(defun tra (a lst)
(while (or (< a (car lst)) (> a (last lst)))
(setq a (getreal (strcat "\nNhap gia tri trong khoang " (rtos (car lst)) "->" (rtos (last lst)) " :"))))
(if (member a lst)
(vl-position (car (vl-remove-if-not '(lambda(x) (= x a)) lst)) lst)
(list (setq c (1- (vl-position a (vl-sort (cons a lst) '<)))) (1+ c)))
)
;;; test
(tra 0 '(1 2 3 4 5.2 6.3))
(tra 7.2 '(1 2 3 4 5.2 6.3))
(tra 4.0 '(1 2 3 4 5.2 6.3))
(tra 4.5 '(1 2 3 4 5.2 6.3))

Tuy vl-position phân biệt real và int nhưng hàm member lại không phân biệt.

Các hàm vl- khá nhiều, chắc chẳng ai rảnh mà dịch hết ra tiếng Việt, nếu có thì chắc là viết sách bán thôi.

Tuy vậy bạn cũng chẳng cần biết tiếng anh làm gì, đọc help chỉ cần chú ý mấy cái ví dụ để biết cách sử dụng là được rồi.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×