ns2实验2 tcl语言简介.doc_第1页
ns2实验2 tcl语言简介.doc_第2页
ns2实验2 tcl语言简介.doc_第3页
ns2实验2 tcl语言简介.doc_第4页
ns2实验2 tcl语言简介.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

實驗二TCL語言簡介實驗目的學習TCL語言的基本語法。背景知識TCL (Tool Command Language)在NS2中主要是用來描述腳本,簡單的說就是用來描述要模擬的網路環境和參數設定等。實驗步驟安裝文書編輯軟體PSPad 1在開始學習撰寫腳本之前,選擇一個好用的文字編輯器是非常重要。在此推薦一個免費的文字編輯器(PsPad, /en/download.php)給大家,好讓未來撰寫腳本時有個好工具可用。1. 請切換目錄到ns-allinone-2.29/ns-2.29/book/lab2的目錄下,執行PSPad的安裝檔pspad432inst_en.exe。2. 請按”Next”,則如下圖所示。3. 請選擇”I accept the agreement”。 4. 請按”Next”,則如下圖所示。此圖為PSPad的安裝路徑,可以選擇喜歡安裝的位置,不過我們在這裡使用內定的路徑即可。5. 請按”Next”,則如下圖所示。6. 請按”Next”,則如下圖所示。7. 請按”Install”,開始進行安裝。 8. 安裝完成後,則如下圖所示。 9. 請按”Finish”,完成安裝,並且開始執行PSPad editor。TCL語法練習這部份的資料主要是參考2,因此有興趣的讀者可以到此網站找尋更詳細的資料。1. 變數(variable)和變數替換(variable substituion)正如其他的程式語言一樣,變數(variables)可以被想成是用來儲存各種類型資料的盒子(boxes)。這些盒子(或者說是變數),都有各自的名稱,而這些名稱在我們需要取用或者是變更變數的值(value)時將會被用到。在C語言在使用變數時,需要事先的宣告,而TCL則不需要事先宣告,TCL變數是在第一次使用set的指令來指派變數的值時所產生的。當我們不再需要某個變數時,可以使用unset來取消這個變數。但一般而言,可以不用去做這個動作。當我們要取用或者是變更變數內的值時,只要在變數名稱前加上一個”$”,就可以去取用或者是變更變數內的值,這就是所謂的變數替換。練習1.1:(請把底下的程式碼使用文字編輯軟體存到2_1_1.tcl)set foo “john”puts“my name is $foo”執行方法:($為提示符號)$ns 2_1_1.tcl執行結果:my name is john說明:程式的第一行把”john”這個字串指派給變數foo。程式的第二行使用puts這個指令把後面的字串秀出來,在秀出來之前,會先把$foo先取代成john,所以真正秀出來的字串是my name is john。練習1.2:(請把底下的程式碼使用文字編輯軟體存到2_1_2.tcl)set month 2 set day 3 set year 97 set date $month:$day:$yearputs $date執行方法:$ns 2_1_2.tcl執行結果:2:3:97說明:在這個練習中,第四行set date $month:$day:$year的$month會被2所替代;同理,$day會為3,$year為97,這三個變數替代完後會組成一個新的字串,並藉由set指令把新字串指派給變數date。練習1.3:(請把底下的程式碼使用文字編輯軟體存到2_1_3.tcl)set foo puts hieval $foo執行方法:$ns 2_1_3.tcl執行結果:hi說明:在這個練習中,foo這個變數包含了一個tcl script,接著第二行程式中$foo會替換成”puts hi”,並且當作是eval的參數。eval這個指令主要是用於去執行一個tcp script,所以最後”hi”會被秀出來。2. 表示式(expressions)TCL包含許多種類的表示式,如數學表示式、關係表示式等。通常這些表示式都會使用”expr”這個指令去判斷表示式的真假或者去求得表示式的值。練習2.1:(請把底下的程式碼使用文字編輯軟體存到2_2_1.tcl)set value expr 0=1puts $value執行方法:$ns 2_2_1.tcl執行結果:0說明:使用了expr去判斷0是否等於1,結果是假,所以把0存到value這個變數中,並把結果秀出來。練習2.2:(請把底下的程式碼使用文字編輯軟體存到2_2_2.tcl)set value expr 2=1puts $value執行方法:$ns 2_2_2.tcl執行結果:1說明:使用expr去判斷2是否大於等於1,結果是真,所以把1存到value這個變數中,並把結果秀出來。練習2.3:(請把底下的程式碼使用文字編輯軟體存到2_2_3.tcl)set value expr 2+3puts $value執行方法:$ns 2_2_3.tcl執行結果:5說明:使用了expr去求2+3的結果,並把所得到的5存到value這個變數中,最後把結果秀出來。3. 指令替換(command substitution)就如同變數替換一樣,指令替換可以把”原tcl script執行結果”取代”原tcl script”。練習3.1:(請把底下的程式碼使用文字編輯軟體存到2_3_1.tcl)puts I am expr 10 * 2 years old, and my I.Q. is expr 100 - 25執行方法:$ns 2_3_1.tcl執行結果:I am 20 years old, and my I.Q. is 75說明:在這個練習中,square bracket(也就是)可以用來達成指令替換,所以在執行此行tcl script時,會先執行expr 10*2和expr 100-25,並把結果”20”和”75”取代原本tcl script中expr 10*2和expr 100-25的位置,最後再使用puts把此字串秀出來。練習3.2:(請把底下的程式碼使用文字編輯軟體存到2_3_2.tcl)set my_height 6.0puts If I was 2 inches taller, I would be expr $my_height + (2.0 / 12.0) feet tall執行方法:$ns 2_3_2.tcl執行結果:If I was 2 inches taller, I would be 6.166666666666667 feet tall說明:在練習中的第二行,的內容會先被執行,也就是$my_height會被6.0所替換,(2.0/12.0)的結果會先被計算出來,再和6.0做相加的動作,然後把兩數相加的結果去替換字串中的expr $my_height + (2.0 / 12.0)這個位置,最後才把字串秀出來。4. 流程控制(control flow)跟其它的程式相同,TCL也提供了一些方法可以用來控制程式運作流程的方法,這包含了if-else、switch、while、for、foreach等指令,這些指令用法請參考下面範例。練習4.1:(請把底下的程式碼使用文字編輯軟體存到2_4_1.tcl)set my_planet earthif $my_planet = earth puts I feel right at home. elseif $my_planet = venus puts This is not my home. else puts I am neither from Earth, nor from Venus.set temp 95if $temp 80 puts Its a little chilly. else puts Warm enough for me.執行方法:$ns 2_4_1.tcl執行結果:I feel right at home.Warm enough for me.練習4.2:(請把底下的程式碼使用文字編輯軟體存到2_4_2.tcl)set num_legs 4switch $num_legs 2 puts It could be a human. 4 puts It could be a cow. 6 puts It could be an ant. 8 puts It could be a spider. default puts It could be anything.執行方法:$ns 2_4_2.tcl執行結果:It could be a cow.練習4.3:(請把底下的程式碼使用文字編輯軟體存到2_4_3.tcl)for set i 0 $i 5 incr i 1 puts In the for loop, and i = $i執行方法:$ns 2_4_3.tcl執行結果:In the for loop, and i = 0In the for loop, and i = 1In the for loop, and i = 2In the for loop, and i = 3In the for loop, and i = 4練習4.4:(請把底下的程式碼使用文字編輯軟體存到2_4_4.tcl)set i 0while $i 0 return $num set num expr $num * (-1)return $numset num1 12set num2 14set sum sum_proc $num1 $num2puts The sum is $sumputs The magnitude of 3 is magnitude 3puts The magnitude of -2 is magnitude -2執行方法:$ns 2_5_1.tcl執行結果:The sum is 26The magnitude of 3 is 3The magnitude of -2 is 2說明:在程式中定義了兩個程序”sum_proc”和”magnitude”,sum_proc有兩個輸入參數:a和b,這個程序最主要的工作就是把a和b相加,並把結果回傳;另外一個程序magnitude只有一個參數num,這個程序最主要就是去判斷num是正數或負數,若是正數則直接回傳,若是負數就先與-1相乘再回傳,簡單的說,magnitude就是在做絕對值。練習5.2:(請把底下的程式碼使用文字編輯軟體存到2_5_2.tcl)proc dumb_proc set myvar 4 puts The value of the local variable is $myvar global myglobalvar puts The value of the global variable is $myglobalvarset myglobalvar 79dumb_proc執行方法:$ns 2_5_2.tcl執行結果:The value of the local variable is 4The value of the global variable is 79說明:這個練習主要在說明區域變數(local variable)和全域變數(global variable)的觀念。要特別說明的是當程序中需要用到程序外已經定義好的變數前,必需先使用global這個保留字做宣告,才能存取程序外已經定義好的變數。6. 陣列(arrays)練習6.1:(請把底下的程式碼使用文字編輯軟體存到2_6_1.tcl)set myarray(0) Zeroset myarray(1) Oneset myarray(2) Twofor set i 0 $i 3 incr i 1 puts $myarray($i)執行方法:$ns 2_6_1.tcl執行結果:ZeroOneTwo說明:程式一開始定義了一個名稱為myarray的陣列,共有三個元素(element),第一個元素是”Zero”,存放在陣列中0的位置;第二個是”One”,存放在陣列中1的位置;第三個是”Two”,存放在陣列中2的位置。程式最後會把陣列的每個元素都秀出來。練習6.2:(請把底下的程式碼使用文字編輯軟體存到2_6_2.tcl)set person_info(name) Fred Smithset person_info(age) 25set person_info(occupation) Plumberforeach thing name age occupation puts $thing = $person_info($thing)執行方法:$ns 2_6_2.tcl執行結果:name = Fred Smithage = 25occupation = Plumber說明:這個練習主要在說明存放在陣列中的元素不一定要是數字,在TCL中的陣列是可以存放數字或者是字串,並且存放的位置不一定要用0、1、2這樣的編號。練習6.3:(請把底下的程式碼使用文字編輯軟體存到2_6_3.tcl)set person_info(name) Fred Smithset person_info(age) 25set person_info(occupation) Plumberforeach thing array names person_info puts $thing = $person_info($thing)執行方法:$ns 2_6_3.tcl執行結果:occupation = Plumberage = 25name = Fred Smith說明:這個練習跟6.2最大的不同在於foreach這個迴圈,在6.2中,陣列中每個元素存放的位置必須一一列出,才能秀出陣列中每個元素的值。但在這個範例中,使用了array names person_info,這樣就可以列出person_info中的name、age、occupation,這在元素很多的時候特別好用。7. 字串(strings)練習7.1:(請把底下的程式碼使用文字編輯軟體存到2_7_1.tcl)set str This is a stringputs The string is: $strputs The length of the string is: string length $str puts The character at index 3 is: string index $str 3puts The characters from index 4 through 8 are: string range $str 4 8puts The index of the first occurrence of letter i is: string first i $str執行方法:$ns 2_7_1.tcl執行結果:The string is: This is a stringThe length of the string is: 16The character at index 3 is: sThe characters from index 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论