經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法匯編_第1頁
經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法匯編_第2頁
經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法匯編_第3頁
經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法匯編_第4頁
經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法匯編_第5頁
已閱讀5頁,還剩248頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)經(jīng)濟(jì)學(xué)第七講:經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)方法杜寧華上海財(cái)經(jīng)大學(xué)經(jīng)濟(jì)學(xué)院,經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室2009 年 4月1確保實(shí)驗(yàn)結(jié)果的有效性,實(shí)驗(yàn)室實(shí)驗(yàn)通常兩小時(shí)內(nèi)結(jié)束 人力組織十幾個(gè)甚至二十幾個(gè)交易回合每個(gè)交易回合隨機(jī)配對(duì) 怎么辦?開發(fā)計(jì)算機(jī)程序2起先,開發(fā)實(shí)驗(yàn)程序只是為了更充分地掌握數(shù)據(jù)、減少實(shí)驗(yàn)運(yùn)行失誤 近年的發(fā)展表明,實(shí)驗(yàn)運(yùn)行(交易)過程的電子化為實(shí)驗(yàn)方法開辟了新的天地 大大降低了交易成本拓展了市場參與者的市場語言新市場機(jī)制在互聯(lián)網(wǎng)和電子商務(wù)時(shí)代隨處可見 網(wǎng)絡(luò)環(huán)境下設(shè)計(jì)新機(jī)制并運(yùn)用實(shí)驗(yàn)手段檢驗(yàn)新機(jī)制的特性,已經(jīng)成了實(shí)驗(yàn)經(jīng)濟(jì)學(xué)的重要發(fā)展方向 31Visual Basic 快速入門4討論的要點(diǎn)對(duì)基本開發(fā)環(huán)境的介

2、紹面向?qū)ο蟮某绦蛟O(shè)計(jì)方法變量和變量組選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)對(duì)數(shù)據(jù)的存取運(yùn)用VB實(shí)現(xiàn)實(shí)驗(yàn)室內(nèi)的信息傳遞 5一、VB的基本開發(fā)環(huán)境6運(yùn)行Microsoft Visual Basic 6.0中文版,彈出“新建工程”的對(duì)話窗口。選擇“標(biāo)準(zhǔn) EXE”并點(diǎn)擊按鍵“打開”。78屏幕的中央是對(duì)象窗口。對(duì)象窗口內(nèi)所展示的是一個(gè)空白的窗體窗體的標(biāo)題欄上顯示“Form1” 。窗體(Form)是VB程序的用戶界面。程序員決定在窗體上放置哪些內(nèi)容(這些內(nèi)容的學(xué)名叫“控件”)、又要對(duì)這些內(nèi)容進(jìn)行哪些處理;運(yùn)行過程中,使用者將在窗體上看到這些內(nèi)容的部分或全部,并根據(jù)編程人員的設(shè)計(jì)通過窗體上的內(nèi)容實(shí)現(xiàn)特定功能 。9屏幕上方所顯示的

3、是標(biāo)題欄、菜單條和工具欄。屏幕的左側(cè)是VB的工具箱,工具箱內(nèi)包含VB的多種控件。“控件”是能夠被放置在窗體上的內(nèi)容。窗體和控件在VB里都被稱作“對(duì)象”。屏幕的右上方所顯示的是工程資源管理器。定義應(yīng)用程序的層次結(jié)構(gòu)。屏幕右下方是屬性窗口。所展示的是當(dāng)前被選中的對(duì)象的各種屬性。 “屬性”所描述的是VB中對(duì)象的特征。比如,窗體的屬性包括窗體的名稱、窗體的寬度和高度以及窗體在計(jì)算機(jī)屏幕上的位置等等。10編寫一個(gè)最簡單的應(yīng)用程序熟悉一下VB開發(fā)環(huán)境,在動(dòng)手的過程中很多問題會(huì)自然而然地明朗11給窗體和工程命名。選中空白窗體Form1。在屬性窗口的各個(gè)屬性中,點(diǎn)亮“(名稱)”一欄并將窗體的名稱改為“frmH

4、ello”。再選中工程資源管理器,點(diǎn)亮根目錄“工程1(工程1)”。選中屬性窗口中“(名稱)”一欄,將工程1的名稱改為“Hello”。通過菜單將窗體文件“frmHello”和工程“Hello”存儲(chǔ)在適當(dāng)?shù)牡胤健?12要給VB程序中的對(duì)象起有意義的名字。便于你追蹤管理這些對(duì)象,也能幫助別的人理解你的程序。按照對(duì)象的類型給名稱加前綴,前綴由三個(gè)小寫字母構(gòu)成。窗體對(duì)象(Form)的前綴是frm圖標(biāo)對(duì)象(Label)的前綴是lbl文本框?qū)ο螅═extBox)的前綴是txt命令按鍵對(duì)象(CommandButton)的前綴是cmd在前綴的后面,加上以大寫字母開頭的、有一定意義的單詞來描述對(duì)象的作用。txtI

5、nput是用于輸入的文本框。13將對(duì)象窗口最大化并調(diào)整frmHello的邊框?qū)⑵淅蟆T趯傩源翱谥悬c(diǎn)亮frmHello的“Caption”屬性,將其改為“Hello”。快速雙擊屏幕左側(cè)工具箱中的圖形控件(Image),在窗體frmHello的中央就會(huì)出現(xiàn)一個(gè)圖形對(duì)象Image1。點(diǎn)擊Image1的“Picture”屬性右側(cè)的省略號(hào)“”,將會(huì)彈出一個(gè)加載圖片的對(duì)話框。在你的計(jì)算機(jī)內(nèi)選擇你喜歡的圖片(注意,圖片不要太大)并點(diǎn)擊按鍵“打開”。調(diào)整Image1的邊框大小并用鼠標(biāo)把Image1拖動(dòng)到窗體的恰當(dāng)位置。1415在Image1的屬性窗口中,將Image1的名稱改為“imgNinghua”,并將

6、“Visible”屬性改為“False”。點(diǎn)擊VB開發(fā)環(huán)境屏幕上方工具欄內(nèi)的啟動(dòng)鍵“ ”來運(yùn)行程序。我們發(fā)現(xiàn)運(yùn)行中的窗體上并不能見到所載入的圖片。再點(diǎn)擊屏幕上方工具欄內(nèi)的結(jié)束鍵“ ” 以終止程序的運(yùn)行。 16快速雙擊屏幕左側(cè)工具箱中的圖標(biāo)控件(label),在窗體frmHello的中央就會(huì)出現(xiàn)一個(gè)圖標(biāo)Label1。采用類似的步驟,將Label1的名稱改為“l(fā)blHello”并將該圖標(biāo)移動(dòng)到圖片imgNinghua的右側(cè)。選中圖標(biāo)lblHello的“Caption”屬性,并將該屬性的內(nèi)容改為“Hello, everyone.”。隨后再選中圖標(biāo)lblHello的“Font”屬性。點(diǎn)擊該屬性右側(cè)的省

7、略號(hào)“”,你將會(huì)看到選擇字體的對(duì)話框。選擇小四號(hào)字并調(diào)整lblHello的邊框大小。 1718快速雙擊圖標(biāo)lblHello,這時(shí)會(huì)彈出程序代碼窗口,在該窗口內(nèi)會(huì)顯示如下字樣:Private Sub lblHello_Click()End Sub19lblHello_Click是一個(gè)事件。VB的事件是指VB的對(duì)象對(duì)某個(gè)外部事件所作出的響應(yīng)。事件lblHello_Click是程序使用者點(diǎn)擊了圖標(biāo)lblHello之后程序所執(zhí)行的操作。在“Private Sub lblHello_Click()”和“End Sub”之間所加入的各行計(jì)算機(jī)語句,就是當(dāng)使用者點(diǎn)擊lblHello這一外部事件發(fā)生時(shí)VB程序

8、才會(huì)執(zhí)行的操作。 20Private Sub lblHello_Click() imgNinghua.Visible = TrueEnd Sub 21現(xiàn)在保存工程,點(diǎn)擊啟動(dòng)鍵“ ”來運(yùn)行程序。試著點(diǎn)擊一下“Hello, everyone.”,圖片就會(huì)在窗體內(nèi)出現(xiàn)。(其實(shí)編程就這么簡單!) 22點(diǎn)擊結(jié)束鍵“ ” 終止程序的運(yùn)行。如果編程人員不希望每次都在VB的開發(fā)環(huán)境內(nèi)運(yùn)行程序,編程人員可以生成可執(zhí)行文件。點(diǎn)擊菜單中的“文件”并選中“生成Hello.exe(K)”,將Hello.exe存放在你希望存放的目錄中。23二、面向?qū)ο蟮某绦蛟O(shè)計(jì)方法241VB的對(duì)象、屬性、方法和事件25VB的窗體和控件是

9、具有自己的屬性、方法和事件的對(duì)象。屬性是一個(gè)對(duì)象的性質(zhì)方法是對(duì)象的動(dòng)作事件是對(duì)對(duì)象的響應(yīng) 26小孩玩的氣球同樣具有屬性、方法和事件屬性直徑和顏色狀態(tài)屬性(充氣的或未充氣的)不可見的性質(zhì)(如壽命) 方法:氣球本身所固有的方法和動(dòng)作 充氣方法(用氦氣充滿氣球的動(dòng)作)放氣方法(排出氣球中的氣體)上升方法(放手讓氣球飛走) 事件:預(yù)定義的對(duì)某些外部事件的響應(yīng)對(duì)刺破它的事件響應(yīng)是放氣對(duì)放手事件的響應(yīng)是升空 27設(shè)置氣球的屬性: Balloon.Color = Red Balloon.Diameter = 10 Balloon.Inflated = True 注意代碼的語法,首先是對(duì)象 (Balloon)

10、,接著是屬性 (Color),然后是賦值 (Red)。屬性也可以在程序設(shè)計(jì)階段在“屬性”窗口中設(shè)置。 28調(diào)用氣球的方法: Balloon.Inflate Balloon.Deflate Balloon.Rise 5 它的語法與屬性的語法相似,對(duì)象(一個(gè)名詞)后面緊跟著方法(一個(gè)動(dòng)詞)。在第三個(gè)例子中有一個(gè)附加項(xiàng),稱為一個(gè)參數(shù),表示氣球上升的高度。一些方法有一個(gè)或多個(gè)參數(shù),它們對(duì)執(zhí)行的動(dòng)作做進(jìn)一步的描述。 29氣球?qū)σ粋€(gè)事件的響應(yīng)如下所示: Sub Balloon_Puncture() Balloon.Deflate Balloon.MakeNoise Bang Balloon.Inflate

11、d = False Balloon.Diameter = 1 End Sub 本例中代碼描述了當(dāng)刺穿事件發(fā)生時(shí),氣球的行為。302面向?qū)ο蟮某绦蛟O(shè)計(jì)方法31某個(gè)實(shí)驗(yàn)里,每個(gè)銷售者都要同時(shí)提交兩個(gè)決定:選擇產(chǎn)品的銷售價(jià)格同時(shí)還要決定是否對(duì)產(chǎn)品價(jià)格作廣告 32在這個(gè)實(shí)驗(yàn)中的銷售者有可能先定價(jià)、再考慮是否作廣告,隨后將已經(jīng)做好的決定同時(shí)提交;也有可能是相反的次序,先決定是否作廣告、然后再定價(jià),隨后提交決策;還有可能,在最后提交決策之前她會(huì)改主意,比如她更改了初始選擇的價(jià)格實(shí)驗(yàn)程序中應(yīng)當(dāng)如何實(shí)現(xiàn)這樣的靈活性?面向?qū)ο蟮某绦蛟O(shè)計(jì)方法33傳統(tǒng)的程序設(shè)計(jì)方法如C語言,F(xiàn)ortran等,都是面向過程的、線性的

12、程序設(shè)計(jì)方法。新發(fā)展起來的Java,VB等語言,是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。 34面向過程的程序設(shè)計(jì)方法所強(qiáng)調(diào)的是如何完成某一任務(wù)。面向過程的程序設(shè)計(jì)中,編程人員要從完成任務(wù)的第一步直到最后一步安排計(jì)算機(jī)所執(zhí)行的每一個(gè)細(xì)節(jié)。在面向過程的程序的應(yīng)用過程中使用者沒有任何自主權(quán)、處于完全被動(dòng)的角色使用者無權(quán)決定提交信息和處理信息的次序 35而面向?qū)ο蟮模ɑ蚴录?qū)動(dòng)的)程序設(shè)計(jì)中編程人員圍繞著用戶界面中的對(duì)象進(jìn)行設(shè)計(jì)只有用戶對(duì)對(duì)象做出了某種動(dòng)作之后程序才會(huì)進(jìn)行特定的操作。程序的使用者自己控制提交信息和處理信息的次序。 36面向?qū)ο蟮某绦蛟O(shè)計(jì)大致要遵從下面五個(gè)步驟:對(duì)應(yīng)用程序進(jìn)行規(guī)劃;建立用戶界面;編寫程

13、序代碼(即計(jì)算機(jī)語句);對(duì)程序進(jìn)行測試;書寫程序文檔。37我們先著重介紹前兩個(gè)步驟,后三個(gè)步驟將在下一講經(jīng)濟(jì)實(shí)驗(yàn)程序開發(fā)實(shí)例中穿插說明。 38對(duì)應(yīng)用程序進(jìn)行規(guī)劃首先要識(shí)別該程序要完成哪些任務(wù)。在識(shí)別任務(wù)時(shí),對(duì)下述問題的回答會(huì)有幫助:實(shí)驗(yàn)參加者需要提交哪些信息?經(jīng)濟(jì)實(shí)驗(yàn)程序需要完成哪些計(jì)算和處理?在用戶界面上需要向?qū)嶒?yàn)參加者展示哪些信息?新的信息在用戶界面上出現(xiàn)時(shí),舊的信息是否會(huì)消失?實(shí)驗(yàn)程序在什么條件下會(huì)結(jié)束運(yùn)行?39對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定所要完成的任務(wù)究竟要通過哪些對(duì)象來實(shí)現(xiàn)。圖標(biāo)(Label)用于展示特定的標(biāo)識(shí)或運(yùn)算結(jié)果文本框(TextBox)用于采集信息。 40對(duì)應(yīng)用程序進(jìn)行規(guī)劃(

14、續(xù))確定哪些對(duì)象的哪些事件被觸發(fā)時(shí),程序所需要實(shí)現(xiàn)的任務(wù)會(huì)被完成。并不是所有的對(duì)象都需要事件觸發(fā)。你只需要針對(duì)部分對(duì)象的事件編寫程序,這些程序語句會(huì)在事件發(fā)生時(shí)執(zhí)行;而另外一些對(duì)象不需要你編程就能實(shí)現(xiàn)特定的任務(wù)。比如文本框(TextBox)不需要任何事件觸發(fā)就能實(shí)現(xiàn)采集信息的任務(wù)。 41對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))程序規(guī)劃步驟可以用任務(wù)(Task)、對(duì)象(Object),事件(Event)的分解圖(TOE)來實(shí)現(xiàn)。 42任務(wù)(Task)對(duì)象(Object)事件(Event)銷售者輸入價(jià)格信息文本框txtPrice無銷售者選擇作廣告選擇按鍵optRevoptRev_Click 點(diǎn)擊銷售者選擇不作廣告

15、選擇按鍵optNRevoptRev_Click 點(diǎn)擊同時(shí)提交價(jià)格與廣告決策命令按鍵cmdOKcmdOK_Click 點(diǎn)擊對(duì)應(yīng)用程序進(jìn)行規(guī)劃(續(xù))43用戶界面設(shè)計(jì)對(duì)VB來說用戶界面設(shè)計(jì)就是對(duì)窗體上的各個(gè)對(duì)象的排列安排。基本的原則:按照一定的順序排列對(duì)象,要么從上至下,要么從左到右。相關(guān)的對(duì)象放在相鄰位置(如示例中的optRev和optNRev)。涉及實(shí)驗(yàn)參加者提交決策的對(duì)象需要在醒目位置顯示。完成對(duì)各個(gè)對(duì)象的初步排列后,可以根據(jù)需要在對(duì)象的旁邊添加一些圖標(biāo)以說明各個(gè)對(duì)象的作用。44用戶界面設(shè)計(jì)(續(xù))45用戶界面設(shè)計(jì)(續(xù))46作業(yè):Programming with Visual Basic 6.0

16、 Enhanced Edition, Diane Zak, Tutorial 247三、變量、變量組和常量481. 變量49變量的作用是在程序的運(yùn)行過程中臨時(shí)記錄數(shù)據(jù)。變量中所存儲(chǔ)的數(shù)據(jù)在程序運(yùn)行中可以被改變。由于變量只在程序運(yùn)行中發(fā)揮作用,變量的生命周期不會(huì)超過程序的運(yùn)行周期。一個(gè)變量里只能存放一段數(shù)據(jù),將新的數(shù)據(jù)存入變量中勢必會(huì)抹去變量中原有的數(shù)據(jù)。50創(chuàng)建新變量51類型所存儲(chǔ)數(shù)據(jù)值的范圍Byte (字節(jié)型)二進(jìn)位數(shù)值0至255Boolean (布爾型)邏輯值真或偽(True or False)Currency (貨幣型)小數(shù)點(diǎn)前最多15位,小數(shù)點(diǎn)后最多4位的實(shí)數(shù)+/- 9E14Date

17、(日期型)日期和時(shí)間信息公元100年1月1日至公元9999年12月31日Double (雙精度)實(shí)數(shù)+/- 5E-324至1.8E308Integer (整型)整數(shù)-32768至32767Long (長整型)整數(shù)+/- 2000000000Object (對(duì)象型)VB中的對(duì)象Single (單精度)實(shí)數(shù)+/- 1E-45至3E38String (字符串型)文本信息最長65400個(gè)字符Variant (變體型)任意其它類型的數(shù)據(jù)其它類型數(shù)據(jù)的最大取值范圍52變量名的前綴:類型前綴BytebytBooleanblnCurrencycurDate(time)dtmDoubledblIntegerin

18、tLonglngObjectobjSinglesngStringstrVariantvnt53變量名必須以字母開頭。變量名中只能包含字母、數(shù)字和下劃線,其它任何字符都不允許在變量名中出現(xiàn)。變量名最長不能超過255個(gè)字符。不能用VB中的保留字作變量名。保留字在VB中有特定含義和功能,不能作其它用途。比如在VB中“Print”是打印命令,屬于保留字,不能充當(dāng)變量名。54Dim variablename As datatype 或Public variablename As datatype比如,我們需要記錄實(shí)驗(yàn)當(dāng)前的交易輪次。為達(dá)目的,我們可以創(chuàng)建一個(gè)整型變量“intRound”,定義該變量的語句

19、如下:Dim intRound As Integer55賦值56賦值是將數(shù)據(jù)存放到特定位置的過程。這個(gè)“特定位置”,既可以是某個(gè)對(duì)象的屬性,也可以是變量。賦值語句中的賦值符號(hào)為“=”,賦值號(hào)左側(cè)是數(shù)據(jù)存放的位置,而賦值號(hào)右側(cè)是數(shù)據(jù)。如:Label1.Caption = “Hello!”intRound = 10curPrice = 10.23原則上,數(shù)據(jù)要存放到與其類型一致的位置上去。57賦值語句的一個(gè)應(yīng)用技巧是累加。比如,intRound = 10intRound = intRound +5在創(chuàng)建新變量時(shí),VB自動(dòng)將空字符串賦予字符串型和變體型的變量,而那些數(shù)值類型的變量會(huì)被賦為“0”值。5

20、8變量的有效范圍59局部變量由Dim語句在事件內(nèi)定義。局部變量的生命周期是事件的發(fā)生過程。一旦事件結(jié)束,局部變量的使命告終。Private Sub lblHello_Click()Dim i As IntegerEnd Sub局部變量i只在lblHello_Click()內(nèi)有效。60窗體變量窗體變量的生命周期即窗體從載入到終止的周期。窗體變量對(duì)窗體內(nèi)所有對(duì)象都有效,能在不同對(duì)象、事件和過程之間傳遞數(shù)據(jù)。也由Dim語句定義。窗體變量在代碼窗口的通用聲明(General Declaration)區(qū)域定義。61全程變量全程變量的生命周期等同于程序的運(yùn)行周期。全程變量能在程序的多個(gè)窗體之間傳遞數(shù)據(jù)。用

21、Public語句在程序的代碼模塊中定義。代碼模塊是程序中的獨(dú)立文件,僅包含程序代碼。在菜單條中點(diǎn)擊“工程” 并選擇“添加模塊”,在彈出的對(duì)話窗口中選擇新建模塊,一個(gè)新的代碼模塊Module1就會(huì)被添加到工程中。全程變量的定義位置是代碼模塊的通用聲明區(qū)域。 62Option Explicit語句63VB允許程序開發(fā)者對(duì)變量隨用隨定義。Option Explicit語句的作用是禁止在程序中運(yùn)用未經(jīng)正式定義的變量。具體做法:在工程下所有窗體和代碼模塊的通用聲明區(qū)域輸入Option Explicit語句,并緊隨該語句對(duì)變量進(jìn)行定義。64Option ExplicitDim i, j, k As Int

22、egerDim strName As String652. 變量組66變量組是相互關(guān)聯(lián)的一組變量,這些變量有相同的名稱和相同的數(shù)據(jù)類型。程序開發(fā)人員運(yùn)用變量組在內(nèi)存中暫時(shí)存取數(shù)據(jù);運(yùn)用變量組的優(yōu)勢是用它存取數(shù)據(jù)的速度遠(yuǎn)高于在外部存儲(chǔ)設(shè)備中存取數(shù)據(jù)的速度。 67Dim arrayname(lower subscript To upper subscript,, lower subscript To upper subscript) As datatype 或Public arrayname(lower subscript To upper subscript,,lower subscript T

23、o upper subscript) As datatype68“arrayname”是變量組的名稱。對(duì)變量組的命名規(guī)定與對(duì)變量的命名規(guī)定類同。“l(fā)ower subscript To upper subscript”表示變量組的一個(gè)維。VB最高允許定義60維的變量組。在變量組中的各個(gè)變量通過變量組的名稱和下標(biāo)識(shí)別。變量組的有效范圍以及Option Explicit語句的應(yīng)用完全類同于之前對(duì)變量的介紹。69某實(shí)驗(yàn)的每個(gè)交易回合中市場上的三個(gè)銷售者同時(shí)選擇各自的出價(jià),而實(shí)驗(yàn)一共要進(jìn)行10個(gè)交易回合。用二維變量組curPrice來記錄出價(jià),定義該變量組的語句如下:Dim curPrice(1 To

24、10, 1 To 3) As CurrencycurPrice的第一組下標(biāo)指示交易的輪次,而第二組下標(biāo)指示的是銷售者。703. 常量71有些實(shí)驗(yàn)參數(shù)在更改實(shí)驗(yàn)條件時(shí)需要修正,而這些實(shí)驗(yàn)參數(shù)在同一實(shí)驗(yàn)中卻是固定不變的常量。這就需要實(shí)驗(yàn)程序在一開始的地方對(duì)這些常量參數(shù)進(jìn)行定義,定義符號(hào)常量的語句格式如下:Public Const constname As datatype = expression符號(hào)常量需要在VB的代碼模塊的通用聲明區(qū)域中定義,其有效范圍是程序運(yùn)行的全程。72作業(yè):Programming with Visual Basic 6.0 Enhanced Edition, Diane

25、Zak, Tutorial 373四、選擇結(jié)構(gòu)74程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)中,程序的語句按照出現(xiàn)的先后次序,由前到后一個(gè)接一個(gè)地被執(zhí)行。選擇結(jié)構(gòu)中,程序根據(jù)某個(gè)比較結(jié)果選擇執(zhí)行語句的路徑。循環(huán)結(jié)構(gòu)中,某些語句會(huì)被執(zhí)行若干次、或直到某個(gè)特定的條件被滿足時(shí)才會(huì)停止執(zhí)行這些語句。 75根據(jù)實(shí)驗(yàn)參與者的選擇做出判斷,來決定每個(gè)人的所得。最后通牒對(duì)策,在10元的潛在收益中,提議者建議自己得到X元,而回應(yīng)者得到1 X元。在見到提案以后,如果回應(yīng)者接受這個(gè)提案,那么就按照提案來分配所得;如果回應(yīng)者拒絕這個(gè)提案,則提議者和回應(yīng)者的收益全部為零。在回應(yīng)者見到提案后,實(shí)驗(yàn)程序如何

26、根據(jù)回應(yīng)者“接受”或“拒絕”的選擇來決定提議者和回應(yīng)者的所得? 761基本選擇結(jié)構(gòu):IfThenElse語句77IfThenElse語句是VB中最基本的選擇結(jié)構(gòu)。語句格式如下:If condition Theninstructions when the condition is trueElseinstructions when the condition is falseEnd If78“condition”是條件表達(dá)式,其值只可能是“真”或“偽”(True or False)。如果條件表達(dá)式的值為“真”,那么“Then”以后的語句將被執(zhí)行;如果條件表達(dá)式的值為“偽”,那么“Else”以后的

27、語句將被執(zhí)行。“End If”表示選擇結(jié)構(gòu)的結(jié)束。需要注意的是,IfThenElse語句中不一定包括“Else” 和“Else”以后的語句。在這種情況下,當(dāng)條件表達(dá)式為“偽”時(shí)直接進(jìn)行“End If”之后的操作,而選擇結(jié)構(gòu)內(nèi)部不進(jìn)行任何操作。 79注意:我們在介紹VB的語句格式的時(shí)候,方括號(hào)里的內(nèi)容為可選內(nèi)容,編程人員根據(jù)需要來決定是否選用這些內(nèi)容。如果某語句格式的方括號(hào)里的內(nèi)容在編程中被省略掉,VB也不會(huì)將其視作語法錯(cuò)誤。80條件表達(dá)式中可包括變量、常量、對(duì)象的屬性、函數(shù)、數(shù)學(xué)運(yùn)算符,關(guān)系運(yùn)算符以及邏輯運(yùn)算符。81關(guān)系運(yùn)算符82VB中有6種關(guān)系運(yùn)算符:=,=,=,。包含關(guān)系運(yùn)算符的表達(dá)式的返

28、回值只可能是“真”或“偽”。 各個(gè)關(guān)系運(yùn)算符之間并沒有優(yōu)先次序,在表達(dá)式中對(duì)它們按照從左到右的順序進(jìn)行處理。關(guān)系運(yùn)算符的處理優(yōu)先級(jí)要低于數(shù)學(xué)運(yùn)算符的優(yōu)先級(jí)數(shù)學(xué)運(yùn)算符的優(yōu)先順序是先處理乘方,再處理乘除,最后處理加減。 83表達(dá)式1:10 + 3 5 * 2處理順序:首先計(jì)算5 * 2,得到10;隨后計(jì)算10 + 3,得到13;最后判斷不等式13 3 * 4 / 2處理順序:首先計(jì)算3 * 4,得到12;隨后計(jì)算12 / 2,得到6;最后判斷不等式7 6的真?zhèn)危祷刂禐椤罢妗保═rue)。 84UCase函數(shù)和LCase函數(shù) 85在VB中進(jìn)行字符串比較時(shí),如果兩個(gè)字符串所包含的字母相同、但字母的大

29、小寫有所區(qū)別,那么VB會(huì)判定兩個(gè)字符串不同。如何在對(duì)比兩個(gè)字符串的時(shí)候忽略字母大小寫的區(qū)別? 86UCase函數(shù)的語句格式是UCase(String),其中“String”是一個(gè)任意的字符串。UCase(String)所返回的是一個(gè)新的字符串,新字符串將原字符串“String”中所有的小寫字母都轉(zhuǎn)換成大寫。UCase函數(shù)既可以出現(xiàn)在關(guān)系運(yùn)算符的左側(cè),也可以出現(xiàn)在關(guān)系運(yùn)算符的右側(cè)。但是在賦值語句中,UCase函數(shù)只能出現(xiàn)在賦值號(hào)的右側(cè)。87LCase函數(shù)的語句格式是LCase(String),它的作用是將原字符串中所有的大寫字母都轉(zhuǎn)換成小寫。 88邏輯運(yùn)算符89Not,And,Or,是VB中最常

30、見的邏輯運(yùn)算符。各邏輯運(yùn)算符的優(yōu)先次序?yàn)镹ot,And,Or。邏輯運(yùn)算符在表達(dá)式中的優(yōu)先次序在數(shù)學(xué)運(yùn)算符和關(guān)系運(yùn)算符之后。 Not的作用是將條件表達(dá)式的值反轉(zhuǎn);若干個(gè)由And運(yùn)算符連接起來的條件表達(dá)式,只有在每個(gè)條件表達(dá)式都為“真”的情況下,被連接起來的復(fù)合條件表達(dá)式才為“真”;若干個(gè)由Or運(yùn)算符連接起來的條件表達(dá)式,只要其中有一個(gè)條件表達(dá)式為“真”,被連接起來的復(fù)合條件表達(dá)式就會(huì)為“真”。 90表達(dá)式1:3 2 And 6 5處理順序:首先判斷不等式3 2的真?zhèn)危祷刂禐椤罢妗保═rue);隨后判斷不等式6 5的真?zhèn)危祷刂禐椤罢妗保═rue);最后判斷True And True,得到返回值

31、“真”。表達(dá)式2:10 5 + 1處理順序:先計(jì)算5 + 1,得到6;隨后判斷不等式10 6的真?zhèn)危祷刂禐椤皞巍保‵alse);最后評(píng)價(jià)True And False,得到返回值“偽”。91表達(dá)式3:8 = 4 * 2 Or 6 5 + 1處理順序:先計(jì)算4 * 2,得到8;隨后判斷等式8 = 8的真?zhèn)危祷刂禐椤罢妗保═rue);由于Or運(yùn)算符左側(cè)的條件表達(dá)式為“真”,條件表達(dá)式3整體的返回值也為“真”。92所有包含邏輯運(yùn)算符的表達(dá)式的返回值只可能是“真”或“偽”。如果你用And運(yùn)算符連接兩個(gè)條件表達(dá)式,而And運(yùn)算符左側(cè)的條件表達(dá)式的值為“偽”時(shí),VB將不再判斷And運(yùn)算符右側(cè)的條件表達(dá)式

32、的真?zhèn)巍n愃频兀绻阌肙r運(yùn)算符連接兩個(gè)條件表達(dá)式,而Or運(yùn)算符左側(cè)的條件表達(dá)式的值為“真”時(shí),VB將不再判斷Or運(yùn)算符右側(cè)的條件表達(dá)式的真?zhèn)巍?32IfThenElse語句基礎(chǔ)上的層次選擇結(jié)構(gòu)94層次選擇結(jié)構(gòu)是指在某個(gè)選擇結(jié)構(gòu)中,根據(jù)條件表達(dá)式的判定結(jié)果所選擇的某一條操作路徑上嵌入了另一個(gè)選擇結(jié)構(gòu)。 95示例1:在某個(gè)價(jià)格競爭的實(shí)驗(yàn)中,我們用變量sngCost表示銷售者的成本,用變量intSellerID表示銷售者的識(shí)別號(hào)碼。1號(hào)銷售者和3號(hào)銷售者的成本是1.2元,2號(hào)銷售者的成本是1.5元,而其他所有銷售者的成本都是1.8元。我們需要用層次選擇結(jié)構(gòu)對(duì)變量sngCost賦值。 96If i

33、ntSellerID = 1 Or intSellerID = 3 ThensngCost = 1.2ElseIf intSellerID = 2 ThensngCost = 1.5ElsesngCost = 1.8End IfEnd If97示例2:在某個(gè)激勵(lì)機(jī)制的實(shí)驗(yàn)中,針對(duì)不同銷售者的激勵(lì)辦法各不相同。如果1號(hào)銷售者的銷售收入達(dá)到10000實(shí)驗(yàn)幣,那么她將在實(shí)驗(yàn)結(jié)束后得到500實(shí)驗(yàn)幣的獎(jiǎng)勵(lì);如果她的銷售收入達(dá)不到10000實(shí)驗(yàn)幣,她在實(shí)驗(yàn)后得到的獎(jiǎng)勵(lì)是200實(shí)驗(yàn)幣。如果2號(hào)銷售者的銷售收入達(dá)到20000實(shí)驗(yàn)幣,那么他將在實(shí)驗(yàn)結(jié)束后得到600實(shí)驗(yàn)幣的獎(jiǎng)勵(lì);如果他的銷售收入達(dá)不到20000實(shí)

34、驗(yàn)幣,他在實(shí)驗(yàn)后得到的獎(jiǎng)勵(lì)是550實(shí)驗(yàn)幣。其他所有銷售者得到固定獎(jiǎng)勵(lì)150實(shí)驗(yàn)幣。變量intSellerID表示銷售者的識(shí)別號(hào)碼,sngSales表示實(shí)驗(yàn)中的銷售收入,sngBonus表示對(duì)銷售者的獎(jiǎng)勵(lì)。98If intSellerID = 1 ThenIf sngSales = 10000 thensngBonus = 500ElsesngBonus = 200End IfElseIf intSellerID = 2 ThenIf sngSales = 20000 ThensngBonus = 600ElsesngBonus = 550End IfElsesngBonus = 150End

35、IfEnd If99If intSellerID = 1 And sngSales = 10000 ThensngBonus = 500ElseIf intSellerID = 1 And sngSales = 20000 ThensngBonus = 600ElseIf intSellerID = 2 And sngSales =a instructions for the case of =aEnd Select106示例1:Select Case intSellerIDCase 1, 3sngCost = 1.2Case 2sngCost = 1.5Case ElsesngCost =

36、1.8End Select107示例2:Select Case intSellerIDCase 1Select Case sngSalesCase Is = 10000sngBonus = 500Case ElsesngBonus = 200End SelectCase 2Select Case sngSalesCase Is = 20000sngBonus = 600Case ElsesngBonus = 550End SelectCase ElsesngBonus = 150End Select108示例2:Select Case TrueCase intSellerID = 1 And

37、sngSales = 10000sngBonus = 500Case intSellerID = 1 And sngSales = 20000sngBonus = 600Case intSellerID = 2 And sngSales 20000sngBonus = 550Case ElsesngBonus = 150End Select109作業(yè):Programming with Visual Basic 6.0 Enhanced Edition, Diane Zak, Tutorial 4110五、循環(huán)結(jié)構(gòu)111在實(shí)驗(yàn)中,所進(jìn)行的交易回合往往不止一輪。交易回合開始,要將基本信息發(fā)送給實(shí)驗(yàn)

38、參加者:輪次,銷售者的成本、購買者的保有價(jià)格,等等。交易回合結(jié)束,要將交易結(jié)果發(fā)送給實(shí)驗(yàn)參加者:實(shí)驗(yàn)參加者本輪的決策、其他參加者的決策,實(shí)驗(yàn)參加者本人本輪的所得,到目前為止的累積所得,等等。用實(shí)驗(yàn)程序來實(shí)現(xiàn)這些任務(wù)需要進(jìn)行一些重復(fù)性操作,這就涉及到了循環(huán)結(jié)構(gòu)。 112循環(huán)結(jié)構(gòu)中,某些語句會(huì)被執(zhí)行若干次、或直到某個(gè)特定的條件被滿足時(shí)才會(huì)停止執(zhí)行這些語句。三種基本形式:For Next循環(huán)Do While循環(huán)Do Until循環(huán)1131For Next循環(huán)114For Next循環(huán)的作用是將某些特定的操作重復(fù)執(zhí)行一定的次數(shù),其語法格式如下:For counter = startvalue to e

39、ndvalue Step stepvalueinstructionsNext counter115“Counter”是一個(gè)數(shù)值類型的變量“startvalue”是循環(huán)的初始值,“endvalue”是循環(huán)的終值,而“stepvalue”是循環(huán)的步長。循環(huán)的初始值,終值和步長都必須是數(shù)值,這些數(shù)值既可以是正數(shù),也可以是負(fù)數(shù)。如果編程人員省略了對(duì)循環(huán)的步長的定義,則VB自動(dòng)將循環(huán)的步長規(guī)定為1。116For Next循環(huán)按照如下步驟運(yùn)行:第一步,在循環(huán)開始的時(shí)候,將循環(huán)的初始值“startvalue”賦予變量“Counter”。這一操作只進(jìn)行一次。117第二步,如果步長“stepvalue”為正,則

40、需要判定變量“Counter”的值是否大于循環(huán)的終值“endvalue”(如果步長“stepvalue”為負(fù),則是相反的情況,需要判定變量“Counter”的值是否小于循環(huán)的終值“endvalue”)。如果判定結(jié)果為“真”,則循環(huán)終止;如果判定結(jié)果為“偽”,則循環(huán)內(nèi)的操作“instructions”將被執(zhí)行。118第三步,將步長值“stepvalue”加入到變量“Counter”中,并返回到上述第二步。直到變量“Counter”的值大于終值“endvalue”(若步長為負(fù),則變量“Counter”的值小于終值“endvalue”)的時(shí)候,循環(huán)結(jié)束。 119For Next循環(huán)示例:在某實(shí)驗(yàn)中有

41、12名實(shí)驗(yàn)參加者參與,每個(gè)人在實(shí)驗(yàn)開始時(shí)得到150實(shí)驗(yàn)幣的啟動(dòng)資金。我們用一維變量組sngTPayoff(1 to 12)來表示12個(gè)實(shí)驗(yàn)參加者的累積所得,其中的變量sngTPayoff(i)是第i個(gè)實(shí)驗(yàn)參加者的累積所得。現(xiàn)在將各個(gè)實(shí)驗(yàn)參加者的累積所得初始化為150個(gè)實(shí)驗(yàn)幣。120Dim i As IntegerDim sngTPayoff(1 To 12) As SingleFor i = 1 to 12sngTPayoff(i) = 150Next i1212Do While循環(huán)和Do Until循環(huán)122Do While語句中,當(dāng)循環(huán)的判定條件為真時(shí),重復(fù)執(zhí)行循環(huán)內(nèi)的操作;Do Unti

42、l語句重復(fù)執(zhí)行循環(huán)內(nèi)的操作,直到循環(huán)的判定條件為真時(shí)終止。Do While循環(huán)和Do Until循環(huán)都能夠?qū)崿F(xiàn)For Next循環(huán)中,將某些操作重復(fù)執(zhí)行特定次數(shù)的功能。123Do While循環(huán)的語句格式為:Do While conditionloop instructionsLoopDo Until循環(huán)的語句格式為:Do loop instructionsLoop Until condition124循環(huán)的條件“condition”可包含變量、常量、函數(shù)、對(duì)象的屬性以及各種運(yùn)算符,“condition”的返回值必須是“真”或“偽”。在Do While循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“conditi

43、on”的值為“真”時(shí),循環(huán)內(nèi)的操作“l(fā)oop instructions”才會(huì)被執(zhí)行;Do Until循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“condition”的值為“偽”時(shí),循環(huán)內(nèi)的操作“l(fā)oop instructions”才會(huì)被執(zhí)行,一旦“condtion”為“真”則循環(huán)終止。 125Do While循環(huán)也被稱作前試循環(huán)。For Next循環(huán)也是一種前試循環(huán)。Do Until循環(huán)也被稱作后試循環(huán)。Do Until循環(huán)內(nèi)的操作至少會(huì)被執(zhí)行一次。126用Do While語句完成示例:Dim i As IntegerDim sngTPayoff(1 To 12) As Singlei = 1Do While

44、 i 121283計(jì)數(shù)器和累加器129計(jì)數(shù)器和累加器是循環(huán)結(jié)構(gòu)最常見的兩種應(yīng)用。計(jì)數(shù)器用于統(tǒng)計(jì)數(shù)量,比如在某個(gè)實(shí)驗(yàn)的某個(gè)回合,究竟有多少實(shí)驗(yàn)參加者選擇了納什均衡策略?而累加器用于求和,比如實(shí)驗(yàn)進(jìn)行了5輪以后某個(gè)實(shí)驗(yàn)參加者的累積所得是多少? 130計(jì)數(shù)器和累加器都需要初始化和更新。初始化是指為計(jì)數(shù)器和累加器賦初始值。多數(shù)情況下,計(jì)數(shù)器和累加器會(huì)被初始化為0或1。更新是指將新的數(shù)值加入到計(jì)數(shù)器或累加器中。計(jì)數(shù)器每次的更新為常量,而累加器的更新為變量。更新在循環(huán)內(nèi)進(jìn)行,而初始化在更新所在的循環(huán)開始之前進(jìn)行。 131計(jì)數(shù)器示例:某實(shí)驗(yàn)有12名參加者,共進(jìn)行20個(gè)回合。在每個(gè)回合里,各實(shí)驗(yàn)參加者要在選項(xiàng)

45、“A”與“B”之間選一個(gè)。現(xiàn)所有參加者在各個(gè)回合中的選擇都已被存入二維變量組strChoice(1 to 12, 1 to 20)。其中變量strChoice(i, j)是指第i個(gè)實(shí)驗(yàn)參加者在第j個(gè)回合所作的選擇。現(xiàn)在我們需要構(gòu)造一個(gè)新的計(jì)數(shù)器變量組intChoiceA(1 to 20),用于統(tǒng)計(jì)在各回合中選擇“A”的實(shí)驗(yàn)參加者的人數(shù)。132Dim i, j As IntegerDim intChoiceA(1 To 20) As IntegerFor i = 1 to 20intChoiceA(i) = 0For j = 1 to 12If strChoice(j, i) = “A” The

46、nintChoiceA(i) = intChoiceA(i) + 1End IfNext jNext i 133累加器示例:某實(shí)驗(yàn)有12名參加者,共進(jìn)行20個(gè)回合。現(xiàn)所有參加者在各個(gè)回合中的所得都已被存入二維變量組sngPayoff(1 to 12, 1 to 20)。sngPayoff(i, j)是指第i個(gè)實(shí)驗(yàn)參加者在第j個(gè)回合的所得。現(xiàn)在需要計(jì)算各個(gè)實(shí)驗(yàn)參加者在實(shí)驗(yàn)結(jié)束后的累積所得,由變量組sngTPayoff(1 to 12)表示。其中變量sngTPayoff(i) 是第i個(gè)實(shí)驗(yàn)參加者的累積所得。每個(gè)實(shí)驗(yàn)參加者在第一回合開始時(shí)的啟動(dòng)資金皆為150個(gè)實(shí)驗(yàn)幣。 134Dim i, j As

47、IntegerDim sngTPayoff(1 To 12) As SingleFor i = 1 to 12sngTPayoff(i) = 150For j = 1 to 20sngTPayoff(i) = sngTPayoff(i)+ sngPayoff(i, j) Next jNext i 135六、對(duì)數(shù)據(jù)的存取136研究人員需要記錄實(shí)驗(yàn)參加者在實(shí)驗(yàn)中的決策和所得。變量和變量組能起到在程序運(yùn)行過程中臨時(shí)存取數(shù)據(jù)的作用。程序一旦結(jié)束運(yùn)行,變量和變量組就會(huì)從計(jì)算機(jī)內(nèi)存中消失,所存放的數(shù)據(jù)也隨之消失。為避免數(shù)據(jù)丟失,研究人員需要把實(shí)驗(yàn)數(shù)據(jù)長久保存在數(shù)據(jù)文件中。1371數(shù)據(jù)文件138程序文件所包

48、含的是實(shí)現(xiàn)一系列操作的指令的集合。VB工程文件與工程文件關(guān)聯(lián)的窗體文件和代碼模塊數(shù)據(jù)文件專門用于承載信息,由數(shù)據(jù)領(lǐng)域和數(shù)據(jù)記錄構(gòu)成。139數(shù)據(jù)領(lǐng)域又被稱作數(shù)據(jù)元素,是一段無法繼續(xù)細(xì)分的信息。實(shí)驗(yàn)參加者的識(shí)別號(hào)碼交易的輪次實(shí)驗(yàn)參加者的角色數(shù)據(jù)記錄是一系列相關(guān)聯(lián)的數(shù)據(jù)領(lǐng)域的組合。在經(jīng)濟(jì)實(shí)驗(yàn)中,一條數(shù)據(jù)記錄就是某個(gè)實(shí)驗(yàn)參加者在某個(gè)輪次的全部實(shí)驗(yàn)結(jié)果。囚徒困境對(duì)策實(shí)驗(yàn):數(shù)據(jù)記錄中包括輪次,實(shí)驗(yàn)參加者的識(shí)別號(hào),與其配對(duì)的參加者的識(shí)別號(hào),實(shí)驗(yàn)參加者的決策,與其配對(duì)的參加者的決策,實(shí)驗(yàn)參加者本輪所得以及實(shí)驗(yàn)參加者的累積所得。數(shù)據(jù)文件是相關(guān)聯(lián)的數(shù)據(jù)記錄的集合。在經(jīng)濟(jì)實(shí)驗(yàn)中,數(shù)據(jù)文件包括所有實(shí)驗(yàn)參加者在所有輪次

49、中的全部實(shí)驗(yàn)結(jié)果。140經(jīng)濟(jì)實(shí)驗(yàn)中最常用到的數(shù)據(jù)文件是順序存取的數(shù)據(jù)文件。對(duì)順序存取的數(shù)據(jù)文件中的數(shù)據(jù)記錄只能依次按順序處理。音樂磁帶:只能按照順序播放樂曲,不能隨意跳轉(zhuǎn)到喜愛的樂曲。順序存取的文件易于創(chuàng)建,也易于操作。 1412對(duì)順序存取的數(shù)據(jù)文件的基本操作142順序存取的數(shù)據(jù)文件的文件類型143VB中最常用的順序存取的數(shù)據(jù)文件是以“*.txt”的后綴為結(jié)尾的文本文件。文本文件的一行為一條數(shù)據(jù)記錄。數(shù)據(jù)記錄的各個(gè)數(shù)據(jù)領(lǐng)域之間用逗號(hào)分割開。如果某數(shù)據(jù)領(lǐng)域?yàn)樽址谧址庖由想p引號(hào)。上述格式的文本文件可以直接用Microsoft Excel打開。 144打開文件 145打開順序存取的數(shù)據(jù)文

50、件要用到Open語句,其格式如下:Open pathname For mode As # filenumber146“pathname”是所打開的數(shù)據(jù)文件的名稱文件名中要包括該文件在你的計(jì)算機(jī)上存儲(chǔ)位置的路徑。要用引號(hào)將包含硬盤符號(hào)、路徑以及文件名的pathname括起來。147“mode”是數(shù)據(jù)文件打開的模式Input為輸入模式,把數(shù)據(jù)文件中的數(shù)據(jù)記錄讀入到程序中。如果數(shù)據(jù)文件不存在,VB會(huì)返回出錯(cuò)信息。Output即輸出模式,創(chuàng)建新的數(shù)據(jù)文件并將數(shù)據(jù)記錄存入新文件中。如果數(shù)據(jù)文件已經(jīng)存在,VB將抹去數(shù)據(jù)文件中原有的內(nèi)容。Append即附加模式,打開已有的數(shù)據(jù)文件并在該文件的末尾附加新的數(shù)據(jù)

51、記錄。如果數(shù)據(jù)文件不存在,VB會(huì)在相應(yīng)目錄下創(chuàng)建新的數(shù)據(jù)文件。148“filenumber”是你賦予數(shù)據(jù)文件的識(shí)別號(hào)碼。“filenumber”必須是1到511之間的整數(shù)(包括1和511)。數(shù)據(jù)文件在被編程人員打開期間,其識(shí)別號(hào)碼是唯一的。(VB最多能同時(shí)打開511個(gè)數(shù)據(jù)文件)。149VB運(yùn)用記錄指針來確定下一個(gè)要被處理的數(shù)據(jù)記錄的位置。用輸入模式打開數(shù)據(jù)文件時(shí),記錄指針指向文件的起點(diǎn)、第一條數(shù)據(jù)記錄之前;用輸出模式打開數(shù)據(jù)文件時(shí),記錄指針指向空文件的開端;用附加模式打開數(shù)據(jù)文件時(shí),記錄指針指向文件的末尾、最后一條數(shù)據(jù)記錄的后面。當(dāng)前的數(shù)據(jù)記錄處理完畢,記錄指針指向下一條數(shù)據(jù)記錄。150打開文

52、件示例:在某實(shí)驗(yàn)中,你需要在“D:Experiment”路徑下創(chuàng)建一個(gè)新的順序存取的數(shù)據(jù)文件Result.txt以記錄實(shí)驗(yàn)結(jié)果。程序如下,Open D:ExperimentResult.txt For Output As #1151關(guān)閉文件152文件中的所有數(shù)據(jù)記錄已被處理完成之后,需要用Close語句來關(guān)閉文件:Close # filenumber“filenumber”是某個(gè)已經(jīng)被打開的數(shù)據(jù)文件的識(shí)別號(hào)碼。如果Close語句中不包括任一個(gè)數(shù)據(jù)文件的識(shí)別號(hào)碼,那么所有在VB中已被打開的數(shù)據(jù)文件都將關(guān)閉。153關(guān)閉文件示例:如果需要關(guān)閉打開文件示例中的Result.txt,你需要在程序中書寫如

53、下語句:Close # 1154從文件中讀取數(shù)據(jù)155用Input語句從數(shù)據(jù)文件中讀取數(shù)據(jù)記錄,其格式如下:Input # filenumber, variablelist156其中“filenumber”是某個(gè)已經(jīng)被打開的數(shù)據(jù)文件的識(shí)別號(hào)碼。“variablelist”是變量的列表。當(dāng)變量的列表中包括多個(gè)變量時(shí),各個(gè)變量之間用逗號(hào)分割開。變量列表中的各變量分別對(duì)應(yīng)于數(shù)據(jù)記錄的各個(gè)數(shù)據(jù)領(lǐng)域。變量列表中變量的數(shù)量以及各變量的數(shù)據(jù)類型必須與數(shù)據(jù)記錄中數(shù)據(jù)領(lǐng)域的數(shù)量和數(shù)據(jù)類型相一致。各變量在變量列表中的順序也必須與數(shù)據(jù)記錄中各數(shù)據(jù)領(lǐng)域的順序相一致。157從文件中讀取數(shù)據(jù)示例:最后通牒博弈實(shí)驗(yàn)有10名

54、實(shí)驗(yàn)參加者參與,5名提議者和5名回應(yīng)者。在數(shù)據(jù)文件“D:ExperimentMatching.txt”中存放著10名實(shí)驗(yàn)參加者的配對(duì)方式。文件Matching.txt的內(nèi)容如下,1,102,93,84,75,6158該文件中有5條數(shù)據(jù)記錄,每個(gè)數(shù)據(jù)記錄有兩個(gè)數(shù)據(jù)領(lǐng)域,前一個(gè)數(shù)據(jù)領(lǐng)域是提議者的識(shí)別號(hào)碼,而后一個(gè)數(shù)據(jù)領(lǐng)域是與之配對(duì)的回應(yīng)者的識(shí)別號(hào)碼。我們需要將提議者的識(shí)別號(hào)碼讀入變量組Proposer(1 to 5)中,相應(yīng)的回應(yīng)者識(shí)別號(hào)碼讀入變量組Responder(1 to 5)中。159Dim i As IntegerDim Proposer(1 To 5) As Integer, Resp

55、onder(1 To 5) As IntegerOpen D:ExperimentMatching.txt For Input As #1For i=1 to 5Input #1, Proposer(i), Responder(i)Next iClose #1160向文件存入數(shù)據(jù)161用Write語句向數(shù)據(jù)文件存入數(shù)據(jù)記錄,其格式如下:Write # filenumber, outputlist162“filenumber”是某個(gè)已經(jīng)被打開的數(shù)據(jù)文件的識(shí)別號(hào)碼。“outputlist”是輸出列表,輸出列表中既可以包含數(shù)字、字符串,也可以包含變量。當(dāng)輸出列表中含有多個(gè)分量時(shí),各分量之間用逗號(hào)分割

56、。對(duì)輸出列表的規(guī)定與Input語句中關(guān)于變量列表的規(guī)定類似。如果輸出列表中包括字符串,字符串外要加上雙引號(hào)。如果輸出列表中包括字符型的變量,在該變量外不要加引號(hào)。 163向文件存入數(shù)據(jù)示例:在10名參加者參與的最后通牒博弈實(shí)驗(yàn)完成配對(duì)后,提議者提出分配10元現(xiàn)金的提案,而回應(yīng)者選擇接受或拒絕。當(dāng)所有參加者都作出了選擇以后,研究人員要把實(shí)驗(yàn)結(jié)果記錄到文件“D:ExperimentResult.txt”中去。Role(i)是第i個(gè)實(shí)驗(yàn)參加者的角色,Group(i)是第i個(gè)實(shí)驗(yàn)參加者所在的組的序號(hào),F(xiàn)Choice(i) 是第i個(gè)實(shí)驗(yàn)參加者所在的組內(nèi)的提議者所作出的選擇,SChoice(i) 是第i個(gè)

57、實(shí)驗(yàn)參加者所在的組內(nèi)的回應(yīng)者所作出的選擇,Payoff(i)是第i個(gè)實(shí)驗(yàn)參加者的所得。我們需要把這些變量組中的數(shù)據(jù)存入到數(shù)據(jù)文件中。 164Open D:Experimentresult.txt For Output As #1Write #1, ID, Role, Group, First Movers Choice, Second Movers Choice, Payoff For i = 1 to 10Write #1, i, Role(i), Group(i), FChoice(i), SChoice(i), Payoff(i)Next iClose #11653EOF函數(shù)166EOF

58、函數(shù)用于判定VB的記錄指針是否已指向數(shù)據(jù)文件的最后一條數(shù)據(jù)記錄之后,即數(shù)據(jù)文件是否已被處理完畢。EOF是“End of File”的縮寫。EOF函數(shù)的格式如下:EOF(filenumber)167“filenumber”是某個(gè)已被打開的數(shù)據(jù)文件的識(shí)別號(hào)。EOF函數(shù)返回布爾型值。若記錄指針已指向識(shí)別號(hào)為“filenumber”的數(shù)據(jù)文件的末尾(即最后一條數(shù)據(jù)記錄之后),則EOF函數(shù)的返回值為“真”,否則EOF函數(shù)的返回值為“偽”。 168EOF函數(shù)常作為判定條件與循環(huán)語句相結(jié)合,如:Do While Not EOF(1)loop instructionsLoop或Do loop instruct

59、ionsLoop Until EOF(1)169七、運(yùn)用ESL Network Queue處理實(shí)驗(yàn)中的信息傳遞170經(jīng)濟(jì)實(shí)驗(yàn)中最常遇見的問題是信息傳遞。所有實(shí)驗(yàn)參加者在實(shí)驗(yàn)過程中通過實(shí)驗(yàn)程序所做出的決策,都要傳遞給研究人員并被記錄下來。許多實(shí)驗(yàn)設(shè)計(jì)中,部分或全部實(shí)驗(yàn)參加者的決策在特定條件下會(huì)被其他實(shí)驗(yàn)參加者觀察到。如何通過實(shí)驗(yàn)程序?qū)崿F(xiàn)? 171ESL Network Queue是專門處理實(shí)驗(yàn)中信息傳遞問題的VB控件。該控件大幅度降低了信息傳遞的任務(wù)難度。通過該控件,只需要在程序中鍵入一些簡單的命令就能夠經(jīng)網(wǎng)絡(luò)傳遞信息。 1721信息傳遞的基本架構(gòu)173信息傳遞的物理結(jié)構(gòu) 在實(shí)驗(yàn)室中,研究人員所

60、占用的計(jì)算機(jī)被稱作“服務(wù)器”。服務(wù)器要與實(shí)驗(yàn)參加者保持距離,以免實(shí)驗(yàn)參加者窺視到服務(wù)器上的信息。服務(wù)器所處的位置要便于研究人員觀察到實(shí)驗(yàn)參加者的活動(dòng)。為滿足這樣的要求,實(shí)驗(yàn)經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室通常被分成實(shí)驗(yàn)區(qū)和控制區(qū)兩個(gè)區(qū)域。 在實(shí)驗(yàn)區(qū)內(nèi),每個(gè)實(shí)驗(yàn)參加者占用一臺(tái)計(jì)算機(jī)。實(shí)驗(yàn)經(jīng)濟(jì)學(xué)實(shí)驗(yàn)室的計(jì)算機(jī)數(shù)量依情況而定。 174實(shí)驗(yàn)者(即研究人員)與實(shí)驗(yàn)參加者之間信息傳遞的關(guān)系 PC 1實(shí)驗(yàn)參加者1服務(wù)器(實(shí)驗(yàn)者)PC n實(shí)驗(yàn)參加者n175在網(wǎng)絡(luò)中,服務(wù)器是信息傳遞的中心,與n個(gè)實(shí)驗(yàn)參加者相連。實(shí)驗(yàn)參加者各自占用一臺(tái)計(jì)算機(jī),編號(hào)從PC1到PCn。每一個(gè)實(shí)驗(yàn)參加者只能向服務(wù)器提交信息,也只能從服務(wù)器獲得信息。服務(wù)器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論