编程实例

时间:2024.4.13

Visual LISP 编程应用实例集

一、         计算类程序

1.计算阶剩值n! (注意:采用了递归方式)

(defun jsen (n)

 (if (= n 0) 1 (* n (jsen (1- n)))));

2.迭代计算(

(defun ddai (x)

(setq x1 0 x2 x e 1.0e-5 i 0)

(while (> (abs (- x2 x1)) e) (setq x1 x2) (setq x2 (expt (+ x1 1) (/ 1 3.0))) (setq i (1+ i)));while

(print "x=") (princ x2) (print "i=") (princ i)

(princ));end

3.一元二次方程求解()

(defun px2 (a b c)

(setq d (- (expt b 2.0) (* 4 a c)))

(cond ((< d 0) (prompt "\nNo root!"))

     ((= d 0) (progn (setq x (/ b (* -2.0 a))) (prompt "\nOne root!   x=") (princ x)))

     ((> d 0) (progn (setq x1 (/ (- (sqrt d) b) (* 2.0 a)) x2 (/ (+ (sqrt d) b) (* -2.0 a)))

      (prompt "\nTwo root!  x1=") (princ x1) (prompt "        x2=") (princ x2))));cond

(princ));end

4.成绩分析统计

注意:使用该程序前须将全班成绩输入一个数据文件中保存,格式为(78 89 67 ….)

(defun sjfx (fname)

(setq f (open fname "r")) (setq lb nil) (while (setq sd (read-line f)) (setq lb (append lb (read sd))))

(close f) (setq xsum 0) (foreach x lb (setq xsum (+ x xsum))) (setq n (length lb) xb 0)

(setq xbar (/ xsum (* 1.0 n))) (foreach x lb (setq xb (+ xb (* (- x xbar) (- x xbar)))))

(setq xbzc (sqrt (/ xb (* 1.0 n)))) (repeat 18 (terpri))

(prompt "************ 统计结果 ******************") (terpri)

(prompt (strcat "     全班总平均分数 X=" (rtos xbar 2 3))) (terpri)

(prompt (strcat "            标准差 δ=" (rtos xbzc 2 3))) (terpri)

(prompt (strcat "     Total number:  N=" (rtos n 2 0))) (terpri)

(prompt "****************************************") (terpri)

(princ));end

二、数据检索类

1.根据计算模数检索标准模数值(假定mc为1~10之间的任意值,以实参代入)

(defun jsm (mc)

(setq ml '(1 1.25 1.5 2 2.5 3 4 5 6 8 10)) (setq m 0 n 0)

(while (< m mc) (setq m (nth n ml) n (1+ n)));while

(prompt (strcat "\nm=" (rtos m 2 1)))

(princ));end

2.检索一类数据文件(一类数据文件必须存在,且数据格式必须统一)

(defun js1 (fname kd / ft nt j x)

(setq f (open fname "r")) (setq ft (read (read-line f)) nt (read (read-line f)))

(while (/= kd (car nt)) (setq nt (read (read-line f)))) ;while

(setq j -1) (repeat (length nt) (setq j (1+ j) x (nth j ft)) (set x (nth j nt)));reapeat

(close f) nt);end

3.检索二类数据文件(二类数据文件必须存在,且数据格式必须统一)

(defun js2 (fname kd / ft nt j x)

(setq f (open fname "r")) (setq ft (read (read-line f)) nt (read (read-line f)))

(while (or (<= kd (car nt)) (> kd (cadr nt))) (setq nt (read (read-line f))));while

(setq j -1) (repeat (length nt) (setq j (1+ j) x (nth j ft)) (set x (nth j nt)));repeat

(close f) nt);end

三、         参数化绘图类

1.绘制正弦曲线函数y=sinx (注意:计算数据存放在表变量lpt中)

(defun ds (/ x0 xe x y pt)

(setq bp (getpoint "\n给出基点:"))

(command "ucs" "o" bp) (setq scx 10 scy 20) (setq x0 0 xe (* pi 2) x 0 y 0) (setq step (/ xe 180.0))

(while (<= x0 (* scx xe)) (setq y (* scy (sin x))) (setq lpt (append lpt (list (list x0 y))))

                     (setq x0 (+ x0 (* scx step)) x (+ x step)));while

(setq lpt (append lpt (list (list (* scx xe) 0))))

(command "leader" (list (+ (* scx xe) 10) 0) "0,0" "" "" "n")

(command "leader" (list 0 (+ scy 10)) "0,0" "" "" "n")

(command "pline") (foreach pt lpt (command pt)) (command "")

(princ));end

2.装有键的轴或孔的图形绘制(注:平键数据存于二类数据文件jc.dat中)

(defun jcz (d flag / x1 x2 x cp pt1 pt2 pt3 pt4 t1)

(if (not js2) (load "d:/cad_1/js2")) (js2 "d:/cad_1/jc.dat" d)

(initget 6) (setq cp (getpoint "\nCenter point:")) (command "ucs" "o" cp)

(setq x1 (expt (* 0.5 d) 2.0) x2 (expt (* 0.5 b) 2.0)) (setq x (sqrt (- x1 x2)))

(if (= flag 1) (setq t1 tz) (setq t1 (* -1 tk)))

(setq pt1 (list x (* 0.5 b)) pt2 (list (- (* 0.5 d) t1) (* 0.5 b))

pt3 (polar pt2 (* 1.5 pi) b) pt4 (polar pt1 (* 1.5 pi) b))

(command "pline" pt1 "a" "ce" "0,0" pt4 "l" pt3 pt2 pt1 "")

(if (= flag 1) (command "hatch" "u" 45 4 "" "l" "")) (command "layer" "s" "center" "" "" "")

(command "line" (polar '(0 0) pi (+ 3 (* 0.5 d))) (polar '(0 0) 0 (+ 3 (* 0.5 d))) "")

(command "line" (polar '(0 0) (* 0.5 pi) (+ 3 (* 0.5 d)))  (polar '(0 0) (* 1.5 pi) (+ 3 (* 0.5 d))) "")

(command "layer" "s" 0 "" "" "") (princ));end

3.绘制阴阳图形

  (defun yinyang (r)

  (setq bp (getpoint "\nEnter center point:")) (command "color" 2) (command "circle" bp r)

  (command "pline" (polar bp (* 0.5 pi) r) "a" bp (polar bp (* 1.5 pi) r) "")

  (command "bhatch" "p" "s" (polar bp (* 0.5 pi) (* 0.5 r)) "") (command "color" 1)

  (command "bhatch" "p" "s" (polar bp (* 1.5 pi) (* 0.5 r)) "")

  );end

4.绘制一个五角星图案

(defun star_5 (r)

(command "color" 1) (setq cp (getpoint "\nCenter point:"))

(setq pt1 (polar cp (* 0.017453 18) r) pt2 (polar cp (* 0.017453 54) r) p2  (polar cp (* 0.5 pi) r))

(setq p1 (inters cp pt2 pt1 (polar pt1 pi r)) p3 (polar cp (* 0.017453 126) (distance cp p1)))

(command "pline" cp p1 p2 p3 cp p2 "") (setq s (ssadd (entlast)))

(command "bhatch" "p" "s" (polar cp (* 0.017453 70) (* 0.2 r)) "") (setq s (ssadd (entlast) s))

(command "color" 2) (command "bhatch" "p" "s" (polar cp (* 0.017453 95) (* 0.2 r)) "")

(setq s (ssadd (entlast) s))

(command "array" s "" "p" cp 5 "" "")

(princ));end

5.绘制图框(n=0,1~5)

(defun tk (n)

(setq lpt '(1189 841 594 420 297 210 148))

(setq l (nth n lpt) b (nth (+ n 1) lpt))

(if (< n 3) (setq c 10) (setq c 5))

(command "rectangle" '(0 0) (list l b))

(command "rectangle" (list 25 c) (list (- l c) (- b c)))

);end

6.绘制参数曲线x=sin2a, y=sin5a [0~2pi](注意:采用了递归方式)

(defun draw_xy ()

(setq bp (getpoint "\nEnter base point:"))

(command "ucs" "o" bp)

(command "pline" (draw_xy_aux 0)));main

;--------------------------------------------------

(defun draw_xy_aux (a)

(cond ((> a (* 2 pi)) (command "0,0" "" "ucs" "w"))

(t (command (list (sin (* 2.0 a)) (sin (* 5.0 a))))

 (draw_xy_aux (+ a 0.05))));cond

 );end

7.绘制参数曲线x=sin5a.cosa, y=sin5a.sin4a(注意:采用了数据文件读、写方式)

(defun qx_xy ()

(setq f (open "qx.dat" "w")) (setq a 0)

(while (< a (* 2 pi)) (setq x (* (sin (* 5 a)) (cos a)) y (* (sin (* 5 a)) (sin (* 4 a))))

(princ x f) (princ "," f) (princ y f) (princ "\n" f) (setq a (+ a 0.05)));while

(princ "0,0" f) (close f)

(draw_qx) (princ));main

;-------------------------------------------------

(defun draw_qx ()

(setq bp (getpoint "\nEnter base point:"))

(command "ucs" "o" bp "pline")

(setq f (open "qx.dat" "r"))

(while (setq pt (read-line f)) (command pt))

(close f)

(command "" "ucs" "w")

(princ)

);end

8.绘制由方程y=cos(0.9x)产生的图形(注:计算数据存放于表变量lpt中)

(defun c:spr (/ cp lpt x)

(setq cp (getpoint "\nCenter point:"))

(setq x 0 lpt nil)

(repeat (fix (1+ (/ (* 20 pi) 0.2)))

(setq lpt (append lpt (list (polar cp x (cos (* 0.9 x))))))

(setq x (+ x 0.2)));repeat

(setq lpt (append lpt (list (polar cp (* 20 pi) 1) "")))

(command "pline")

(foreach pt lpt (command pt))

(princ)

);end

四、    对话框编程实例

1.定制对话框

zdbx:dialog{label="带圆正多边形";

:row{:boxed_column{

:edit_box{label="边数";key="number";value=6;}

:edit_box{label="半径";key="rad";value=20;}}

:boxed_column{

:radio_button{label="内接圆";key="nq";}

:radio_button{label="外切圆";key="wq";}}

     }

ok_cancel;}

2.程序驱动

(defun dbx ()

(setq id (load_dialog "e:/jscad/zdbx"))

(if (< id 0) (exit))

(if (not (new_dialog "zdbx" id)) (exit))

 (action_tile "number" "(set_tile $key $value)")

 (action_tile "rad" "(set_tile $key $value)")

 (action_tile "nq" "(setq fg 1)")

 (action_tile "wq" "(setq fg 0)")

 (action_tile "accept" "(qsj) (done_dialog)")

 (action_tile "cancel" "(setq what -1) (done_dialog)")

(start_dialog)

(unload_dialog id)

(if (> what 0) (draw_zdbx n r flag))

);end

;----------------------------

(defun draw_zdbx (n r flag)

  (setq bp (getpoint "\nBase point:"))

  (command "circle" bp r)

  (command "polygon" n bp flag r)

  )

;---------------------------

(defun qsj ()

(setq n (atoi (get_tile "number")))

(setq r (atof (get_tile "rad")))

(if (= fg 1) (setq flag "i") (setq flag "c"))

(setq what 1)

);end

五.局部菜单设计编程实例

//***MENUGROUP=用户菜单

***POP1

[用户菜单]

[--]

[->平键联接]

[圆头平键]^c^c(if (not aj) (load "d:/cad_1/aj")) (aj)

[半圆头键]^c^c(if (not bj) (load "d:/cad_1/bj")) (bj)

[方型平键]^c^c(if (not cj) (load "d:/cad_1/cj")) (cj)

[键槽轴面]^c^c(if (not jcz) (load "d:/cad_1/jcz")) (jcz 1)

[<-键槽孔面]^c^c(if (not jcz) (load "d:/cad_1/jcz")) (jcz 0)

[~--]

[->图纸幅面]

[A0幅面]^c^crectangle 0,0 1189,841 rectangle 25,10 1179,831

[A1幅面]^c^crectangle 0,0 841,594 rectangle 25,10 831,584

[A2幅面]^c^crectangle 0,0 594,420 rectangle 25,10 584,410

[A3幅面]^c^crectangle 0,0 420,297 rectangle 25,10 410,287

[A4幅面]^c^crectangle 0,0 297,210 rectangle 25,5 287,205

[<-A5幅面]^c^crectangle 0,0 210,147 rectangle 25,5 200,142

[~--]

[标题栏]^C^C(command "insert" "d:/cad_1/btl" pause "" "" pause)

[粗糙度]^C^C(command "insert" "d:/cad_1/czd1" pause "" "" pause)

[基准符号]^c^c(command "insert" "d:/cad_1/jzfh" pause "" "" pause)

[清屏幕]^c^c(if (not cls) (load "d:/cad_1/cls")) cls;

[--]

[圆多边形]^C^C(if (not dbx) (load "e:/jscad/zdbx")) (dbx)

[--]

----------------------------------------------------------------------------------------------------------------

(说明:该程序仅用于《CAD软件二次开发》课程学习参考和上机训练,不得随意传抄)

          

                                                         

更多相关推荐:
C++程序设计实验报告

C++程序设计实验报告学号:姓名:班级:指导老师:实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循…

程序设计实验报告模板

C语言程序设计实验报告1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的值传递的方式;(3)掌握函数的嵌套调用及递归调用的设计方法;(4)在编程过程…

算法与编程实验报告

算法与编程实验报告班级10083412姓名储飞学号10081235指导老师朱芳第一题一题目一题目统计字母的使用频率二目的与要求1目的通过编写程序统计字母的使用频率培养学生综合利用C语言进行程序设计的能力熟悉字符...

C语言程序设计实验报告8

C语言程序设计实验报告八专业计算机科学与技术班级卓越工程师班日期20xx年12月16日实验组别第一组成绩第八次实验指针实验指导教师李开学生姓名邱金源学号U20xx14493实验名称指针实验一实验目的12345熟...

Windows编程实验报告

Windows编程实验报告1GDI图形程序设计姓名专业学号框架窗口程序和20xx3241Windows编程实验报告1Windows编程实验一GDI图形程序设计框架窗口程序和一实验目的1熟悉在VisualC60I...

算法与编程实验报告

算法与编程实验实验报告第一题一题目统计字母的使用频率二目的与要求1目的通过编写程序统计字母的使用频率培养学生综合利用C语言进行程序设计的能力熟悉字符串的操作方法加强函数的运用提高软件系统分析能力和程序文档建立归...

网络编程实验报告

网络编程实验报告指导老师姓名学号班级实验题目网络文件传输实验目的了解网络文件传输的方法了解FTP协议基础学习使用WinSock实现网络文件的传输了解点对点P2P网络文件传输的方法学习使用WinSock实现P2P...

网络编程实验报告

实验一TCPSocketAPI程序设计一预备知识1网络编程基本概念网络上的计算机间的通讯实质上是网络中不同主机上的程序之间的通讯在互联网中使用IP地址来标识不同的主机在网络协议中使用端口号来标识主机上不同进程即...

网络编程实验报告

程序实践报告一程序实践概述1题目名称Linux程序设计基础2时间进度20xx年6月19日到20xx年7月5日3开发环境Ubunto1004二问题分析1功能说明编程实现快速排序算法实现文本文件拷贝函数copyfs...

socket编程实验报告

姓名学院实验时间计算机网络实验题目Socket编程实验1基于UDP的Socket编程实验2基于TCP的Socket编程学号年级目录一实验内容3实验1基于UDP的Socket编程3实验2基于TCP的Socket编...

WinSocket编程实验报告

实验六WinSock编程实验报告1实验目的和要求1学习网络中进程之间通信的原理和实现方法2掌握在VB或VC等集成开发环境中编写网络程序的方法3编写一个简单的聊天程序最低要求实现两人一组的两台计算机之间的收发文本...

程序设计 实验报告3

《C语言程序设计》实验报告实验名称:结构体程序设计系别:计算机系专业:计算机科学与技术班级:姓名:学号:实验日期:20##年12月23日教师审批签字:实验11结构体程序设计⒈实验目的⑴掌握结构体类型变量的定义和…

编程实验报告(38篇)