- 基于敏捷開發的數據結構研究
- 黃復賢著
- 1231字
- 2018-12-27 20:11:15
2.6 演示算法的開發過程及方法
在數據結構課程中,存儲結構及邏輯結構(特別是動態數據結構及遞歸算法的執行過程)是教學的重點和難點。只有了解了靜態存儲結構和動態存儲結構的原理,才能設計出更合理的數據結構和高效的算法。本系統通過代碼對照、圖形演示、變量的動態變化來形象、清晰地展示以上原理。本節主要介紹演示算法的開發過程及系統的使用。
2.6.1 開發過程
在delphi中單獨建立一個單元,首先建立一個模板類ex,直接繼承類demo,主要方法是輸入檢查、算法代碼輸出、執行算法,在三個方法中都以整數no為參數,相當于選擇目錄中的三級標題對應的算法。設計好模板后,再編寫新類時,都可以復制這些代碼,在它們的基礎上添加代碼即可。模板類ex的說明及方法框架如下:
ex = class(demo)//說明部分 private f: text; public function inputok(no:integer): Boolean; override; procedure outprogram(no:integer); function runprogram(no:integer): Boolean; override; end; //實現部分 function ex.inputok(no:integer): Boolean; var s: string; begin result:=true; case no of 1: begin end; end; end; procedure ex.outprogram(no:integer); var f: text; begin assignfile(f,'pdemo.txt'); rewrite(f); case no of 1:begin writeln(f,'procedure print;'); end; end; closefile(f); end; function ex.runprogram(no:integer): Boolean; var x: Integer; s: string; begin inherited; if inputok(no) then begin outprogram(no); assignfile(f,'demo.txt'); rewrite(f); case no of 1:; end; closefile(f); result:=true; end else result:=false; end;
2.6.2 輸入檢查
本系統只允許在輸入框中進行輸入,對輸入結果要進行檢查,看是否符合算法要求。在執行算法時,先檢查是否有數據輸入,如不合法或未輸入,就把輸入框中的內容設為默認值。下面的代碼用來檢查輸入框中的內容是否為3到9之間的數值:
function ex01.inputok(no:integer): Boolean; var s: string; begin result:=true; case no of 2: begin s:=getinput; if pos(s,'3,4,5,6,7,8,9')=0 then begin sethelp('請輸入一個在3-9 中的數字!'); setinput('3'); result:=false; end ; end; end; end;
2.6.3 算法代碼輸出
執行相應算法時,在算法演示窗口輸出并顯示代碼,實際上就是把執行算法的過程輸出到pdemo.txt文件中,代碼如下:
procedure ex01.outprogram(no:integer); var f: text; begin assignfile(f,'pdemo.txt'); rewrite(f); case no of 1:begin //簡單程序及靜態簡單變量演示 writeln(f,'procedure print;'); writeln(f,'var i,j:integer;'); writeln(f,'begin'); writeln(f,' i:=1;j:=2;'); writeln(f,' i:=i+j;'); writeln(f,'end;'); end; 2:begin writeln(f,'function fac(n: integer):integer;'); writeln(f,'var y:integer;'); writeln(f,'begin '); writeln(f,' if n=1 '); writeln(f,' then result:=1'); writeln(f,' else begin '); writeln(f,' y:=fac(n-1); '); writeln(f,' result:=n*y; '); writeln(f,' end; '); writeln(f,'end; '); end; 3:begin writeln(f,'procedure ex01.print99; '); writeln(f,'var i,j:integer; '); writeln(f,' r99:array[1..9,1..9] of integer; '); writeln(f,'begin '); writeln(f,' for i:=1 to 9 do '); writeln(f,' for j:=1 to i do '); writeln(f,' r99[i,j]:=i*j; '); writeln(f,'end; '); end; 4:begin writeln(f,'procedure ex01.pointdemo;'); writeln(f,'var aa,bb,s:pointtp;i:integer; '); writeln(f,'begin '); writeln(f,' new(aa); '); writeln(f,' new(bb); '); writeln(f,' aa.next:=nil; '); writeln(f,' aa.data:=','''///''',';'); writeln(f,' bb.data:=','''123''',';'); writeln(f,' bb.next :=aa.next; '); writeln(f,' aa.next:=bb; '); writeln(f,' for i:=1 to 3 do '); writeln(f,' begin '); writeln(f,' new(s); '); writeln(f,' s.data :=inttostr(i);'); writeln(f,' s.next :=bb.next ; '); writeln(f,' bb.next:=s;'); writeln(f,' bb:=s;'); writeln(f,' end; '); writeln(f,'end;'); end; end; closefile(f); end;
2.6.4 算法的執行
在下述的runprogram(no:integer)方法中,先檢查輸入的內容是否正確,如果正確,輸出演示用算法代碼,調用真正的算法,在執行過程中產生相應的腳本文件。下面的代碼分別調用四個算法,第一個算法為簡單程序及靜態簡單變量演示,直接調用print方法;第二個算法是遞歸程序及系統工作棧演示,先讀入輸入值,再調用求階乘的fac()算法;第三個算法是演示二維數組(包括一維記錄數組)的使用,該數組中存放九九乘法口訣表;第四個算法是指針演示,建立先進先出的鏈表。
function ex01.runprogram(no:integer): Boolean; var x: Integer; s: string; begin inherited; if inputok(no) then begin outprogram(no); assignfile(f,'demo.txt'); rewrite(f); case no of 1:print; 2:begin s:=getinput; x:=fac(strtoint(s)); end; 3:print99; 4:pointdemo; end; closefile(f); result:=true; end else result:=false; end;
2.6.5 腳本的輸出
輸出腳本在算法執行的過程中逐步完成,這是編寫代碼的重點和難點。針對編寫好的算法,以行為單位,執行了哪些功能,變量值有哪些變化,都要以前面腳本符號系統的規定進行編寫。以第二個算法為例,在原遞歸求階乘程序的基礎上,增加輸出腳本語句,形成遞歸程序及系統工作棧,演示算法的執行代碼如下:
function ex01.fac(n:integer): Integer; var y: Integer; begin writeln(f,'1]/遞歸程序演示;'); writeln(f,'2]#n,y,result;','*n=',n,';'); writeln(f,'3]'); writeln(f,'4]'); if n=1 then begin result:=1 ; writeln(f,'5]*result=1 ;'); end else begin writeln(f,'6]'); writeln(f,'7]<n=',n,' ','8;','/當前局部變量及返回語句入棧;'); y:=fac(n-1); writeln(f,'8]>;*n=',n,';','*y=',y,';'); result:=n*y; writeln(f,'8]*result=',n*y,';'); writeln(f,'9]'); end; writeln(f,'10]'); end; 下面是輸入為3時,執行上述代碼生成的demo.txt的內容: 1]/遞歸程序演示; 2]#n,y,result;*n=3; 3] 4] 6] 7]<n=3 8;/當前局部變量及返回語句入棧; 1]/遞歸程序演示; 2]#n,y,result;*n=2; 3] 4] 6] 7]<n=2 8;/當前局部變量及返回語句入棧; 1]/遞歸程序演示; 2]#n,y,result;*n=1; 3] 4] 5]*result=1 ; 10] 8]>;*n=2;*y=1; 8]*result=2; 9] 10] 8]>;*n=3;*y=2; 8]*result=6; 9] 10]
- 零起步輕松學單片機技術(第2版)
- 控制與決策系統仿真
- Dreamweaver 8中文版商業案例精粹
- Mobile DevOps
- Java開發技術全程指南
- Python Algorithmic Trading Cookbook
- Visual C++項目開發案例精粹
- Linux Shell編程從初學到精通
- 渲染王3ds Max三維特效動畫技術
- Appcelerator Titanium Smartphone App Development Cookbook(Second Edition)
- 大數據:從基礎理論到最佳實踐
- Mastering SQL Server 2014 Data Mining
- Mastering Android Game Development with Unity
- 互聯網單元測試及實踐
- 輸送技術、設備與工業應用