版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《實驗經(jīng)濟(jì)學(xué)》第七講:
經(jīng)濟(jì)實驗程序開發(fā)方法財經(jīng)大學(xué)經(jīng)濟(jì)學(xué)院-經(jīng)濟(jì)學(xué)實驗室1《實驗經(jīng)濟(jì)學(xué)》第七講:
經(jīng)濟(jì)實驗程序開發(fā)方法1確保實驗結(jié)果的有效性,實驗室實驗通常兩小時內(nèi)結(jié)束人力組織十幾個甚至二十幾個交易回合每個交易回合隨機配對怎么辦?開發(fā)計算機程序2確保實驗結(jié)果的有效性,實驗室實驗通常兩小時內(nèi)結(jié)束2起先,開發(fā)實驗程序只是為了更充分地掌握數(shù)據(jù)、減少實驗運行失誤近年的發(fā)展表明,實驗運行(交易)過程的電子化為實驗方法開辟了新的天地大大降低了交易成本拓展了市場參與者的市場語言新市場機制在互聯(lián)網(wǎng)和電子商務(wù)時代隨處可見網(wǎng)絡(luò)環(huán)境下設(shè)計新機制并運用實驗手段檢驗新機制的特性,已經(jīng)成了實驗經(jīng)濟(jì)學(xué)的重要發(fā)展方向3起先,開發(fā)實驗程序只是為了更充分地掌握數(shù)據(jù)、減少實驗運行失誤§1 VisualBasic快速入門4§1 VisualBasic快速入門4討論的要點對基本開發(fā)環(huán)境的介紹面向?qū)ο蟮某绦蛟O(shè)計方法變量和變量組選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)對數(shù)據(jù)的存取運用VB實現(xiàn)實驗室內(nèi)的信息傳遞5討論的要點對基本開發(fā)環(huán)境的介紹5一、VB的基本開發(fā)環(huán)境6一、VB的基本開發(fā)環(huán)境6運行MicrosoftVisualBasic6.0中文版,彈出“新建工程”的對話窗口。選擇“標(biāo)準(zhǔn)EXE”并點擊按鍵“打開”。7運行MicrosoftVisualBasic6.0中文88屏幕的中央是對象窗口。對象窗口內(nèi)所展示的是一個空白的窗體窗體的標(biāo)題欄上顯示“Form1”。窗體(Form)是VB程序的用戶界面。程序員決定在窗體上放置哪些內(nèi)容(這些內(nèi)容的學(xué)名叫“控件”)、又要對這些內(nèi)容進(jìn)行哪些處理;運行過程中,使用者將在窗體上看到這些內(nèi)容的部分或全部,并根據(jù)編程人員的設(shè)計通過窗體上的內(nèi)容實現(xiàn)特定功能。9屏幕的中央是對象窗口。9屏幕上方所顯示的是標(biāo)題欄、菜單條和工具欄。屏幕的左側(cè)是VB的工具箱,工具箱內(nèi)包含VB的多種控件?!翱丶笔悄軌虮环胖迷诖绑w上的內(nèi)容。窗體和控件在VB里都被稱作“對象”。屏幕的右上方所顯示的是工程資源管理器。定義應(yīng)用程序的層次結(jié)構(gòu)。屏幕右下方是屬性窗口。所展示的是當(dāng)前被選中的對象的各種屬性?!皩傩浴彼枋龅氖荲B中對象的特征。比如,窗體的屬性包括窗體的名稱、窗體的寬度和高度以及窗體在計算機屏幕上的位置等等。10屏幕上方所顯示的是標(biāo)題欄、菜單條和工具欄。10 編寫一個最簡單的應(yīng)用程序熟悉一下VB開發(fā)環(huán)境,在動手的過程中很多問題會自然而然地明朗……11 編寫一個最簡單的應(yīng)用程序熟悉一下VB開發(fā)環(huán)境,在動手的過程給窗體和工程命名。選中空白窗體Form1。在屬性窗口的各個屬性中,點亮“(名稱)”一欄并將窗體的名稱改為“frmHello”。再選中工程資源管理器,點亮根目錄“工程1(工程1)”。選中屬性窗口中“(名稱)”一欄,將工程1的名稱改為“Hello”。通過菜單將窗體文件“frmHello”和工程“Hello”存儲在適當(dāng)?shù)牡胤健?2給窗體和工程命名。12要給VB程序中的對象起有意義的名字。便于你追蹤管理這些對象,也能幫助別的人理解你的程序。按照對象的類型給名稱加前綴,前綴由三個小寫字母構(gòu)成。窗體對象(Form)的前綴是frm圖標(biāo)對象(Label)的前綴是lbl文本框?qū)ο螅═extBox)的前綴是txt命令按鍵對象(CommandButton)的前綴是cmd在前綴的后面,加上以大寫字母開頭的、有一定意義的單詞來描述對象的作用。txtInput是用于輸入的文本框。13要給VB程序中的對象起有意義的名字。13將對象窗口最大化并調(diào)整frmHello的邊框?qū)⑵淅?。在屬性窗口中點亮frmHello的“Caption”屬性,將其改為“Hello”??焖匐p擊屏幕左側(cè)工具箱中的圖形控件(Image),在窗體frmHello的中央就會出現(xiàn)一個圖形對象Image1。點擊Image1的“Picture”屬性右側(cè)的省略號“…”,將會彈出一個加載圖片的對話框。在你的計算機內(nèi)選擇你喜歡的圖片(注意,圖片不要太大)并點擊按鍵“打開”。調(diào)整Image1的邊框大小并用鼠標(biāo)把Image1拖動到窗體的恰當(dāng)位置。14將對象窗口最大化并調(diào)整frmHello的邊框?qū)⑵淅蟆?41515在Image1的屬性窗口中,將Image1的名稱改為“imgNinghua”,并將“Visible”屬性改為“False”。點擊VB開發(fā)環(huán)境屏幕上方工具欄內(nèi)的啟動鍵“”來運行程序。我們發(fā)現(xiàn)運行中的窗體上并不能見到所載入的圖片。再點擊屏幕上方工具欄內(nèi)的結(jié)束鍵“”以終止程序的運行。16在Image1的屬性窗口中,將Image1的名稱改為“img快速雙擊屏幕左側(cè)工具箱中的圖標(biāo)控件(label),在窗體frmHello的中央就會出現(xiàn)一個圖標(biāo)Label1。采用類似的步驟,將Label1的名稱改為“l(fā)blHello”并將該圖標(biāo)移動到圖片imgNinghua的右側(cè)。選中圖標(biāo)lblHello的“Caption”屬性,并將該屬性的內(nèi)容改為“Hello,everyone.”。隨后再選中圖標(biāo)lblHello的“Font”屬性。點擊該屬性右側(cè)的省略號“…”,你將會看到選擇字體的對話框。選擇小四號字并調(diào)整lblHello的邊框大小。17快速雙擊屏幕左側(cè)工具箱中的圖標(biāo)控件(label),在窗體fr1818快速雙擊圖標(biāo)lblHello,這時會彈出程序代碼窗口,在該窗口內(nèi)會顯示如下字樣:PrivateSublblHello_Click()EndSub19快速雙擊圖標(biāo)lblHello,這時會彈出程序代碼窗口,在該窗l(fā)blHello_Click是一個事件。VB的事件是指VB的對象對某個外部事件所作出的響應(yīng)。事件lblHello_Click是程序使用者點擊了圖標(biāo)lblHello之后程序所執(zhí)行的操作。在“PrivateSublblHello_Click()”和“EndSub”之間所加入的各行計算機語句,就是當(dāng)使用者點擊lblHello這一外部事件發(fā)生時VB程序才會執(zhí)行的操作。20lblHello_Click是一個事件。20PrivateSublblHello_Click()imgNinghua.Visible=TrueEndSub21PrivateSublblHello_Click()21現(xiàn)在保存工程,點擊啟動鍵“”來運行程序。試著點擊一下“Hello,everyone.”,圖片就會在窗體內(nèi)出現(xiàn)。 (其實編程就這么簡單!)22現(xiàn)在保存工程,點擊啟動鍵“”來運行程序。22點擊結(jié)束鍵“”終止程序的運行。如果編程人員不希望每次都在VB的開發(fā)環(huán)境內(nèi)運行程序,編程人員可以生成可執(zhí)行文件。點擊菜單中的“文件”并選中“生成Hello.exe(K)…”,將Hello.exe存放在你希望存放的目錄中。23點擊結(jié)束鍵“”終止程序的運行。23二、面向?qū)ο蟮某绦蛟O(shè)計方法24二、面向?qū)ο蟮某绦蛟O(shè)計方法241.VB的對象、屬性、方法和事件251.VB的對象、屬性、方法和事件25VB的窗體和控件是具有自己的屬性、方法和事件的對象。屬性是一個對象的性質(zhì)方法是對象的動作事件是對對象的響應(yīng)26VB的窗體和控件是具有自己的屬性、方法和事件的對象。26小孩玩的氣球同樣具有屬性、方法和事件屬性直徑和顏色狀態(tài)屬性(充氣的或未充氣的)不可見的性質(zhì)(如壽命)方法:氣球本身所固有的方法和動作充氣方法(用氦氣充滿氣球的動作)放氣方法(排出氣球中的氣體)上升方法(放手讓氣球飛走)事件:預(yù)定義的對某些外部事件的響應(yīng)對刺破它的事件響應(yīng)是放氣對放手事件的響應(yīng)是升空27小孩玩的氣球同樣具有屬性、方法和事件27設(shè)置氣球的屬性:
Balloon.Color=Red
Balloon.Diameter=10
Balloon.Inflated=True注意代碼的語法,首先是對象(Balloon),接著是屬性(Color),然后是賦值(Red)。屬性也可以在程序設(shè)計階段在“屬性”窗口中設(shè)置。28設(shè)置氣球的屬性:28調(diào)用氣球的方法:
Balloon.Inflate
Balloon.Deflate
Balloon.Rise5它的語法與屬性的語法相似,對象(一個名詞)后面緊跟著方法(一個動詞)。在第三個例子中有一個附加項,稱為一個參數(shù),表示氣球上升的高度。一些方法有一個或多個參數(shù),它們對執(zhí)行的動作做進(jìn)一步的描述。29調(diào)用氣球的方法:29 氣球?qū)σ粋€事件的響應(yīng)如下所示:
SubBalloon_Puncture()
Balloon.Deflate
Balloon.MakeNoise"Bang"
Balloon.Inflated=False
Balloon.Diameter=1EndSub本例中代碼描述了當(dāng)刺穿事件發(fā)生時,氣球的行為。30 氣球?qū)σ粋€事件的響應(yīng)如下所示:302.面向?qū)ο蟮某绦蛟O(shè)計方法312.面向?qū)ο蟮某绦蛟O(shè)計方法31某個實驗里,每個銷售者都要同時提交兩個決定:選擇產(chǎn)品的銷售價格同時還要決定是否對產(chǎn)品價格作廣告32某個實驗里,每個銷售者都要同時提交兩個決定:32在這個實驗中的銷售者有可能先定價、再考慮是否作廣告,隨后將已經(jīng)做好的決定同時提交;也有可能是相反的次序,先決定是否作廣告、然后再定價,隨后提交決策;還有可能,在最后提交決策之前她會改主意,比如她更改了初始選擇的價格……實驗程序中應(yīng)當(dāng)如何實現(xiàn)這樣的靈活性?面向?qū)ο蟮某绦蛟O(shè)計方法33在這個實驗中的銷售者33傳統(tǒng)的程序設(shè)計方法如C語言,F(xiàn)ortran等,都是面向過程的、線性的程序設(shè)計方法。新發(fā)展起來的Java,VB等語言,是面向?qū)ο蟮某绦蛟O(shè)計方法。34傳統(tǒng)的程序設(shè)計方法如C語言,F(xiàn)ortran等,都是面向過程的面向過程的程序設(shè)計方法所強調(diào)的是如何完成某一任務(wù)。面向過程的程序設(shè)計中,編程人員要從完成任務(wù)的第一步直到最后一步安排計算機所執(zhí)行的每一個細(xì)節(jié)。在面向過程的程序的應(yīng)用過程中使用者沒有任何自主權(quán)、處于完全被動的角色使用者無權(quán)決定提交信息和處理信息的次序35面向過程的程序設(shè)計方法所強調(diào)的是如何完成某一任務(wù)。35而面向?qū)ο蟮模ɑ蚴录?qū)動的)程序設(shè)計中編程人員圍繞著用戶界面中的對象進(jìn)行設(shè)計只有用戶對對象做出了某種動作之后程序才會進(jìn)行特定的操作。程序的使用者自己控制提交信息和處理信息的次序。36而面向?qū)ο蟮模ɑ蚴录?qū)動的)程序設(shè)計中編程人員圍繞著用戶界面 面向?qū)ο蟮某绦蛟O(shè)計大致要遵從下面五個步驟:對應(yīng)用程序進(jìn)行規(guī)劃;建立用戶界面;編寫程序代碼(即計算機語句);對程序進(jìn)行測試;書寫程序文檔。37 面向?qū)ο蟮某绦蛟O(shè)計大致要遵從下面五個步驟:37我們先著重介紹前兩個步驟,后三個步驟將在下一講《經(jīng)濟(jì)實驗程序開發(fā)實例》中穿插說明。38我們先著重介紹前兩個步驟,后三個步驟將在下一講《經(jīng)濟(jì)實驗程序?qū)?yīng)用程序進(jìn)行規(guī)劃首先要識別該程序要完成哪些任務(wù)。在識別任務(wù)時,對下述問題的回答會有幫助:實驗參加者需要提交哪些信息?經(jīng)濟(jì)實驗程序需要完成哪些計算和處理?在用戶界面上需要向?qū)嶒瀰⒓诱哒故灸男┬畔ⅲ啃碌男畔⒃谟脩艚缑嫔铣霈F(xiàn)時,舊的信息是否會消失?實驗程序在什么條件下會結(jié)束運行?39對應(yīng)用程序進(jìn)行規(guī)劃首先要識別該程序要完成哪些任務(wù)。在識別任務(wù)對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定所要完成的任務(wù)究竟要通過哪些對象來實現(xiàn)。圖標(biāo)(Label)用于展示特定的標(biāo)識或運算結(jié)果文本框(TextBox)用于采集信息。40對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定所要完成的任務(wù)究竟要通過哪些對象對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定哪些對象的哪些事件被觸發(fā)時,程序所需要實現(xiàn)的任務(wù)會被完成。并不是所有的對象都需要事件觸發(fā)。你只需要針對部分對象的事件編寫程序,這些程序語句會在事件發(fā)生時執(zhí)行;而另外一些對象不需要你編程就能實現(xiàn)特定的任務(wù)。比如文本框(TextBox)不需要任何事件觸發(fā)就能實現(xiàn)采集信息的任務(wù)。41對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))確定哪些對象的哪些事件被觸發(fā)時,程序?qū)?yīng)用程序進(jìn)行規(guī)劃(續(xù))程序規(guī)劃步驟可以用任務(wù)(Task)、對象(Object),事件(Event)的分解圖(TOE)來實現(xiàn)。42對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))程序規(guī)劃步驟可以用任務(wù)(Task)、任務(wù)(Task)對象(Object)事件(Event)銷售者輸入價格信息文本框txtPrice無銷售者選擇作廣告選擇按鍵optRevoptRev_Click點擊銷售者選擇不作廣告選擇按鍵optNRevoptRev_Click點擊同時提交價格與廣告決策命令按鍵cmdOKcmdOK_Click點擊對應(yīng)用程序進(jìn)行規(guī)劃(續(xù))43任務(wù)(Task)對象(Object)事件(Event)銷售者用戶界面設(shè)計對VB來說用戶界面設(shè)計就是對窗體上的各個對象的排列安排。基本的原則:按照一定的順序排列對象,要么從上至下,要么從左到右。相關(guān)的對象放在相鄰位置(如示例中的optRev和optNRev)。涉及實驗參加者提交決策的對象需要在醒目位置顯示。完成對各個對象的初步排列后,可以根據(jù)需要在對象的旁邊添加一些圖標(biāo)以說明各個對象的作用。44用戶界面設(shè)計對VB來說用戶界面設(shè)計就是對窗體上的各個對象的排用戶界面設(shè)計(續(xù))45用戶界面設(shè)計(續(xù))45用戶界面設(shè)計(續(xù))46用戶界面設(shè)計(續(xù))46作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial247作業(yè):47三、變量、變量組和常量48三、變量、變量組和常量481.變量491.變量49變量的作用是在程序的運行過程中臨時記錄數(shù)據(jù)。變量中所存儲的數(shù)據(jù)在程序運行中可以被改變。由于變量只在程序運行中發(fā)揮作用,變量的生命周期不會超過程序的運行周期。一個變量里只能存放一段數(shù)據(jù),將新的數(shù)據(jù)存入變量中勢必會抹去變量中原有的數(shù)據(jù)。50變量的作用是在程序的運行過程中臨時記錄數(shù)據(jù)。50創(chuàng)建新變量51創(chuàng)建新變量51類型所存儲數(shù)據(jù)值的范圍Byte(字節(jié)型)二進(jìn)位數(shù)值0至255Boolean(布爾型)邏輯值真或偽(TrueorFalse)Currency(貨幣型)小數(shù)點前最多15位,小數(shù)點后最多4位的實數(shù)+/-9E14Date(日期型)日期和時間信息公元100年1月1日至公元9999年12月31日Double(雙精度)實數(shù)+/-5E-324至1.8E308Integer(整型)整數(shù)-32768至32767Long(長整型)整數(shù)+/-2000000000Object(對象型)VB中的對象Single(單精度)實數(shù)+/-1E-45至3E38String(字符串型)文本信息最長65400個字符Variant(變體型)任意其它類型的數(shù)據(jù)其它類型數(shù)據(jù)的最大取值范圍52類型所存儲數(shù)據(jù)值的范圍Byte(字節(jié)型)二進(jìn)位數(shù)值0至25變量名的前綴:類型前綴BytebytBooleanblnCurrencycurDate(time)dtmDoubledblIntegerintLonglngObjectobjSinglesngStringstrVariantvnt53變量名的前綴:類型前綴BytebytBooleanblnCu變量名必須以字母開頭。變量名中只能包含字母、數(shù)字和下劃線,其它任何字符都不允許在變量名中出現(xiàn)。變量名最長不能超過255個字符。不能用VB中的保留字作變量名。保留字在VB中有特定含義和功能,不能作其它用途。比如在VB中“Print”是打印命令,屬于保留字,不能充當(dāng)變量名。54變量名必須以字母開頭。54Dim
variablenameAs
datatype或Public
variablenameAs
datatype
比如,我們需要記錄實驗當(dāng)前的交易輪次。為達(dá)目的,我們可以創(chuàng)建一個整型變量“intRound”,定義該變量的語句如下:
DimintRoundAsInteger55DimvariablenameAsdatatype或賦值56賦值56賦值是將數(shù)據(jù)存放到特定位置的過程。這個“特定位置”,既可以是某個對象的屬性,也可以是變量。賦值語句中的賦值符號為“=”,賦值號左側(cè)是數(shù)據(jù)存放的位置,而賦值號右側(cè)是數(shù)據(jù)。如:
Label1.Caption=“Hello!” intRound=10 curPrice=10.23原則上,數(shù)據(jù)要存放到與其類型一致的位置上去。57賦值是將數(shù)據(jù)存放到特定位置的過程。這個“特定位置”,既可以是賦值語句的一個應(yīng)用技巧是累加。比如,
intRound=10 intRound=intRound+5在創(chuàng)建新變量時,VB自動將空字符串賦予字符串型和變體型的變量,而那些數(shù)值類型的變量會被賦為“0”值。58賦值語句的一個應(yīng)用技巧是累加。比如,58變量的有效范圍59變量的有效范圍59局部變量由Dim語句在事件內(nèi)定義。局部變量的生命周期是事件的發(fā)生過程。一旦事件結(jié)束,局部變量的使命告終。
PrivateSublblHello_Click() DimiAsInteger EndSub 局部變量i只在lblHello_Click()內(nèi)有效。60局部變量由Dim語句在事件內(nèi)定義。局部變量的生命周期是事件的窗體變量窗體變量的生命周期即窗體從載入到終止的周期。窗體變量對窗體內(nèi)所有對象都有效,能在不同對象、事件和過程之間傳遞數(shù)據(jù)。也由Dim語句定義。窗體變量在代碼窗口的通用聲明(GeneralDeclaration)區(qū)域定義。61窗體變量窗體變量的生命周期即窗體從載入到終止的周期。61全程變量全程變量的生命周期等同于程序的運行周期。全程變量能在程序的多個窗體之間傳遞數(shù)據(jù)。用Public語句在程序的代碼模塊中定義。代碼模塊是程序中的獨立文件,僅包含程序代碼。在菜單條中點擊“工程”并選擇“添加模塊”,在彈出的對話窗口中選擇新建模塊,一個新的代碼模塊Module1就會被添加到工程中。全程變量的定義位置是代碼模塊的通用聲明區(qū)域。62全程變量全程變量的生命周期等同于程序的運行周期。62OptionExplicit語句63OptionExplicit語句63VB允許程序開發(fā)者對變量隨用隨定義。OptionExplicit語句的作用是禁止在程序中運用未經(jīng)正式定義的變量。具體做法:在工程下所有窗體和代碼模塊的通用聲明區(qū)域輸入OptionExplicit語句,并緊隨該語句對變量進(jìn)行定義。64VB允許程序開發(fā)者對變量隨用隨定義。64 OptionExplicit
Dimi,j,kAsInteger DimstrNameAsString65 OptionExplicit652.變量組662.變量組66變量組是相互關(guān)聯(lián)的一組變量,這些變量有相同的名稱和相同的數(shù)據(jù)類型。程序開發(fā)人員運用變量組在內(nèi)存中暫時存取數(shù)據(jù);運用變量組的優(yōu)勢是用它存取數(shù)據(jù)的速度遠(yuǎn)高于在外部存儲設(shè)備中存取數(shù)據(jù)的速度。67變量組是相互關(guān)聯(lián)的一組變量,這些變量有相同的名稱和相同的數(shù)據(jù) Dimarrayname(lowersubscriptTouppersubscript,…,lowersubscriptTouppersubscript)Asdatatype或
Publicarrayname(lowersubscriptTouppersubscript,…,lowersubscriptTouppersubscript)Asdatatype68 Dimarrayname(lowersubscript“arrayname”是變量組的名稱。對變量組的命名規(guī)定與對變量的命名規(guī)定類同?!發(fā)owersubscriptTouppersubscript”表示變量組的一個維。VB最高允許定義60維的變量組。在變量組中的各個變量通過變量組的名稱和下標(biāo)識別。變量組的有效范圍以及OptionExplicit語句的應(yīng)用完全類同于之前對變量的介紹。69“arrayname”是變量組的名稱。對變量組的命名規(guī)定與對 某實驗的每個交易回合中市場上的三個銷售者同時選擇各自的出價,而實驗一共要進(jìn)行10個交易回合。用二維變量組curPrice來記錄出價,定義該變量組的語句如下:
DimcurPrice(1To10,1To3)AsCurrency curPrice的第一組下標(biāo)指示交易的輪次,而第二組下標(biāo)指示的是銷售者。70 某實驗的每個交易回合中市場上的三個銷售者同時選擇各自的出價3.常量713.常量71有些實驗參數(shù)在更改實驗條件時需要修正,而這些實驗參數(shù)在同一實驗中卻是固定不變的常量。這就需要實驗程序在一開始的地方對這些常量參數(shù)進(jìn)行定義,定義符號常量的語句格式如下:
Public
Const
constname
As
datatype=expression符號常量需要在VB的代碼模塊的通用聲明區(qū)域中定義,其有效范圍是程序運行的全程。72有些實驗參數(shù)在更改實驗條件時需要修正,而這些實驗參數(shù)在同一實作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial373作業(yè):73四、選擇結(jié)構(gòu)74四、選擇結(jié)構(gòu)74程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)中,程序的語句按照出現(xiàn)的先后次序,由前到后一個接一個地被執(zhí)行。選擇結(jié)構(gòu)中,程序根據(jù)某個比較結(jié)果選擇執(zhí)行語句的路徑。循環(huán)結(jié)構(gòu)中,某些語句會被執(zhí)行若干次、或直到某個特定的條件被滿足時才會停止執(zhí)行這些語句。75程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。75根據(jù)實驗參與者的選擇做出判斷,來決定每個人的所得。
最后通牒對策,在10元的潛在收益中,提議者建議自己得到X元,而回應(yīng)者得到1–X元。在見到提案以后,如果回應(yīng)者接受這個提案,那么就按照提案來分配所得;如果回應(yīng)者拒絕這個提案,則提議者和回應(yīng)者的收益全部為零。在回應(yīng)者見到提案后,實驗程序如何根據(jù)回應(yīng)者“接受”或“拒絕”的選擇來決定提議者和回應(yīng)者的所得?76根據(jù)實驗參與者的選擇做出判斷,來決定每個人的所得。761.基本選擇結(jié)構(gòu):If…Then…Else語句771.基本選擇結(jié)構(gòu):If…Then…Else語句77 If…Then…Else語句是VB中最基本的選擇結(jié)構(gòu)。語句格式如下: If
conditionThen [instructionswhentheconditionistrue] [Else [instructionswhentheconditionisfalse]] EndIf78 If…Then…Else語句是VB中最基本的選擇結(jié)構(gòu)。語句“condition”是條件表達(dá)式,其值只可能是“真”或“偽”(TrueorFalse)。如果條件表達(dá)式的值為“真”,那么“Then”以后的語句將被執(zhí)行;如果條件表達(dá)式的值為“偽”,那么“Else”以后的語句將被執(zhí)行?!癊ndIf”表示選擇結(jié)構(gòu)的結(jié)束。需要注意的是,If…Then…Else語句中不一定包括“Else”和“Else”以后的語句。在這種情況下,當(dāng)條件表達(dá)式為“偽”時直接進(jìn)行“EndIf”之后的操作,而選擇結(jié)構(gòu)內(nèi)部不進(jìn)行任何操作。79“condition”是條件表達(dá)式,其值只可能是“真”或“偽注意:
我們在介紹VB的語句格式的時候,方括號里的內(nèi)容為可選內(nèi)容,編程人員根據(jù)需要來決定是否選用這些內(nèi)容。 如果某語句格式的方括號里的內(nèi)容在編程中被省略掉,VB也不會將其視作語法錯誤。80注意:80條件表達(dá)式中可包括變量、常量、對象的屬性、函數(shù)、數(shù)學(xué)運算符,關(guān)系運算符以及邏輯運算符。81條件表達(dá)式中可包括變量、常量、對象的屬性、函數(shù)、數(shù)學(xué)運算符,關(guān)系運算符82關(guān)系運算符82VB中有6種關(guān)系運算符:=,>,>=,<,<=,<>。包含關(guān)系運算符的表達(dá)式的返回值只可能是“真”或“偽”。各個關(guān)系運算符之間并沒有優(yōu)先次序,在表達(dá)式中對它們按照從左到右的順序進(jìn)行處理。關(guān)系運算符的處理優(yōu)先級要低于數(shù)學(xué)運算符的優(yōu)先級數(shù)學(xué)運算符的優(yōu)先順序是先處理乘方,再處理乘除,最后處理加減。83VB中有6種關(guān)系運算符:=,>,>=,<,<=,<>。83表達(dá)式1:10+3<5*2 處理順序:首先計算5*2,得到10;隨后計算10+3,得到13;最后判斷不等式13<10的真?zhèn)?,返回值為“偽”(False)。表達(dá)式2:7>3*4/2 處理順序:首先計算3*4,得到12;隨后計算12/2,得到6;最后判斷不等式7>6的真?zhèn)?,返回值為“真”(True)。84表達(dá)式1:10+3<5*284UCase函數(shù)和LCase函數(shù)
85UCase函數(shù)和LCase函數(shù)85在VB中進(jìn)行字符串比較時,如果兩個字符串所包含的字母相同、但字母的大小寫有所區(qū)別,那么VB會判定兩個字符串不同。如何在對比兩個字符串的時候忽略字母大小寫的區(qū)別?86在VB中進(jìn)行字符串比較時,如果兩個字符串所包含的字母相同、但UCase函數(shù)的語句格式是UCase(String),其中“String”是一個任意的字符串。UCase(String)所返回的是一個新的字符串,新字符串將原字符串“String”中所有的小寫字母都轉(zhuǎn)換成大寫。UCase函數(shù)既可以出現(xiàn)在關(guān)系運算符的左側(cè),也可以出現(xiàn)在關(guān)系運算符的右側(cè)。但是在賦值語句中,UCase函數(shù)只能出現(xiàn)在賦值號的右側(cè)。87UCase函數(shù)的語句格式是UCase(String),其中“LCase函數(shù)的語句格式是LCase(String),它的作用是將原字符串中所有的大寫字母都轉(zhuǎn)換成小寫。88LCase函數(shù)的語句格式是LCase(String),它的作邏輯運算符89邏輯運算符89Not,And,Or,是VB中最常見的邏輯運算符。各邏輯運算符的優(yōu)先次序為Not,And,Or。邏輯運算符在表達(dá)式中的優(yōu)先次序在數(shù)學(xué)運算符和關(guān)系運算符之后。Not的作用是將條件表達(dá)式的值反轉(zhuǎn);若干個由And運算符連接起來的條件表達(dá)式,只有在每個條件表達(dá)式都為“真”的情況下,被連接起來的復(fù)合條件表達(dá)式才為“真”;若干個由Or運算符連接起來的條件表達(dá)式,只要其中有一個條件表達(dá)式為“真”,被連接起來的復(fù)合條件表達(dá)式就會為“真”。90Not,And,Or,是VB中最常見的邏輯運算符。90表達(dá)式1:3>2And6>5 處理順序:首先判斷不等式3>2的真?zhèn)危祷刂禐椤罢妗保═rue);隨后判斷不等式6>5的真?zhèn)?,返回值為“真”(True);最后判斷TrueAndTrue,得到返回值“真”。表達(dá)式2:10<25And6>5+1 處理順序:先計算5+1,得到6;隨后判斷不等式10<25的真?zhèn)危祷刂禐椤罢妗保═rue);第三步判斷不等式6>6的真?zhèn)?,返回值為“偽”(False);最后評價TrueAndFalse,得到返回值“偽”。91表達(dá)式1:3>2And6>591表達(dá)式3:8=4*2Or6>5+1 處理順序:先計算4*2,得到8;隨后判斷等式8=8的真?zhèn)危祷刂禐椤罢妗保═rue);由于Or運算符左側(cè)的條件表達(dá)式為“真”,條件表達(dá)式3整體的返回值也為“真”。92表達(dá)式3:8=4*2Or6>5+192所有包含邏輯運算符的表達(dá)式的返回值只可能是“真”或“偽”。如果你用And運算符連接兩個條件表達(dá)式,而And運算符左側(cè)的條件表達(dá)式的值為“偽”時,VB將不再判斷And運算符右側(cè)的條件表達(dá)式的真?zhèn)?。類似地,如果你用Or運算符連接兩個條件表達(dá)式,而Or運算符左側(cè)的條件表達(dá)式的值為“真”時,VB將不再判斷Or運算符右側(cè)的條件表達(dá)式的真?zhèn)巍?3所有包含邏輯運算符的表達(dá)式的返回值只可能是“真”或“偽”。92.If…Then…Else語句基礎(chǔ)上的層次選擇結(jié)構(gòu)942.If…Then…Else語句基礎(chǔ)上的層次選擇結(jié)構(gòu)94層次選擇結(jié)構(gòu)是指在某個選擇結(jié)構(gòu)中,根據(jù)條件表達(dá)式的判定結(jié)果所選擇的某一條操作路徑上嵌入了另一個選擇結(jié)構(gòu)。95層次選擇結(jié)構(gòu)是指在某個選擇結(jié)構(gòu)中,根據(jù)條件表達(dá)式的判定結(jié)果所 示例1:在某個價格競爭的實驗中,我們用變量sngCost表示銷售者的成本,用變量intSellerID表示銷售者的識別號碼。1號銷售者和3號銷售者的成本是1.2元,2號銷售者的成本是1.5元,而其他所有銷售者的成本都是1.8元。我們需要用層次選擇結(jié)構(gòu)對變量sngCost賦值。96 示例1:在某個價格競爭的實驗中,我們用變量sngCost表 IfintSellerID=1OrintSellerID=3Then sngCost=1.2 Else
IfintSellerID=2Then sngCost=1.5
Else sngCost=1.8
EndIf EndIf97 IfintSellerID=1OrintSell示例2:在某個激勵機制的實驗中,針對不同銷售者的激勵辦法各不相同。如果1號銷售者的銷售收入達(dá)到10000實驗幣,那么她將在實驗結(jié)束后得到500實驗幣的獎勵;如果她的銷售收入達(dá)不到10000實驗幣,她在實驗后得到的獎勵是200實驗幣。如果2號銷售者的銷售收入達(dá)到20000實驗幣,那么他將在實驗結(jié)束后得到600實驗幣的獎勵;如果他的銷售收入達(dá)不到20000實驗幣,他在實驗后得到的獎勵是550實驗幣。其他所有銷售者得到固定獎勵150實驗幣。變量intSellerID表示銷售者的識別號碼,sngSales表示實驗中的銷售收入,sngBonus表示對銷售者的獎勵。98示例2:98
IfintSellerID=1Then IfsngSales>=10000then sngBonus=500 Else sngBonus=200 EndIf Else IfintSellerID=2Then IfsngSales>=20000Then sngBonus=600 Else sngBonus=550 EndIf Else sngBonus=150 EndIf EndIf99 IfintSellerID=1Then99 IfintSellerID=1AndsngSales>=10000Then sngBonus=500 Else IfintSellerID=1AndsngSales<10000Then sngBonus=200 Else IfintSellerID=2AndsngSales>=20000Then sngBonus=600 Else IfintSellerID=2AndsngSales<20000Then sngBonus=550 Else sngBonus=150 EndIf EndIf EndIfEndIf100 IfintSellerID=1AndsngSal3.用Case語句表達(dá)的選擇結(jié)構(gòu)1013.用Case語句表達(dá)的選擇結(jié)構(gòu)101用Case語句表達(dá)的選擇結(jié)構(gòu)適用于對條件表達(dá)式的判定后產(chǎn)生多個可供選擇的操作路徑的情況。與If…Then…Else語句相比,Case語句更簡單直觀。102用Case語句表達(dá)的選擇結(jié)構(gòu)適用于對條件表達(dá)式的判定后產(chǎn)生多 SelectCase
testexpression [Case
expressionlist1 [instructionsforthefirstcase]] [Case
expressionlist2 [instructionsforthesecondcase]] [Case
expressionlistn [instructionsforthenthcase]] [CaseElse
[instructionsforwhenthetestexpressiondoesnotmatchanyoftheexpressionlists]] EndSelect103 SelectCasetestexpression103“testexpression”為被測表達(dá)式,它可以是字符串,也可以是數(shù)值。被測表達(dá)式可以包含變量,常量,各種運算符以及對象的屬性?!癳xpressionlist”是一系列表達(dá)式的列表。在Case語句中,表達(dá)式列表中的每個表達(dá)式的數(shù)據(jù)類型必須與被測表達(dá)式的數(shù)據(jù)類型相一致。當(dāng)表達(dá)式列表中的某一個表達(dá)式與被測表達(dá)式相吻合時,在該表達(dá)式后的操作將被執(zhí)行,而Case語句中的其它操作路徑將被忽略,直接進(jìn)行“EndSelect”之后的操作。如果沒有任何一個表達(dá)式列表中的表達(dá)式與被測表達(dá)式相吻合,“CaseElse”之后的操作將被執(zhí)行;在Case語句中沒有“CaseElse”部分的情況下,Case語句將結(jié)束,直接進(jìn)行“EndSelect”之后的操作。104“testexpression”為被測表達(dá)式,它可以是字符串 表達(dá)式所描述的是包括上界和下界的數(shù)值范圍:
a≤testexpression≤b在Case語句中可以被寫成 SelectCase
testexpression [CaseaTob [instructionsforthecaseof‘a(chǎn)tob’]] EndSelect105 表達(dá)式所描述的是包括上界和下界的數(shù)值范圍:105 表達(dá)式所描述的是只包括上界或下界的數(shù)值范圍: a≤testexpression在Case語句中可以被寫成 SelectCase
testexpression [Case
Is>=a [instructionsforthecaseof‘>=a’]] EndSelect106 表達(dá)式所描述的是只包括上界或下界的數(shù)值范圍:106 示例1:
SelectCaseintSellerID
Case1,3 sngCost=1.2
Case2 sngCost=1.5
Case
Else sngCost=1.8 EndSelect107 示例1:107示例2: SelectCaseintSellerID
Case1
SelectCasesngSales
CaseIs>=10000 sngBonus=500
CaseElse sngBonus=200
EndSelect
Case2
SelectCasesngSales
CaseIs>=20000 sngBonus=600
CaseElse sngBonus=550
EndSelect
CaseElse sngBonus=150 EndSelect108示例2:108示例2:
SelectCaseTrue
CaseintSellerID=1AndsngSales>=10000 sngBonus=500
CaseintSellerID=1AndsngSales<10000 sngBonus=200
CaseintSellerID=2AndsngSales>=20000 sngBonus=600
CaseintSellerID=2AndsngSales<20000 sngBonus=550
CaseElse sngBonus=150 EndSelect109示例2:109作業(yè): ProgrammingwithVisualBasic6.0EnhancedEdition,DianeZak,Tutorial4110作業(yè):110五、循環(huán)結(jié)構(gòu)111五、循環(huán)結(jié)構(gòu)111在實驗中,所進(jìn)行的交易回合往往不止一輪。交易回合開始,要將基本信息發(fā)送給實驗參加者:輪次,銷售者的成本、購買者的保有價格,等等。交易回合結(jié)束,要將交易結(jié)果發(fā)送給實驗參加者:實驗參加者本輪的決策、其他參加者的決策,實驗參加者本人本輪的所得,到目前為止的累積所得,等等。用實驗程序來實現(xiàn)這些任務(wù)需要進(jìn)行一些重復(fù)性操作,這就涉及到了循環(huán)結(jié)構(gòu)。112在實驗中,所進(jìn)行的交易回合往往不止一輪。112循環(huán)結(jié)構(gòu)中,某些語句會被執(zhí)行若干次、或直到某個特定的條件被滿足時才會停止執(zhí)行這些語句。三種基本形式:ForNext循環(huán)DoWhile循環(huán)DoUntil循環(huán)113循環(huán)結(jié)構(gòu)中,某些語句會被執(zhí)行若干次、或直到某個特定的條件被滿1.ForNext循環(huán)1141.ForNext循環(huán)114ForNext循環(huán)的作用是將某些特定的操作重復(fù)執(zhí)行一定的次數(shù),其語法格式如下:
For
counter=startvalue
to
endvalue[Step
stepvalue] [instructions] Nextcounter115ForNext循環(huán)的作用是將某些特定的操作重復(fù)執(zhí)行一定的次“Counter”是一個數(shù)值類型的變量“startvalue”是循環(huán)的初始值,“endvalue”是循環(huán)的終值,而“stepvalue”是循環(huán)的步長。循環(huán)的初始值,終值和步長都必須是數(shù)值,這些數(shù)值既可以是正數(shù),也可以是負(fù)數(shù)。如果編程人員省略了對循環(huán)的步長的定義,則VB自動將循環(huán)的步長規(guī)定為1。116“Counter”是一個數(shù)值類型的變量116ForNext循環(huán)按照如下步驟運行:第一步,在循環(huán)開始的時候,將循環(huán)的初始值“startvalue”賦予變量“Counter”。這一操作只進(jìn)行一次。117ForNext循環(huán)按照如下步驟運行:117第二步,如果步長“stepvalue”為正,則需要判定變量“Counter”的值是否大于循環(huán)的終值“endvalue”(如果步長“stepvalue”為負(fù),則是相反的情況,需要判定變量“Counter”的值是否小于循環(huán)的終值“endvalue”)。 如果判定結(jié)果為“真”,則循環(huán)終止;如果判定結(jié)果為“偽”,則循環(huán)內(nèi)的操作“instructions”將被執(zhí)行。118第二步,如果步長“stepvalue”為正,則需要判定變量“第三步,將步長值“stepvalue”加入到變量“Counter”中,并返回到上述第二步。 直到變量“Counter”的值大于終值“endvalue”(若步長為負(fù),則變量“Counter”的值小于終值“endvalue”)的時候,循環(huán)結(jié)束。119第三步,將步長值“stepvalue”加入到變量“Count ForNext循環(huán)示例: 在某實驗中有12名實驗參加者參與,每個人在實驗開始時得到150實驗幣的啟動資金。我們用一維變量組sngTPayoff(1to12)來表示12個實驗參加者的累積所得,其中的變量sngTPayoff(i)是第i個實驗參加者的累積所得?,F(xiàn)在將各個實驗參加者的累積所得初始化為150個實驗幣。120 ForNext循環(huán)示例:120 DimiAsInteger DimsngTPayoff(1To12)AsSingle
Fori=1to12 sngTPayoff(i)=150 Nexti121 DimiAsInteger1212.DoWhile循環(huán)和DoUntil循環(huán)1222.DoWhile循環(huán)和DoUntil循環(huán)122DoWhile語句中,當(dāng)循環(huán)的判定條件為真時,重復(fù)執(zhí)行循環(huán)內(nèi)的操作;DoUntil語句重復(fù)執(zhí)行循環(huán)內(nèi)的操作,直到循環(huán)的判定條件為真時終止。DoWhile循環(huán)和DoUntil循環(huán)都能夠?qū)崿F(xiàn)ForNext循環(huán)中,將某些操作重復(fù)執(zhí)行特定次數(shù)的功能。123DoWhile語句中,當(dāng)循環(huán)的判定條件為真時,重復(fù)執(zhí)行循環(huán) DoWhile循環(huán)的語句格式為: DoWhile
condition [loopinstructions] Loop DoUntil循環(huán)的語句格式為: Do [loopinstructions] LoopUntilcondition124 DoWhile循環(huán)的語句格式為:124循環(huán)的條件“condition”可包含變量、常量、函數(shù)、對象的屬性以及各種運算符,“condition”的返回值必須是“真”或“偽”。在DoWhile循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“condition”的值為“真”時,循環(huán)內(nèi)的操作“l(fā)oopinstructions”才會被執(zhí)行;DoUntil循環(huán)中,當(dāng)且僅當(dāng)循環(huán)的條件“condition”的值為“偽”時,循環(huán)內(nèi)的操作“l(fā)oopinstructions”才會被執(zhí)行,一旦“condtion”為“真”則循環(huán)終止。125循環(huán)的條件“condition”可包含變量、常量、函數(shù)、對象DoWhile循環(huán)也被稱作前試循環(huán)。ForNext循環(huán)也是一種前試循環(huán)。DoUntil循環(huán)也被稱作后試循環(huán)。DoUntil循環(huán)內(nèi)的操作至少會被執(zhí)行一次。126DoWhile循環(huán)也被稱作前試循環(huán)。ForNext循環(huán)也 用DoWhile語句完成示例:
DimiAsInteger DimsngTPayoff(1To12)AsSingle i=1
DoWhilei<=12
sngTPayoff(i)=150 i=i+1 Loop127 用DoWhile語句完成示例:127 用DoUntil語句完成示例:
DimiasInteger DimsngTPayoff(1To12)AsSingle i=1
Do
sngTPayoff(i)=150 i=i+1 LoopUntili>12128 用DoUntil語句完成示例:1283.計數(shù)器和累加器1293.計數(shù)器和累加器129計數(shù)器和累加器是循環(huán)結(jié)構(gòu)最常見的兩種應(yīng)用。計數(shù)器用于統(tǒng)計數(shù)量,比如在某個實驗的某個回合,究竟有多少實驗參加者選擇了納什均衡策略?而累加器用于求和,比如實驗進(jìn)行了5輪以后某個實驗參加者的累積所得是多少?130計數(shù)器和累加器是循環(huán)結(jié)構(gòu)最常見的兩種應(yīng)用。130計數(shù)器和累加器都需要初始化和更新。初始化是指為計數(shù)器和累加器賦初始值。多數(shù)情況下,計數(shù)器和累加器會被初始化為0或1。更新是指將新的數(shù)值加入到計數(shù)器或累加器中。計數(shù)器每次的更新為常量,而累加器的更新為變量。更新在循環(huán)內(nèi)進(jìn)行,而初始化在更新所在的循環(huán)開始之前進(jìn)行。131計數(shù)器和累加器都需要初始化和更新。131 計數(shù)器示例:
某實驗有12名參加者,共進(jìn)行20個回合。在每個回合里,各實驗參加者要在選項“A”與“B”之間選一個?,F(xiàn)所有參加者在各個回合中的選擇都已被存入二維變量組strChoice(1to12,1to20)。其中變量strChoice(i,j)是指第i個實驗參加者在第j個回合所作的選擇?,F(xiàn)在我們需要構(gòu)造一個新的計數(shù)器變量組intChoiceA(1to20),用于統(tǒng)計在各回合中選擇“A”的實驗參加者的人數(shù)。132 計數(shù)器示例:132 Dimi,jAsInteger DimintChoiceA(1To20)AsInteger Fori=1to20 intChoiceA(i)=0
Forj=1to12
IfstrChoice(j,i)=“A”Then intChoiceA(i)=intChoiceA(i)+1
EndIf
Nextj Nexti133 Dimi,jAsInteger133 累加器示例: 某實驗有12名參加者,共進(jìn)行20個回合?,F(xiàn)所有參加者在各個回合中的所得都已被存入二維變量組sngPayoff(1to12,1to20)。sngPayoff(i,j)是指第i個實驗參加者在第j個回合的所得。現(xiàn)在需要計算各個實驗參加者在實驗結(jié)束后的累積所得,由變量組sngTPayoff(1to12)表示。其中變量sngTPayoff(i)是第i個實驗參加者的累積所得。每個實驗參加者在第一回合開始時的啟動資金皆為150個實驗幣。134 累加器示例:134 Dimi,jAsInteger DimsngTPayoff(1To12)AsSingle Fori=1to12 sngTPayoff(i)=150
Forj=1to20 sngTPayoff(i)=sngTPayoff(i)+sngPayoff(i,j)
Nextj Nexti135 Dimi,jAsInteger135六、對數(shù)據(jù)的存取136六、對數(shù)據(jù)的存取136研究人員需要記錄實驗參加者在實驗中的決策和所得。變量和變量組能起到在程序運行過程中臨時存取數(shù)據(jù)的作用。程序一旦結(jié)束運行,變量和變量組就會從計算機內(nèi)存中消失,所存放的數(shù)據(jù)也隨之消失。為避免數(shù)據(jù)丟失,研究人員需要把實驗數(shù)據(jù)長久保存在數(shù)據(jù)文件中。137研究人員需要記錄實驗參加者在實驗中的決策和所得。1371.?dāng)?shù)據(jù)文件1381.?dāng)?shù)據(jù)文件138程序文件所包含的是實現(xiàn)一系列操作的指令的集合。VB工程文件與工程文件關(guān)聯(lián)的窗體文件和代碼模塊數(shù)據(jù)文件專門用于承載信息,由數(shù)據(jù)領(lǐng)域和數(shù)據(jù)記錄構(gòu)成。139程序文件所包含的是實現(xiàn)一系列操作的指令的集合。139數(shù)據(jù)領(lǐng)域又被稱作數(shù)據(jù)元素,是一段無法繼續(xù)細(xì)分的信息。實驗參加者的識別號碼交易的輪次實驗參加者的角色數(shù)據(jù)記錄是一系列相關(guān)聯(lián)的數(shù)據(jù)領(lǐng)域的組合。在經(jīng)濟(jì)實驗中,一條數(shù)據(jù)記錄就是某個實驗參加者在某個輪次的全部實驗結(jié)果。囚徒困境對策實驗:數(shù)據(jù)記錄中包括輪次,實驗參加者的識別號,與其配對的參加者的識別號,實驗參加者的決策,與其配對的參加者的決策,實驗參加者本輪所得以及實驗參加者的累積所得。數(shù)據(jù)文件是相關(guān)聯(lián)的數(shù)據(jù)記錄的集合。在經(jīng)濟(jì)實驗中,數(shù)據(jù)文件包括所有實驗參加者在所有輪次中的全部實驗結(jié)果。140數(shù)據(jù)領(lǐng)域又被稱作數(shù)據(jù)元素,是一段無法繼續(xù)細(xì)分的信息。140經(jīng)濟(jì)實驗中最常用到的數(shù)據(jù)文件是順序存取的數(shù)據(jù)文件。對順序存取的數(shù)據(jù)文件中的數(shù)據(jù)記錄只能依次按順序處理。音樂磁帶:只能按照順序播放樂曲,不能隨意跳轉(zhuǎn)到喜愛的樂曲。順序存取的文件易于創(chuàng)建,也易于操作。141經(jīng)濟(jì)實驗中最常用到的數(shù)據(jù)文件是順序存取的數(shù)據(jù)文件。1412.對順序存取的數(shù)據(jù)文件的基本操作1422.對順序存取的數(shù)據(jù)文件的基本操作142順序存取的數(shù)據(jù)文件的文件類型143順序存取的數(shù)據(jù)文件的文件類型143VB中最常用的順序存取的數(shù)據(jù)文件是以“*.txt”的后綴為結(jié)尾的文本文件。文本文件的一行為一條數(shù)據(jù)記錄。數(shù)據(jù)記錄的各個數(shù)據(jù)領(lǐng)域之間用逗號分割開。如果某數(shù)據(jù)領(lǐng)域為字符串,在字符串外要加上雙引號。上述格式的文本文件可以直接用MicrosoftExcel打開。144VB中最常用的順序存取的數(shù)據(jù)文件是以“*.txt”的后綴為結(jié)打開文件
145打開文件 145 打開順序存取的數(shù)據(jù)文件要用到Open語句,其格式如下:
Open
pathnameFor
modeAs#filenumber146 打開順序存取的數(shù)據(jù)文件要用到Open語句,其格式如下:14“pathname”是所打開的數(shù)據(jù)文件的名稱文件名中要包括該文件在你的計算機上存儲位置的路徑。要用引號將包含硬盤符號、路徑以及文件名的pathname括起來。147“pathname”是所打開的數(shù)據(jù)文件的名稱147“mode”是數(shù)據(jù)文件打開的模式Input為輸入模式,把數(shù)據(jù)文件中的數(shù)據(jù)記錄讀入到程序中。如果數(shù)據(jù)文件不存在,VB會返回出錯信息。Output即輸出模式,創(chuàng)建新的數(shù)據(jù)文件并將數(shù)據(jù)記錄存入新文件中。如果數(shù)據(jù)文件已經(jīng)存在,VB將抹去數(shù)據(jù)文件中原有的內(nèi)容。Append即附加模式,打開已有的數(shù)據(jù)文件并在該文件的末尾附加新的數(shù)據(jù)記錄。如果數(shù)據(jù)文件不存在,VB會在相應(yīng)目錄下創(chuàng)建新的數(shù)據(jù)文件。148“mode”是數(shù)據(jù)文件打開的模式148“filenumber”是你賦予數(shù)據(jù)文件的識別號碼。“filenumber”必須是1到511之間的整數(shù)(包括1和511)。數(shù)據(jù)文件在被編程人員打開期間,其識別號碼是唯一的。(VB最多能同時打開511個數(shù)據(jù)文件)。149“filenumber”是你賦予數(shù)據(jù)文件的識別號碼。149VB運用記錄指針來確定下一個要被處理的數(shù)據(jù)記錄的位置。用輸入模式打開數(shù)據(jù)文件時,記錄指針指向文件的起點、第一條數(shù)據(jù)記錄之前;用輸出模式打開數(shù)據(jù)文件時,記錄指針指向空文件的開端;用附加模式打開數(shù)據(jù)文件時,記錄指針指向文件的末尾、最后一條數(shù)據(jù)記錄的后面。當(dāng)前的數(shù)據(jù)記錄處理完畢,記錄指針指向下一條數(shù)據(jù)記錄。150VB運用記錄指針來確定下一個要被處理的數(shù)據(jù)記錄的位置。150 打開文件示例:在某實驗中,你需要在“D:\Experiment\”路徑下創(chuàng)建一個新的順序存取的數(shù)據(jù)文件Result.txt以記錄實驗結(jié)果。程序如下, Open"D:\Experiment\Result.txt"ForOutputAs#1151 打開文件示例:在某實驗中,你需要在“D:\Experime關(guān)閉文件152關(guān)閉文件152文件中的所有數(shù)據(jù)記錄已被處理完成之后,需要用Close語句來關(guān)閉文件:
Close[#filenumber]“filenumber”是某個已經(jīng)被打開的數(shù)據(jù)文件的識別號碼。如果Close語句中不包括任一個數(shù)據(jù)文件的識別號碼,那么所有在VB中已被打開的數(shù)據(jù)文件都將關(guān)閉。153文件中的所有數(shù)據(jù)記錄已被處理完成之后,需要用Close語句來 關(guān)閉文件示例:如果需要關(guān)閉打開文件示例中的Result.txt,你需要在程序中書寫如下語句:
Close#1154 關(guān)閉文件示例:如果需要關(guān)閉打開文件示例中的Result.t從文件中讀取數(shù)據(jù)155從文件中讀取數(shù)據(jù)155用Input語句從數(shù)據(jù)文件中讀取數(shù)據(jù)記錄,其格式如下:
Input#filenumber,variablelist156用Input語句從數(shù)據(jù)文件中讀取數(shù)據(jù)記錄,其格式如下:156其中“filenumber”是某個已經(jīng)被打開的數(shù)據(jù)文件的識別號碼?!皏ariablelist”是變量的列表。當(dāng)變量的列表中包括多個變量時,各個變量之間用逗號分割開。變量列表中的各變量分別對應(yīng)于數(shù)據(jù)記錄的各個數(shù)據(jù)領(lǐng)域。變量列表中變量的數(shù)量以及各變量的數(shù)據(jù)類型必須與數(shù)據(jù)記錄中數(shù)據(jù)領(lǐng)域的數(shù)量和數(shù)據(jù)類型相一致。各變量在變量列表中的順序也必須與數(shù)據(jù)記錄中各數(shù)據(jù)領(lǐng)域的順序相一致。157其中“filenumber”是某個已經(jīng)被打開的數(shù)據(jù)文件的識別 從文件中讀取數(shù)據(jù)示例: 最后通牒博弈實驗有10名實驗參加者參與,5名提議者和5名回應(yīng)者。在數(shù)據(jù)文件“D:\Experiment\Matching.txt”中存放著10名實驗參加者的配對方式。文件Matching.txt的內(nèi)容如下, 1,10 2,9 3,8 4,7 5,6158 從文件中讀取數(shù)據(jù)示例:158該文件中有5條數(shù)據(jù)記錄,每個數(shù)據(jù)記錄有兩個數(shù)據(jù)領(lǐng)域,前一個數(shù)據(jù)領(lǐng)域是提議者的識別號碼,而后一個數(shù)據(jù)領(lǐng)域是與之配對的回應(yīng)者的識別號碼。我們需要將提議者的識別號碼讀入變量組Proposer(1to5)中,相應(yīng)的回應(yīng)者識別號碼讀入變量組Responder(1to5)中。159該文件中有5條數(shù)據(jù)記錄,每個數(shù)據(jù)記錄有兩個數(shù)據(jù)領(lǐng)域,前一個數(shù) DimiAsInteger DimProposer(1To5)AsInteger,Responder(1To5)AsInteger
Open"D:\Experiment\Matching.txt"ForInputAs#1 Fori=1to5 Input#1,Proposer(i),Responder(i) Nexti Close#1160 DimiAsInteger160向文件存入數(shù)據(jù)161向文件存入數(shù)據(jù)161 用Write語句向數(shù)據(jù)文件存入數(shù)據(jù)記錄,其格式如下:
Write#filenumber,[outputlist]162 用Write語句向數(shù)據(jù)文件存入數(shù)據(jù)記錄,其格式如下:162“filenumber”是某個已經(jīng)被打開的數(shù)據(jù)文件的識別號碼?!皁utputlist”是輸出列表,輸出列表中既可以包含數(shù)字、字符串,也可以包含變量。當(dāng)輸出列表中含有多個分量時,各分量之間用逗號分割。對輸出列表的規(guī)定與Input語句中關(guān)于變量列表的規(guī)定類似。如果輸出列表中包括字符串,字符串外要加上雙引號。如果輸出列表中包括字符型的變量,在該變量外不要加引號。163“filenumber”是某個已經(jīng)被打開的數(shù)據(jù)文件的識別號碼 向文件存入數(shù)據(jù)示例: 在10名參加者參與的最后通牒博弈實驗完成配對后,提議者提出分配10元現(xiàn)金的提案,而回應(yīng)者選擇接受或拒絕。當(dāng)所有參加者都作出了選擇以后,研究人員要把實驗結(jié)果記錄到文件“D:\Experiment\Result.txt”中去。 Role(i)是第i個實驗參加者的角色,Group(i)是第i個實驗參加者所在的組的序號,F(xiàn)Choice(i)是第i個實驗參加者所在的組內(nèi)的提議者所作出的選擇,SChoice(i)是第i個實驗參加者所在的組內(nèi)的回應(yīng)者所作出的選擇,Payoff(i)是第i個實驗參加者的所得。我們需要把這些變量組中的數(shù)據(jù)存入到數(shù)據(jù)文件中。164 向文件存入數(shù)據(jù)示例:164 Open"D:\Experiment\result.txt"ForOutputAs#1
Write#1,"ID","Role","Group","FirstMover’sChoice","SecondMover’sChoice","Payoff"
Fori=1to10 Write#1,i,Role(i),Group(i),FChoice(i),SChoice(i),Payoff(i) Nexti
Close#1165 Open"D:\Experiment\result.tx3.EOF函數(shù)1663.EOF函數(shù)166EOF函數(shù)用于判定VB的記錄指針是否已指向數(shù)據(jù)文件的最后一條數(shù)據(jù)記錄之后,即數(shù)據(jù)文件是否已被處理完畢。EOF是“EndofFile”的縮寫。EOF函數(shù)的格式如下:
EOF(filenumber)167EOF函數(shù)用于判定VB的記錄指針是否已指向數(shù)據(jù)文件的最后一條“filenumber”是某個已被打開的數(shù)據(jù)文件的識別號。EOF函數(shù)返回布爾型值。若記錄指針已指向識別號為“filenumber”的數(shù)據(jù)文件的末尾(即最后一條數(shù)據(jù)記錄之后),則EOF函數(shù)的返回值為“真”,否則EOF函數(shù)的返回值為“偽”。168“filenumber”是某個已被打開的數(shù)據(jù)文件的識別號。1 EOF函數(shù)常作為判定條件與循環(huán)語句相結(jié)合,如:
DoWhileNotEOF(1) [loopinstructions] Loop
或
Do [loopinstructions] LoopUntilEOF(1)169 EOF函數(shù)常作為判定條件與循環(huán)語句相結(jié)合,如:169七、運用ESLNetworkQueue處理實驗中的信息傳遞170七、運用ESLNetworkQueue處理實驗中的信息傳經(jīng)濟(jì)實驗中最常遇見的問題是信息傳遞。所有實驗參加者在實驗過程中通過實驗程序所做出的決策,都要傳遞給研究人員并被記錄下來。許多實驗設(shè)計中,部分或全部實驗參加者的決策在特定條件下會被其他實驗參加者觀察到。如何通過實驗程序?qū)崿F(xiàn)?171經(jīng)濟(jì)實驗中最常遇見的問題是信息傳遞。171ESLNetworkQueue是專門處理實驗中信息傳遞問題的VB控件。該控件大幅度降低了信息傳遞的任務(wù)難度。通過該控件,只需要在程序中鍵入一些簡單的命令就能夠經(jīng)網(wǎng)絡(luò)傳遞信息。172ESLNetworkQueue是專門處理實驗中信息傳遞問1.信息傳遞的基本架構(gòu)1731.信息傳遞的基本架構(gòu)173信息傳遞的物理結(jié)構(gòu)
在實驗室中,研究人員所占用的計算機被稱作“服務(wù)器”。服務(wù)器要與實驗參加者保持距離,以免實驗參加者窺視到服務(wù)器上的信息。服務(wù)器所處的位置要便于研究人員觀察到實驗參加者的活動。為滿足這樣的要求,實驗經(jīng)濟(jì)學(xué)實驗室通常被分成實驗區(qū)和控制區(qū)兩個區(qū)域。在實驗區(qū)內(nèi),每個實驗參加者占用一臺計算機。實驗經(jīng)濟(jì)學(xué)實驗室的計算機數(shù)量依情況而定。174信息傳遞的物理結(jié)構(gòu)在實驗室中,研究人員所占用的計算機被稱作實驗者(即研究人員)與實驗參加者之間信息傳遞的關(guān)系
PC1實驗參加者1服務(wù)器(實驗者)……PCn實驗參加者n175實驗者(即研究人員)與實驗參加者之間信息傳遞的關(guān)系PC1在網(wǎng)絡(luò)中,服務(wù)器是信息傳遞的中心,與n個實驗參加者相連。實驗參加者各自占用一臺計算機,編號從PC1到PCn。每一個實驗參加者只能向服務(wù)器提交信息,也只能從服務(wù)器獲得信息。服務(wù)器在網(wǎng)絡(luò)中是唯一的信息中轉(zhuǎn)節(jié)點,實驗參加者之間直接的信息傳遞被嚴(yán)格禁止。目的是保證研究人員能觀察到實驗運行的全部過程,并記錄所有需要的數(shù)據(jù)。176在網(wǎng)絡(luò)中,服務(wù)器是信息傳遞的中心,與n個實驗參加者相連。172.ESLNetworkQueue簡介1772.ESLNetworkQueue簡介177用VB開發(fā)的經(jīng)濟(jì)實驗程序都是由服務(wù)器程序和實驗參加者程序共同構(gòu)成的。服務(wù)器程序在實驗者的計算機上運行,而實驗參加者程序在實驗參加者所使用的各臺計算機上運行。實驗參加者程序為實驗參加者提供輸入決策和閱讀反饋信息的界面,而服務(wù)器程序?qū)嶒瀰⒓诱叩臎Q策提供給研究人員、并把這些決策記錄下來。178用VB開發(fā)的經(jīng)濟(jì)實驗程序都是由服務(wù)器程序和實驗參加者程序共同ESLNetworkQueue是實現(xiàn)服務(wù)器程序和實驗參加者程序之間信息傳遞的工具。ESLNetworkQueue由兩個VB控件構(gòu)成:NQmonitor和NQsubject。NQmonitor被安裝在服務(wù)器程序上,而NQsubject則被裝在實驗參加者程序上。179ESLNetworkQueue是實現(xiàn)服務(wù)器程序和實驗參加ESLNetworkQueue的網(wǎng)絡(luò)結(jié)構(gòu)關(guān)系
NQsubject(1)NQmonitor……NQsubject(n)180ESLNetworkQueue的網(wǎng)絡(luò)結(jié)構(gòu)關(guān)系NQsub控件NQmonitor的特征181控件NQmonitor的特征181Mqserver屬性Mqserver屬性所描述的是服務(wù)器程序所在的計算機在互聯(lián)網(wǎng)中的IP地址。將恰當(dāng)?shù)腎P地址賦予NQmonitor.mqserver是進(jìn)行信息傳遞的第一步,語句如下:
NQmonitor.mqserver=ip&“:2955” 語句中的ip是計算機的IP地址。182Mqserver屬性Mqserver屬性所描述的是服務(wù)器程序OpenQueues方法
OpenQueues方法在NQmonitor.mqserver屬性被賦值后使用,其作用是打開信息隊列,讓控件NQmonitor做好信息傳遞服務(wù)的準(zhǔn)備。語法格式如下: NQmonitor.OpenQueues183OpenQueues方法OpenQueues方法在NQmoSendMessage方法
NQmonitor的SendMessage方法的作用是由服務(wù)器向某個實驗參加者發(fā)送信息,SendMessage方法要在信息隊列已打開(即應(yīng)用OpenQueues方法后)且所有實驗參加者程序都已連入信息隊列(即應(yīng)用ConnectQueues方法)之后才能夠應(yīng)用。其語法格式如下:
NQmonitor.SendMessageMessage,MessageType,SubjectMessage是服務(wù)器所發(fā)送的信息的內(nèi)容。MessageType是一個字符串,它所描述的是信息的類型。Subject是一個整數(shù),它所描述的是接受信息的實驗參加者的識別號碼。184SendMessage方法NQmonitor的SendMeMessageArrived事件MessageArrived事件是某個實驗參加者向服務(wù)器所發(fā)送的信息(即提交的決策)到達(dá)控件NQmonitor的信息隊列后服務(wù)器所做出的響應(yīng)。語法格式如下:
PrivateSubNQmonitor_MessageArrived(MessageAsVariant,MessageTypeAsString,SubjectAsInteger) [instructions] EndSubMessage是實驗參加者所發(fā)送的信息的內(nèi)容。MessageType是實驗參加者所發(fā)送的信息的類型。Subject是發(fā)送該信息的實驗參加者的識別號碼。這三個固有常量僅可在MessageArrived事件內(nèi)使用。185MessageArrived事件MessageArrived控件NQsubject的特征186
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度櫥柜品牌授權(quán)與區(qū)域代理合同6篇
- 二零二五年度城市公園春季植樹養(yǎng)護(hù)管理合同4篇
- 2025版租賃房屋租賃保證金合同4篇
- 二零二五版農(nóng)業(yè)科技園區(qū)建設(shè)合作合同4篇
- 2025年滬教版選修歷史下冊階段測試試卷含答案
- 2025年華師大版九年級地理上冊月考試卷含答案
- 2025年度旅游紀(jì)念品店轉(zhuǎn)讓合同范本及品牌合作保障
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師自測模擬預(yù)測題庫
- 2024年度青海省公共營養(yǎng)師之二級營養(yǎng)師題庫綜合試卷A卷附答案
- 2024年度青海省公共營養(yǎng)師之三級營養(yǎng)師綜合練習(xí)試卷A卷附答案
- 平安產(chǎn)險陜西省地方財政生豬價格保險條款
- 銅礦成礦作用與地質(zhì)環(huán)境分析
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點及參考回答
- 詢價函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 一個28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 乘務(wù)培訓(xùn)4有限時間水上迫降
- 2023年低年級寫話教學(xué)評語方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準(zhǔn)備技術(shù)要求
- GB/T 16474-2011變形鋁及鋁合金牌號表示方法
評論
0/150
提交評論