易語言常用詞匯 如果 如果真 判斷 判斷循環(huán)首 判斷循環(huán)尾 循環(huán)判斷首 循環(huán)判斷尾 計次循環(huán)首 計次循環(huán)尾 變量循環(huán)首 變量循環(huán)尾 到循環(huán)尾 跳出循環(huán) 返回 結(jié)束 相乘 相除 整除 求余數(shù) 相加 相減 負(fù) 取符號 取絕對值 取整 絕對取整 四舍五入 求次方 求平方根 求正弦 求余弦 求正切 求反正切 求自然對數(shù) 求反對數(shù) 是否運(yùn)算正確 置隨機(jī)數(shù)種子 取隨機(jī)數(shù) 等于 不等于 小于 大于 小于或等于 大于或等于 近似等于 并且 或者 取反 位取反 位與 位或 位異或 左移 右移 合并整數(shù) 合并短整數(shù) 賦值 連續(xù)賦值 重定義數(shù)組 取數(shù)組成員數(shù) 取數(shù)組下標(biāo) 復(fù)制數(shù)組 加入成員 插入成員 刪除成員 清除數(shù)組 數(shù)組排序 數(shù)組清零 取命令行 取運(yùn)行目錄 取執(zhí)行文件名 讀環(huán)境變量 寫環(huán)境變量 取所有發(fā)音 取發(fā)音數(shù)目 取拼音 取聲母 取韻母 發(fā)音比較 輸入字比較 取文本長度 取文本左邊 取文本右邊 取文本中間 字符 取代碼 尋找文本 倒找文本 到大寫 到小寫 到全角 到半角 到文本 刪首空 刪尾空 刪首尾空 刪全部空 文本替換 子文本替換 取空白文本 取重復(fù)文本 文本比較 分割文本 指針到文本 到時間 增減時間 取時間間隔 取某月天數(shù) 時間到文本 取時間部分 取年份 取月份 取日 取星期幾 取小時 取分鐘 取秒 指定時間 取現(xiàn)行時間 置現(xiàn)行時間 取日期 取時間 到數(shù)值 數(shù)值到大寫 數(shù)值到金額 數(shù)值到格式文本 取十六進(jìn)制文本 取八進(jìn)制文本 到字節(jié) 到短整數(shù) 到整數(shù) 到長整數(shù) 到小數(shù) 取字節(jié)集長度 到字節(jié)集 取字節(jié)集數(shù)據(jù) 取字節(jié)集左邊 取字節(jié)集右邊 取字節(jié)集中間 尋找字節(jié)集 倒找字節(jié)集 字節(jié)集替換 子字節(jié)集替換 取空白字節(jié)集 取重復(fù)字節(jié)集 分割字節(jié)集 指針到字節(jié)集 取磁盤總空間 取磁盤剩余空間 取磁盤卷標(biāo) 置磁盤卷標(biāo) 改變驅(qū)動器 改變目錄 取當(dāng)前目錄 創(chuàng)建目錄 刪除目錄 復(fù)制文件 移動文件 刪除文件 文件更名 文件是否存在 尋找文件 取文件時間 取文件尺寸 取文件屬性 置文件屬性 取臨時文件名 讀入文件 寫到文件 打開文件 打開內(nèi)存文件 關(guān)閉文件 關(guān)閉所有文件 鎖住文件 解鎖文件 移動讀寫位置 移到文件首 移到文件尾 讀入字節(jié)集 寫出字節(jié)集 讀入文本 寫出文本 讀入一行 寫文本行 讀入數(shù)據(jù) 寫出數(shù)據(jù) 是否在文件尾 取讀寫位置 取文件長度 插入字節(jié)集 插入文本 插入文本行 刪除數(shù)據(jù) 打開加密文件 運(yùn)行 取剪輯板文本 置剪輯板文本 剪輯板中可有文本 清除剪輯板 取屏幕寬度 取屏幕高度 取鼠標(biāo)水平位置 取鼠標(biāo)垂直位置 取顏色數(shù) 輸入框 信息框 鳴叫 取啟動時間 置等待鼠標(biāo) 恢復(fù)鼠標(biāo) 延時 取文本注冊項 取數(shù)值注冊項 取字節(jié)集注冊項 寫注冊項 刪除注冊項 注冊項是否存在 取默認(rèn)底色 快照 讀配置項 寫配置項 取配置節(jié)名 取操作系統(tǒng)類別 多文件對話框 播放音樂 停止播放 播放MID 播放MP3 同步播放MP3 暫停播放MP3 繼續(xù)播放MP3 取MP3播放狀態(tài) 輸出調(diào)試文本 暫停 檢查 是否為調(diào)試版 載入 選擇 多項選擇 是否為空 是否已創(chuàng)建 取數(shù)據(jù)類型尺寸 取顏色值 取事件組件 事件轉(zhuǎn)移 復(fù)制窗口組件 處理事件 載入圖片 卸載圖片 取硬盤特征字 取系統(tǒng)語言 寫到內(nèi)存 DLL命令調(diào)用轉(zhuǎn)向 置錯誤提示管理 置DLL裝載目錄 是否支持多用戶 取錯誤碼 取錯誤信息 創(chuàng)建 打開 替換打開 置當(dāng)前庫 取當(dāng)前庫 關(guān)閉 全部關(guān)閉 取庫文件名 是否已打開 取記錄數(shù) 取創(chuàng)建時間 取字段數(shù) 取字段名 改字段名 取字段類型 取字段尺寸 新建索引 置當(dāng)前索引 取當(dāng)前索引 更新索引 取索引數(shù) 取索引名 取索引字段 置加鎖重試時間 鎖住數(shù)據(jù)庫 解鎖數(shù)據(jù)庫 鎖住增刪 解增刪鎖 鎖住記錄 解鎖記錄 全部解鎖 取平均值 求和 取最大值 取最小值 取最大時間 取最小時間 計算數(shù)目 復(fù)制結(jié)構(gòu) 復(fù)制記錄 計算排序 排序 分類計算 添加 加記錄 加空記錄 替換 修改 刪除 是否已刪除 恢復(fù)刪除 徹底刪除 清空 讀 寫 讀字段 寫字段 附加字節(jié)集 附加備注 索引查找 查找 到首記錄 到尾記錄 跳過 取記錄號 跳到 取標(biāo)簽 記錄是否存在 標(biāo)簽跳轉(zhuǎn) 首記錄前 尾記錄后 寫出緩存 寫出所有緩存 編輯 是否已加密 置數(shù)據(jù)庫密碼 密碼輸入框 復(fù)制密碼 取主機(jī)名 通信測試 轉(zhuǎn)換為主機(jī)名 轉(zhuǎn)換為IP地址 標(biāo)準(zhǔn)輸出 標(biāo)準(zhǔn)輸入 取窗口句柄 銷毀 獲取焦點(diǎn) 可有焦點(diǎn) 取用戶區(qū)寬度 取用戶區(qū)高度 禁止重畫 允許重畫 重畫 部分重畫 取消重畫 刷新顯示 移動 調(diào)整層次 彈出菜單 發(fā)送信息 投遞信息 取標(biāo)記組件 置外形圖片 激活 置托盤圖標(biāo) 彈出托盤菜單 置父窗口 加入文本 取設(shè)備句柄 清除 取點(diǎn) 畫點(diǎn) 畫直線 畫橢圓 畫弧線 畫弦 畫餅 畫矩形 畫漸變矩形 填充矩形 畫圓角矩形 翻轉(zhuǎn)矩形區(qū) 畫多邊形 置寫出位置 寫文本行 滾動寫行 寫出 定位寫出 取寬度 取高度 畫圖片 取圖片寬度 取圖片高度 復(fù)制 取圖片 單位轉(zhuǎn)換 調(diào)用反饋事件 取頂端可見項目 置頂端可見項目 取項目數(shù) 取項目數(shù)值 置項目數(shù)值 取項目文本 置項目文本 加入項目 插入項目 刪除項目 清空 選擇 取頂端可見項目 置頂端可見項目 取項目數(shù) 取項目數(shù)值 置項目數(shù)值 取項目文本 置項目文本 取已選擇項目數(shù) 取所有被選擇項目 是否被選擇 選擇項目 取焦點(diǎn)項目 置焦點(diǎn)項目 加入項目 插入項目 刪除項目 清空 選擇 取頂端可見項目 置頂端可見項目 取項目數(shù) 取項目數(shù)值 置項目數(shù)值 取項目文本 置項目文本 加入項目 插入項目 刪除項目 清空 選擇 是否被選中 選中項目 是否被允許 允許 取子夾數(shù)目 取子夾名稱 置子夾名稱 跳轉(zhuǎn) 打開 取設(shè)備句柄 開始打印 結(jié)束打印 取消打印 換頁 開始下一份 畫點(diǎn) 畫直線 畫橢圓 畫弧線 畫弦 畫餅 畫矩形 畫漸變矩形 填充矩形 畫圓角矩形 畫多邊形 置寫出位置 寫文本行 寫出 定位寫出 取寬度 取高度 畫圖片 取圖片寬度 取圖片高度 置自定義紙張類型 刪除自定義紙張類型 取自定義紙張大小 取所有紙張類型 單位轉(zhuǎn)換 發(fā)送數(shù)據(jù) 取回數(shù)據(jù) 連接 斷開連接 發(fā)送數(shù)據(jù) 取回數(shù)據(jù) 取回數(shù)據(jù) 取回客戶 發(fā)送數(shù)據(jù) 斷開客戶 啟動 停止 發(fā)送數(shù)據(jù) 信號操作 置光標(biāo) 選擇 全部選擇 取光標(biāo)行號 取光標(biāo)列號 取選擇行數(shù) 取選擇列數(shù) 等寬縮放 全部復(fù)制 復(fù)制 粘貼到光標(biāo)處 粘貼 打印 打印預(yù)覽 到首記錄 到尾記錄 跳過 跳到 取記錄號 取表頭行數(shù) 置表頭行數(shù) 取表頭列數(shù) 置表頭列數(shù) 取行高 置行高 取列寬 置列寬 取類型 置類型 取文本色 置文本色 取背景色 置背景色 取字體名 置字體名 取字體尺寸 置字體尺寸 取字體屬性 置字體屬性 取邊距 置邊距 取文本輸入格式 置文本輸入格式 取對齊方式 置對齊方式 取密碼方式 置密碼方式 取文本 置文本 取數(shù)據(jù) 置數(shù)據(jù) 合并 分解 是否被合并 加線條 刪線條 是否有線條 清除 置初始屬性 初始尺寸 取行數(shù) 取列數(shù) 插入行 添加行 刪除行 插入列 刪除列 添加 存到字節(jié)集 從字節(jié)集讀 存到文件 從文件讀 單元格到字節(jié)集 字節(jié)集到單元格 單元格到文件 文件到單元格 刷新 保存更改 打印設(shè)置 〈打印設(shè)置信息 取打印設(shè)置 置打印設(shè)置 取打印頁寬 取打印頁高 取只讀方式 置只讀方式 打開 關(guān)閉 取連接文本 啟動事務(wù) 回滾事務(wù) 提交事務(wù) 查詢 重新查詢 關(guān)閉記錄集 首記錄前 尾記錄后 到首記錄 到尾記錄 到前一記錄 到后一記錄 讀 執(zhí)行 打開MDB數(shù)據(jù)庫 打開SQL數(shù)據(jù)庫 創(chuàng)建 獲取 清除 是否為空 是否相等 讀文本屬性 讀數(shù)值屬性 讀邏輯屬性 讀日期屬性 讀對象型屬性 讀屬性 寫屬性 方法 通用方法 文本方法 數(shù)值方法 邏輯方法 日期方法 對象型方法 創(chuàng)建圖片對象 創(chuàng)建字體對象 取回圖片 取回字體 取錯誤 查看 取接口 清除 取類型 取數(shù)組成員數(shù) 取文本 取數(shù)值 取邏輯值 取日期 取對象 取變體型 賦值 創(chuàng)建 置類型 取字節(jié)集 |
學(xué)習(xí)易語言失敗的十種現(xiàn)象2009-12-10 14:35
分享1、與易語言擦肩而過,不去細(xì)致了解易語言,而是粗粗看過就下結(jié)論,如易語言輸入中文慢啦,易語言不能寫操作系統(tǒng)啦。還有的人是糾纏于無關(guān)緊要的地方,如是否是全編譯,是否先將中文轉(zhuǎn)換為英文進(jìn)行的編譯。 易語言通過首拼輸入已完全解決了中文輸入慢的問題,而面向快速應(yīng)用開發(fā)而不是用于寫操作系統(tǒng)的,再說你寫操作系統(tǒng)要多少人年算過帳嗎? 易語言將中文轉(zhuǎn)換為英文再進(jìn)行編譯有這個必要嗎?多一道手續(xù)不會慢嗎,既然是全中文的,就以中文的語法分析+詞法分析,最后直接生成CPU指令不是更方便嗎,為何要多加一道手續(xù)呢。 2、初有了解,但了解還不夠。受到一點(diǎn)小小的打擊就承受不了。 于是乎自己很滿足,學(xué)習(xí)一段時間后,可以寫個小程序了,到論壇上發(fā)個小貼子,結(jié)果給罵得一無是處,于是生氣不玩了。這樣做是否是太小孩脾氣了呢? 3、不能堅持學(xué)習(xí)。成功總是給那些有準(zhǔn)備的人。 不能堅持學(xué)習(xí)下去,遇到困難總是埋怨易語言不好,然后發(fā)一通嘮,只有堅持不懈的人才會到達(dá)成功的彼岸. 有困難一般有人能夠幫助你,如在論壇搜索一下有沒有以前別人寫過的例程,如果沒有可以發(fā)貼求助, 4、墻頭草,兩邊倒,總拿易語言與別的語言對比。 易語言先與VB比,易語言現(xiàn)在比VB強(qiáng)一點(diǎn)了,又與DELPHI比,總之,舉棋不定,在學(xué)與不學(xué)上傷腦筋。這是猴子掰玉米的作風(fēng)呀! 5、發(fā)現(xiàn)程序不能運(yùn)行,不先自己找原因,而總是說易語言有BUG,發(fā)貼大叫求助,等問題解決了,還是自己的錯。 易語言有強(qiáng)大的調(diào)試功能,如果您能正確應(yīng)用,一般的問題都能自己查出來的。 6、團(tuán)隊的無效無發(fā)。 自己的項目太大,不能完成,于是從網(wǎng)上組織團(tuán)隊開發(fā),組織不夠嚴(yán)密,團(tuán)隊開發(fā)失?。⌒б娌荒芑厥?,誰還有積極性呢? 7、將別人的軟件改改界面就發(fā)布,一點(diǎn)也沒有改進(jìn)和集成,盜版別人的軟件,于是乎,這種人根本沒有學(xué)到東西。 8、已是易語言老用戶了,總是發(fā)一些批評易語言的貼子,以此來發(fā)瀉編程中的壓力。跟風(fēng)的人也不少,反正論壇是自由的,卻不知,你的貼子會影響別人的學(xué)習(xí)熱情。 9、死追版主的貼子,版主一發(fā)言,都有不對的地方,盡力打擊,不讓版主發(fā)言。幫助過自己的版主都是特別好,未幫過自己的都一無是處。 10、違反國家法律,什么寫病毒,寫外掛,寫農(nóng)行驗(yàn)證碼破解??傆幸惶煳吹没貓?,先得一手拷。 以上是易友們總結(jié)的,要好好學(xué)習(xí)!加強(qiáng)編程水平!! |
概括地說,“算法”是指解題方案的準(zhǔn)確而完整的描述。 對于一個問題,如果可以通過一個計算機(jī)程序,在有限的存儲空間內(nèi)進(jìn)行有限長的時間而得到正確的結(jié)果,則稱該問題是算法可解的。但算法不等于程序,也不等于計算方法。程序可以作為算法的一種描述,但程序通常還需考慮很多與方法和分析無關(guān)的細(xì)節(jié)問題,這是因?yàn)樵诰帉懗绦驎r要受到計算機(jī)系統(tǒng)運(yùn)行環(huán)境的限制。通常,程序設(shè)計的質(zhì)量不可能優(yōu)于算法的設(shè)計。 通常求解一個問題可能會有多種算法可供選擇,選擇的主要標(biāo)準(zhǔn)是算法的正確性和可靠性,簡單性和易理解性。其次是算法所需要的存儲空間少和執(zhí)行更快等。 算法設(shè)計是一件非常困難的工作,經(jīng)常采用的算法設(shè)計技術(shù)主要有列舉法、遞推法、貪婪法、回溯法、分治法、動態(tài)規(guī)劃法等等。另外,為了更簡潔的形式設(shè)計和藐視算法,在算法設(shè)計時又常常采用遞歸技術(shù),用遞歸描述算法。 8.1列舉(窮舉、枚舉)法 列舉法的基本思想是根據(jù)提出的問題,列舉所有可能情況,并用問題中提出的條件檢驗(yàn)?zāi)男┦切枰?,哪些是不需要的。因此,列舉法常用于解決“是否存在”或“有多少種可能”等類型的問題。例如,求解不定方程的問題可以采用列舉法。 列舉法的特點(diǎn)是算法比較簡單,但當(dāng)列舉的可能情況較多時,執(zhí)行列舉算法的工作量將會很大。因此,在用列舉法設(shè)計算法時,應(yīng)該重點(diǎn)注意使方案優(yōu)化,盡量減少運(yùn)算工作量。通常,只要對實(shí)際問題作詳細(xì)的分析,將與問題有關(guān)的知識條理化、完備化、系統(tǒng)化,從中找出規(guī)律,或?qū)λ锌赡艿那闆r進(jìn)行分類,引出一些有用的信息,列舉量是可以減少的。 先介紹“列舉法”在易語言中實(shí)現(xiàn)的方法。 列舉法,顧名思義是列舉出所有可能的情況,并用問題的條件來一一檢驗(yàn),并從中找出符合要求的解。特點(diǎn)比較簡單,但是在寫列舉算法時盡量過濾掉一些不必要的情況,優(yōu)化算法。下面舉一個例子,在易語言中編寫代碼實(shí)現(xiàn),來說明列舉法的基本思想,以及如何減少列舉量。 大家都知道百雞的問題吧!母雞每只3元,公雞每只2元,小雞每只0.5元,計算一下如何100塊錢買100只雞。 計算中,只有以下兩個條件成立,才輸出結(jié)果。 母雞數(shù)量+公雞數(shù)量+小雞數(shù)量=100只 3×母雞數(shù)量+2×公雞數(shù)量+0.5×小雞數(shù)量=100元 可以看到,各層循環(huán)均需循環(huán)101次,因此總循環(huán)次數(shù)為1013 ,列舉量太大。但只對問題稍加分析,很容易發(fā)現(xiàn)這個算法還可以改進(jìn),減少不必要的循環(huán)次數(shù)。 首先,考慮到母雞為3元一只,因此,最多只能買33只母雞,即算法中的外循環(huán)只需要從0到33就可以了,沒有必要從0 到100。 其次,考慮到公雞為2 元一只,因此,最多只能買50只公雞。又考慮到對公雞的列舉是在算法的第二層循環(huán)中,因此,在第一層循環(huán)中已確定買母雞數(shù)量的情況下,公雞最多只能買50-母雞數(shù)量,即第二層中對“公雞”只需要從0到50-母雞數(shù)量就可以了。 最后,考慮到總共買100只雞,因此,在第一層循環(huán)中已確定買母雞的數(shù)量,且第二層已確定買公雞的情況下,買小雞的數(shù)量只能是100-母雞數(shù)量-公雞數(shù)量,即第三層的循環(huán)已沒有必要了。并且,在這種情況下,條件:母雞數(shù)量+公雞數(shù)量+小雞數(shù)量=100只自然已經(jīng)滿足。 列舉所有可能情形,最直觀的是聯(lián)系循環(huán)的算法。但,循環(huán)層數(shù)的改變,就影響了這一問題的解,即沒有一般性。例如:有多種雞,而每種雞的價格又不同,每次根據(jù)一個固定的金額購買某幾種雞。 8.2遞推法 所謂遞推,是指從已知的初始條件出發(fā),逐次推出所要求的各中間結(jié)果和最后結(jié)果。其中初始條件或是問題本身已經(jīng)給定,或是通過對問題的分析與化簡后確定。遞推本質(zhì)上也屬于歸納法。許多遞推公式,實(shí)際上是通過對實(shí)際問題的分析與歸納而得到的,因此,遞推是歸納的結(jié)果。 也就是利用問題本身所具有的一種遞推關(guān)系求問題解的一種方法。設(shè)要求問題規(guī)模為N的解,當(dāng)N=1時,解或者已知,或者能非常方便地得到解。能采用遞推法構(gòu)造算法的問題有重要的遞推性質(zhì),即當(dāng)?shù)玫絾栴}規(guī)模為i-1的解后,由問題的遞推性質(zhì),能從已求得的規(guī)模為1,2,…,i-1的一系列解,構(gòu)造出問題規(guī)模為I的解。這樣,程序可從i=0或i=1出發(fā),重復(fù)地,由已知至i-1規(guī)模的解,通過遞推,獲得規(guī)模為i的解,直至得到規(guī)模為N的解。 遞推法中最具代表的就是階乘法,下面采用分段乘法進(jìn)行大數(shù)求階乘。 在計算階乘的時候,隨著數(shù)字的增加,計算的結(jié)果會以極快的速度激增。當(dāng)使用整數(shù)型數(shù)據(jù)儲存結(jié)果時,當(dāng)超過12時,計算結(jié)果將溢出;當(dāng)使用長整數(shù)型數(shù)據(jù)儲存結(jié)果時,當(dāng)超過20時,計算結(jié)果將溢出。 為了能夠計算較大的整數(shù)的階乘并得到準(zhǔn)確的結(jié)果,必須考慮適當(dāng)?shù)乃惴?,分段乘法是其中的一種,將每一步的中間結(jié)果使用數(shù)組分段儲存,數(shù)組的一個成員儲存一段數(shù)據(jù),由于我們經(jīng)常使用的是10進(jìn)制,因此以10的n次方為標(biāo)準(zhǔn)進(jìn)行分段是可行的。同時需要考慮分組相乘時,每組是否會出現(xiàn)溢出,因此數(shù)組的類型采用長整數(shù)型。 這里采用該算法寫了一個模塊,循環(huán)和數(shù)組配合,雖然能計算出正確的結(jié)果,但速度較慢,計算10000的階乘需要50秒(最快的在1秒左右,大家可以使用Windows的計算器試試),計算50000的階乘,耗時24分鐘,估計不會有人嘗試計算更大的數(shù)值。 分段相乘完畢后還要考慮每組的數(shù)值是否超過分段的標(biāo)準(zhǔn),如果超過要進(jìn)位。 代碼參見例程。 8.3遞歸算法 描述遞歸定義的函數(shù)或求解遞歸問題的過程稱為遞歸算法。一個遞歸算法,本質(zhì)上是將較復(fù)雜的處理歸結(jié)為較簡單的處理,直到最簡單的處理。因此,遞歸的基礎(chǔ)也是歸納。 下面學(xué)習(xí)易語言中遞歸算法的運(yùn)用。 在易語言中許多地方可以用到遞歸算法,典型特征是自己調(diào)用自己。逐步到達(dá)條件邊界,直到目的完成,如:“尋找文件()”等,遞歸算法結(jié)構(gòu)比較簡練,清晰易讀,但,缺點(diǎn)是執(zhí)行效率比較抵。 下面來練習(xí)尋找的的寫法。 首先需要作一個單獨(dú)的尋找子程序,如:名字取為“尋找”,參數(shù)為“尋找路徑” 文本型。 由于“尋找文件()”命令很特殊,好多初學(xué)者不好理解,因?yàn)閷ふ椅募看沃环祷匾粋€匹配對象,所以一定要用循環(huán)才可以找到所有的匹配條件者,而第一次使用尋找到一個匹配條件者,再繼續(xù)尋找其他文件就不需要指定尋找文件條件了。 代碼可分為三部分, 第二部分是關(guān)鍵代碼,首先調(diào)用 文件名 = 尋找文件 (尋找路徑 + “*.tmp”, ) 因?yàn)橹环祷匾粋€文本,所以用一個判斷循環(huán),判斷“文件名”是否為空 ,如果不空 繼續(xù)尋找,否者…… 這部分只尋找一個目錄里所有匹配者,不會尋找里面文件夾里的匹配者,當(dāng)然不能放過它們, 第三部分是遞歸算法,等于子程序調(diào)用自己 尋找 (尋找路徑 + 文件名) 就是這句,你也許會問 如果真 (取文本左邊 (文件名, 1) ≠ “.”) 是什么意思,其實(shí)就是判斷文件名是不是文件夾,再XP命令提示符輸入“dir”,一看就知道了。“.”是本級目錄,“..”是上一級目錄。 一定不要忘了在這個子程序里面加上 處理事件 () 否則運(yùn)行后機(jī)器會假死。 下面是另一個運(yùn)用遞歸算法求最大公約數(shù)的例程,核心部分只用了6行代碼, 注意:% 是求余數(shù)的運(yùn)算符,不是除號,也不是百分號。 此例中求最大公約數(shù),沒有使用常用的短除算法,使用輾轉(zhuǎn)相除法更便于編程。 8.4查找運(yùn)算 順序表上的查找運(yùn)算有很多種。如順序查找法、二分法、分塊查找法等。 我們先來介紹順序查找法。順序查找法,就是在表中順序?qū)Ρ裙?jié)點(diǎn)和欲查找數(shù)據(jù)的值,相同則返回相應(yīng)的位置值。其過程,就是對表的順序掃描。這是一種方法簡單,但效率不高的查找方式。 8.5對分(二分)查找 對分查找又稱折半查找,它是一種效率高的查找方法。 對分查找的基本思想是: 1.首先確定該區(qū)的中點(diǎn)位置; 2.然后將待查的值與中間值進(jìn)行比較,若相等,則查找成功并返回此位置,否則須確定新的查找區(qū)間,繼續(xù)二分查找,具體方法如下: (1)若中間值大于待查的值,則由表的有序性可知,中間值右表中的值均大于待查值,因此若表中存在等于待查值的值,則該值必定是在中間值左邊的子表中,故新的查找區(qū)是左子表。 (2)類似地,若中間值小于待查值,則要查找的值必在中間值的右子表中,即新的查找區(qū)間是右子表。下一次查找是針對新的查找區(qū)間進(jìn)行的。 因此,從初始的查找區(qū)間開始,每經(jīng)過一次與當(dāng)前查找區(qū)間的中點(diǎn)位置上的節(jié)點(diǎn)的比較,就確定是否成功,不成功則當(dāng)前的查找區(qū)間就縮小一半。這一過程重復(fù)直至找到中間值的值,或者直至當(dāng)前的查找區(qū)間為空(即查找失?。r為止。 數(shù)據(jù)越多越能體現(xiàn)對分查找法的好處。 其實(shí),每次插入都是比較大小安排插入位置,為了插到大于和小于數(shù)值的中間。如4、6、8、50、55、59,如果給一個56,當(dāng)然知道插入到55后面,以前的代碼是從4開始一一比較,而我們可以直接把數(shù)組對分,比一下是比前一部分大,還是比后一部分大,再在剩余結(jié)果對分比較,再對分……。逐一比較平面需要比較5次,對分只需要比較2次,數(shù)據(jù)越多,越能體現(xiàn)。 8.6冒泡排序 冒泡排序是最簡單也是最經(jīng)典的。這種方法的基本思想是,將待排序的元素看作是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮(相反,較大的元素比較重,從而要往下沉)。在冒泡排序算法中我們要對這個“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并同時注意兩個相鄰的元素的須序是否正確。如果發(fā)現(xiàn)兩個相鄰元素的須序不對,即“輕”的元素在下面,就交換它們的位置。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置(或最重的元素沉到最低位置);處理兩遍之后,“次輕”的元素就浮到了次高位置。在第二遍處理時,由于最高位置上的元素已是“最輕”元素,所以不必檢查。一般地,第i遍處理時,不需檢查第i高位置以上的元素,因?yàn)榻?jīng)過前面i-1遍的處理,它們已正確地排好序了。 關(guān)鍵在于每循環(huán)一遍都記錄交換的次數(shù),避免下次不必要的比較,還要記住最后交換的位置,這個位置以后的數(shù)據(jù)下次可以在之前比較。 比如現(xiàn)在有一組數(shù)據(jù),第一次先比較所有的數(shù)據(jù),而后記下最后比較位,而每次如果有數(shù)據(jù)交換,就繼續(xù)循環(huán)比較。而比較的最后位置則是循環(huán)的最大值。 8.7 直接插值排序 直接插入排序的基本思想是:每次把一個待排序的節(jié)點(diǎn),按其關(guān)鍵字的大小插入到前面已排序好節(jié)點(diǎn)中,直到全部節(jié)點(diǎn)插入完畢。 兩個重要概念。有序區(qū):是指順序表中已排序好的部分。無序區(qū):即表中未進(jìn)行排序的區(qū)域。例如,一維數(shù)組[2,5,6,2,9,5,47] 有序區(qū)的范圍是:【1,3】(從1到3節(jié)點(diǎn)),無序區(qū)是:【4,7】(從4到7節(jié)點(diǎn))。對于任何一個節(jié)點(diǎn)為n(n>1)的順序表,其初始有序區(qū)的范圍是【1,1】無序區(qū)的范圍是【2,n】。插入排序的基本思想就是不斷增大有序區(qū),減小無序。直到無序區(qū)消失。 直接插入排序的原理:每次將無序區(qū)的第一個節(jié)點(diǎn)插入到有序區(qū)中。 例如,無序數(shù)組[8,5,6,4,3,9,4],其初始有序區(qū)【1,1】,無序區(qū)【2,7】。第一次插入運(yùn)算,將無序區(qū)第一個節(jié)點(diǎn)“5”插到前面的有序區(qū)中。運(yùn)算后數(shù)組為[5,8,6,4,3,9,4],有序區(qū)為【1,2】無序區(qū)為【3,7】。第二次插入運(yùn)算,將無序區(qū)的第一個節(jié)點(diǎn)“6”插入到前面的有序區(qū)中,運(yùn)算后的數(shù)組為[5,6,8,4,3,9,4],其有序區(qū)為【1,3】,無序區(qū)減小成【4,7】。 如此重復(fù),經(jīng)過6次插入運(yùn)算,有序區(qū)成為【1,7】,無序區(qū)消失。此數(shù)組成為有序數(shù)組。代碼如下: 本段代碼用到了查找算法和插入算法。 直接插入排序法的代碼在執(zhí)行過程中,大部分時間是消耗在查找插入點(diǎn)位置和移動節(jié)點(diǎn)上。節(jié)點(diǎn)的移動是必須的,此類算法是無法減少移動次數(shù)的,除非是用新的算法。而每次都從無序區(qū)首(即表的第一個節(jié)點(diǎn))開始尋找插入點(diǎn)的過程是完全沒有必要的,可以用我們講過的二分查找法優(yōu)化此過程。以下是實(shí)現(xiàn)代碼。 上面對直接插入排序進(jìn)行了優(yōu)化,我們暫且把優(yōu)化算法稱為二分直接插入排序,這種算法僅僅是對尋找插入點(diǎn)的過程做了優(yōu)化。如果我們能找到另一種方法,可同時減少尋找插入點(diǎn)的次數(shù)和移動節(jié)點(diǎn)的次數(shù),就可顯著的提高排序的運(yùn)算速度。 以下介紹的希爾排序算法是直接插入排序法的一種變種,它能有效的減少這兩個方面的運(yùn)算量,從而顯著的提高排序操作的運(yùn)算速度。 原理: 先取一個小于節(jié)點(diǎn)數(shù)的整數(shù)k作為分組單位,把表上的所有相距k的節(jié)點(diǎn)邏輯上看成一組。在個組內(nèi)進(jìn)行直接插入排序;減小k的取值,把表上的所有相距k的節(jié)點(diǎn)邏輯上看成一組。在個組內(nèi)進(jìn)行直接插入排序;重復(fù)以上步驟;最后一次k取1,即對整個表做直接插入排序。 其中k稱為增量,增量的取值集合稱為增量表。 例,無序數(shù)組[4,5,8,2,6,8,9,2,4,5,1,6,1,5,4,2] 增量表我們?nèi)〕?#8220;5,3,1”(k的取值集合)。 (1) 當(dāng)k=5時,表上的邏輯分組情況為:【1,6,11。16】【2,7,12】【3,8,13】【4,9。14】【5,10,15】(【 】內(nèi)均是數(shù)組的下標(biāo)值)。k=5時組內(nèi)進(jìn)行直接插入排序過程為: 第一組:數(shù)組成員分別為“4”,“8”,“1”,“2”。排序后的數(shù)組[1,5,8,2,6,2,9,2,4,5,4,6,1,5,4,8] 第二組:數(shù)組成員分別為“5”,“9”,“6”。 排序后的數(shù)組[1,5,8,2,6,2,6,2,4,5,4,9,1,5,4,8] 第三組:數(shù)組成員分別為“8”,“2”,“1”。 排序后的數(shù)組[1,5,1,2,6,2,6,2,4,5,4,9,8,5,4,8] 第四組:數(shù)組成員分別為“2”,“4”,“5”。 排序后的數(shù)組[1,5,1,2,6,2,6,2,4,5,4,9,8,5,4,8] 第五組:數(shù)組成員分別為“6”,“5”,“4”。 排序后的數(shù)組[1,5,1,2,4,2,6,2,4,5,4,9,8,5,6,8] 此次運(yùn)算后數(shù)組為[1,5,1,2,4,2,6,2,4,5,4,9,8,5,6,8] (2) 當(dāng)k=3時,表上的邏輯分組情況為:【1,4,7,10,13,16】【2,5,8,11,14】【3,6,9,12,15】(【 】內(nèi)均是數(shù)組的下標(biāo)值)。k=3時組內(nèi)進(jìn)行直接插入排序過程為: 第一組:數(shù)組成員分別為“1”,“2”,“6”,“5”,“8”,“8” 排序后的數(shù)組[1,5,1,2,4,2,5,2,4,6,4,9,8,5,6,8] 第二組:數(shù)組成員分別為“5”,“4”,“2”,“4”,“6” 排序后的數(shù)組[1,2,1,2,4,2,5,4,4,6,5,9,8,6,6,8] 第三組:數(shù)組成員分別為“1”,“2”,“4”,“9”,“6” 排序后的數(shù)組[1,2,1,2,6,2,6,2,4,5,4,6,8,5,9,8] 此次運(yùn)算后數(shù)組為[1,2,1,2,6,2,6,2,4,5,4,6,8,5,9,8] (3) 當(dāng)k=1時,表上的邏輯分組情況為:【1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16】(【 】內(nèi)均是數(shù)組的下標(biāo)值)。即整個表分為一個組,此時對整個表做直接插入表排序,可以發(fā)現(xiàn)此次運(yùn)算時節(jié)點(diǎn)移動是非常少的。此次運(yùn)算后數(shù)組為有序數(shù)組。 通過以上詳細(xì)的運(yùn)算過程描述,我們可以發(fā)現(xiàn):當(dāng)k值很大時,組很小,查找和移動量都很小,隨著k值增大,組雖然增大,查找運(yùn)算量增大了,但最耗時間的移動節(jié)點(diǎn)運(yùn)算量卻在減小??偟呐判蜻\(yùn)算耗時是顯著的減小,效率成倍提高。代碼如下: 8.8 線表插值排序 在易語言中,一維數(shù)組上插入一個數(shù)據(jù)可以直接調(diào)用 “插入成員(欲插入成員的數(shù)組變量,欲插入的位置,欲插入的成員數(shù)據(jù))”系統(tǒng)命令。我們來研究它是怎么實(shí)現(xiàn)的。 原理很簡單,當(dāng)向一維數(shù)組的第i個位置插入一個數(shù)據(jù)時,第i個位置及它以后的數(shù)據(jù)依次都向后移動,將第i個位置騰出來后,把所要插入的數(shù)據(jù)寫入該位置。 具體的實(shí)現(xiàn)步驟如下: (1) 首先增加數(shù)組的長度。在易語言中可以用“加入成員()”和“重定義數(shù)組()”兩種方法。前者可能更快些。 (2) 移動數(shù)據(jù)。不破壞數(shù)據(jù),當(dāng)然是從數(shù)組的最后位置向前移動了??稍O(shè)一個位置變量“數(shù)據(jù)位置”指向最后位置。“數(shù)組” 是定義的一維數(shù)組。“數(shù)組[數(shù)據(jù)位置]”,就是我們插入數(shù)組尾部的空數(shù)據(jù)。 數(shù)組[數(shù)據(jù)位置]=數(shù)組[數(shù)據(jù)位置-1] 把數(shù)組的倒數(shù)第二個數(shù)據(jù)移到尾部。然后 數(shù)據(jù)位置=數(shù)據(jù)位置-1 “數(shù)據(jù)位置”指向數(shù)組的倒數(shù)第二個數(shù)據(jù), 數(shù)組[數(shù)據(jù)位置]=數(shù)據(jù)[數(shù)據(jù)位置-1] 把數(shù)組的倒數(shù)第三個數(shù)據(jù)移到數(shù)組的倒數(shù)第二個位置上,......依次移動,最后把數(shù)組的第i個位置上的數(shù)據(jù)移到i+1的位置上。 (3) 把需要插入的數(shù)據(jù)插入到“數(shù)組”。 代碼如下: 8.9 數(shù)組插值排序 隨機(jī)生成數(shù)字或文本。按從大到小或從小到大排序。 現(xiàn)在我們用數(shù)組排序。如果是數(shù)值可以用數(shù)組的“數(shù)組排序 (, )”。代碼如下: 上面的代碼比較簡短,但是在某些時候,比如多項排序,就不好控制了,多位數(shù)組動態(tài)加入會自動變成單維的。下面是排序的標(biāo)準(zhǔn)寫法,當(dāng)然只是個框架,代碼如下: 上面只是數(shù)值排序,大家可以練習(xí)一下文本、時間、邏輯。 8.10刪除運(yùn)算 在易語言中,一維數(shù)組中數(shù)據(jù)(節(jié)點(diǎn))在邏輯上是順序相連的,并且它們在計算機(jī)中內(nèi)存中也是順序存儲的,我們一般稱順序存儲的線性表為順序表。注意,順序表是從存儲方式上來描述表結(jié)構(gòu)的;線性表則是從邏輯上描述表結(jié)構(gòu)的。表結(jié)構(gòu)從邏輯上可分為線性表和非線性表。線性表和非線性表都可以用兩種方式存儲,即順序存儲(如數(shù)組),和鏈?zhǔn)酱鎯?。表的鏈?zhǔn)酱鎯Ψ绞叫枰羔槨?br>在易語言中順序表是建立在一維數(shù)組基礎(chǔ)上的表結(jié)構(gòu)。本節(jié)講述順序表上的刪除運(yùn)算: 刪除運(yùn)算也是通過移動節(jié)點(diǎn)來完成的。刪除i節(jié)點(diǎn)時,我們只要把i后面的節(jié)點(diǎn)依次向前移動。在一維數(shù)組中把欲刪除的位置后面的數(shù)據(jù)依次前移,把最后位置的數(shù)組成員刪除,便完成了此運(yùn)算。只有刪除最后位置上的數(shù)據(jù)時不需要移動數(shù)據(jù),直接刪除該成員。 |
第十二課.程序調(diào)試2009-12-09 14:51
分享幾乎每一個稍微復(fù)雜一點(diǎn)的程序都必須經(jīng)過反復(fù)的調(diào)試、修改,才能最終完成。很顯然,只有正確找出錯誤的地方才可以將其改正。出錯以后怎樣找出錯誤的地方就變得很重要了,下面就談一些查錯的方法。 7.1調(diào)試工具 1.易語言內(nèi)部偵錯 輸入程序代碼時有明顯的語法錯誤存在,易語言會提示錯誤原因,而且當(dāng)使用Ctrl+Enter鍵編譯當(dāng)前行時,錯誤代碼無法通過編譯。當(dāng)用戶寫完一段代碼后,試運(yùn)行程序,易語言會對所有可能執(zhí)行到的語句進(jìn)行初步編譯,當(dāng)編譯時發(fā)現(xiàn)明顯的格式或語法錯誤時,易語言會將光標(biāo)自動移動到錯誤行,并提示錯誤原因,用戶可以根據(jù)光標(biāo)提示和錯誤原因很快改正錯誤。如圖1所示。 雖然易語言提供的內(nèi)部偵錯功能十分強(qiáng)大,但也只能指出輸入上的格式錯誤,如數(shù)據(jù)類型不匹配、指定的變量或組件未找到等。而對于那些程序員編程時,邏輯上的錯誤,易語言就無能為力了。這就需要其他調(diào)試方法和調(diào)試命令的配合使用,快速而準(zhǔn)確的找到錯誤代碼。 2.跟蹤調(diào)試方法解釋 各調(diào)試項目在易語言狀態(tài)條中的解釋如下: ①在程序現(xiàn)行運(yùn)行位置單步執(zhí)行一行程序,如果此程序行調(diào)用了子程序,則跟蹤進(jìn)入子程序。 ②在程序現(xiàn)行運(yùn)行位置單步執(zhí)行一行程序,如果此程序行調(diào)用了子程序,系統(tǒng)不會跟蹤到該子程序中去。 ③在上級子程序調(diào)用現(xiàn)行子程序的語句后中斷。 在被調(diào)用子程序中設(shè)置斷點(diǎn),斷點(diǎn)行被跟蹤后,跳出當(dāng)前子程序,系統(tǒng)跟蹤至上級程序調(diào)用當(dāng)前子程序語句的下一行代碼。注意:被調(diào)用子程序斷點(diǎn)后的代碼被執(zhí)行。 ④運(yùn)行易程序,在當(dāng)前光標(biāo)處程序行處中斷。 ⑤設(shè)置或清除當(dāng)前程序行處的斷點(diǎn)。 ⑥清除掉程序中的所有斷點(diǎn)。 ⑦跳到現(xiàn)行即將被執(zhí)行語句的位置。 3.跟蹤法 編寫一個比較簡單的程序,看看程序是如何調(diào)試的。例程“調(diào)試程序.e”代碼如下: 該程序是輸出300以內(nèi)同時能被2,3,5整除的整數(shù)。 現(xiàn)在開始調(diào)試。調(diào)試有多種方法,先介紹一種不需要設(shè)置斷點(diǎn)就可以調(diào)試程序的方法。 首先選中要被調(diào)試的程序代碼行。然后選擇“執(zhí)行到光標(biāo)處”子菜單項目。 按“F5”鍵運(yùn)行程序,當(dāng)程序執(zhí)行到被選中代碼時,系統(tǒng)便將程序掛起,并用黃色箭頭指示代碼執(zhí)行位置。 通常用“F8”鍵就可以實(shí)現(xiàn)把程序每一步執(zhí)行的情況都反映出來的功能。此方法就是模擬計算機(jī)一步步執(zhí)行程序的過程。 當(dāng)前程序已經(jīng)被運(yùn)行,不斷按“F8”就可以使程序一步一步執(zhí)行,直到最后一行代碼被執(zhí)行完畢。 為了更直觀的了解程序的運(yùn)行過程,在跟蹤程序的同時打開易語言的“查改變量”面板。選中“局部計次變量” 不斷按“F8”的同時,“局部計次變量”的值也不斷的改變。 下面介紹圖4中標(biāo)題為“寫入”按鈕的使用方法。 此按鈕的作用是改寫被選中變量的值,使被調(diào)試程序直接運(yùn)行符合此變量被寫入值的代碼行處。 首先選中變量值,輸入將被寫入的值,按“寫入”按鈕。然后使程序設(shè)計界面獲得焦點(diǎn),再按“F8”鍵跟蹤程序。 例程“調(diào)試程序1.e”,使用改寫邏輯變量的值可以更直觀的看到程序的運(yùn)行效果。 例程“調(diào)試程序2.e”,按照前面的步驟,在“_啟動窗口_創(chuàng)建完畢”事件子程序和“子程序1”中選中代碼行進(jìn)行跟蹤,比較各個跟蹤方法。 4.?dāng)帱c(diǎn)法 在前面已經(jīng)學(xué)習(xí)了基本的程序調(diào)試方法。但也有一個缺點(diǎn),就是在遇到循環(huán)次數(shù)比較多或者語句比較多的時候,用起來比較費(fèi)時,下面用一種新的也是常用的調(diào)試方法:斷點(diǎn)法。 所謂斷點(diǎn)法,就是在程序執(zhí)行到某一行的時候,調(diào)試器自動“中斷”程序運(yùn)行,并保留這時各變量的狀態(tài),方便檢查、校對。還用“程序調(diào)試2.e”為例,具體操作如下: 選中被調(diào)試程序代碼,按下“F9”鍵,這時發(fā)現(xiàn),該行首部加入紅點(diǎn),這表明該行已經(jīng)被設(shè)置成斷點(diǎn)行,當(dāng)每次運(yùn)行到此行的時候,程序都會自動停下來供編程人員調(diào)試。如下所示: 請記住,計算機(jī)是執(zhí)行到斷點(diǎn)行之前的一行,斷點(diǎn)行并沒有執(zhí)行,所以這時“邏輯變量2 = 真”這一句并沒有執(zhí)行,其值還是為假。 “調(diào)用表”面板顯示當(dāng)前被執(zhí)行代碼所在程序集。 斷點(diǎn)除了有以上用處之外,還有另外一個重要用處:它方便大家判斷某個語句有沒有執(zhí)行或者是不是在正確的時刻執(zhí)行,因?yàn)橛袝r程序由于人為的疏忽,可能在循環(huán)或者遞歸時出現(xiàn)無法預(yù)料的混亂,這時候通過斷點(diǎn)法,就能夠判斷程序是不是依照預(yù)期的順序執(zhí)行。 7.2調(diào)試輸出命令 1.“輸出調(diào)試文本()” 僅在易程序的調(diào)試版本中被執(zhí)行,在發(fā)布版本中將被直接跳過;使用本命令可以在易語言調(diào)試系統(tǒng)的“輸出”面板中輸出指定的文本行以幫助調(diào)試,該文本之前被自動加上一個星號(*),之后被自動加上回車換行符。 如果覺得“改寫變量”面板只能顯示當(dāng)前被調(diào)試程序變量的一個值,無法與前面或后面程序運(yùn)行時變量的值進(jìn)行對比,十分的不方便。就可以用“輸出調(diào)試文本()”命令實(shí)現(xiàn)這個功能。在“__啟動窗口_創(chuàng)建完畢”事件子程序中添加“輸出調(diào)試文本()”命令如下: 注意提供的參數(shù)數(shù)據(jù)類型必須為文本型。 按“F5”鍵運(yùn)行程序,在“輸出”面板中顯示, 如果調(diào)試時使用到多個“輸出調(diào)試文本()”命令,就必須提供被顯示變量值的變量名或變量值的解釋文本。在“子程序”中的最后一個如果真語句中添加“輸出調(diào)試文本()” 可以很清楚的看到,只有“局部計次變量”的值為“30”時程序才會執(zhí)行到最后一個如果真語句中,并使“邏輯變量3”的值為真。 2.“暫停()” 僅在易程序的調(diào)試版本中被執(zhí)行,在發(fā)布版本中將被直接跳過;可以在子程序中的任何地方放置此命令,使用此命令,就相當(dāng)于在程序代碼中設(shè)置斷點(diǎn)。 3.“檢查()” 僅在易程序的調(diào)試版本中被執(zhí)行,在發(fā)布版本中將被直接跳過;執(zhí)行本命令時,如果給定參數(shù)的條件值被計算后結(jié)果為假,易程序的執(zhí)行將被暫停且警示??梢栽谧映绦蛑械娜魏蔚胤椒胖么嗣?,使用此命令,就相當(dāng)于在程序代碼中設(shè)置條件斷點(diǎn)。 為方便了解“檢查()”命令的作用,用“輸出調(diào)試文本()”命令配合使用。首先將前面添加的兩個“輸出調(diào)試文本()”命令置為草稿。新添加調(diào)試命令代碼如下: 按“F5”鍵運(yùn)行程序,當(dāng)“檢查()”命令中的條件不成立時,程序被暫停。提示如下圖所示。 分析提示文本, 當(dāng)“局部計次變量”為“1”時,程序無法進(jìn)入“子程序1”中的第一個如果真條件語句中執(zhí)行,所以“邏輯變量1”的值保持不變,為假,“檢查()”命令沒有被執(zhí)行。而“輸出調(diào)試文本()”命令正常輸出文本(“局部計次變量”的值和“---------”)。當(dāng)“局部計次變量”為“2”時,符合“子程序1”中第一個如果真條件語句,其中的代碼被執(zhí)行,“邏輯變量1”的值為真,“檢查()”命令的條件不成立,“檢查()”命令被執(zhí)行并輸出提示。 4.“是否為調(diào)試版()” 如果當(dāng)前 EXE 易程序執(zhí)行文件為易語言編輯環(huán)境調(diào)試運(yùn)行程序時編譯出來的調(diào)試版本,返回真。否則表明為發(fā)布版本,返回假。 5.“信息框()” 在對話框中顯示信息,等待用戶單擊按鈕,并返回一個整數(shù)告訴用戶單擊哪一個按鈕。 “信息框()”是軟件中必不可少的組成部分,是用戶與軟件之間的一種通信通道。 但在程序的調(diào)試過程中也被經(jīng)常使用到,而且可以達(dá)到多種調(diào)試方法的功能。如:斷點(diǎn)、暫停()、輸出調(diào)試文本()等方法和命令。將程序中的調(diào)試命令全部置為草稿,添加“信息框()”, 按“F5”運(yùn)行程序,信息框提示“局部計次變量”為“30”,信息框被第一次執(zhí)行,程序被暫停。 使用“信息框()”顯示數(shù)據(jù)不需要考慮是文本、數(shù)值、邏輯值或日期時間。如果同時顯示不同數(shù)據(jù)類型變量和數(shù)據(jù)值,必須先轉(zhuǎn)換到文本型。 注意:“信息框()”不適合在“時鐘周期”事件中和循環(huán)次數(shù)比較多的代碼中使用。 7.2調(diào)試總結(jié) 程序中出現(xiàn)的錯誤通常分為“語法錯誤”和“邏輯錯誤”。 所謂“語法錯誤”是指程序代碼不符合易語言語法。這種錯誤最容易發(fā)現(xiàn)和修改:首先在代碼輸入的時候,系統(tǒng)就會檢查并發(fā)現(xiàn)一部分語法錯誤;其次在程序運(yùn)行的時候,系統(tǒng)執(zhí)行到有語法錯誤的代碼行,也會發(fā)現(xiàn)并指出錯誤原因。由此可見,系統(tǒng)會幫助找出所有的語法錯誤,只要按照其提示信息進(jìn)行相應(yīng)的修改即可。 所謂“邏輯錯誤”是指程序流程上、處理上的錯誤。含有“邏輯錯誤”的程序能夠正常執(zhí)行,只是執(zhí)行結(jié)果不正確。這類錯誤系統(tǒng)是不可能發(fā)現(xiàn)的,只有靠編程者自己去尋找。 實(shí)際應(yīng)用中,通常是將“斷點(diǎn)”“單步跟蹤”“查改變量”(以及調(diào)試輸出)等調(diào)試方式結(jié)合起來使用。 一般的程序調(diào)試步驟是這樣的: 1.運(yùn)行程序,執(zhí)行所有的程序功能,從而找出并修改所有“語法錯誤”; 2.通過分析判斷,找到可能有“邏輯錯誤”的代碼段; 3.在“有邏輯錯誤的代碼段”前面設(shè)置“斷點(diǎn)”; 4.運(yùn)行程序,待程序在“斷點(diǎn)”處中斷后,使用“單步跟蹤[Shift+F8]”“單步跟蹤進(jìn)入[F8]”“跟蹤返回[Ctrl+Shift+F8]”“執(zhí)行到光標(biāo)處[Ctrl+F8]”等調(diào)試命令跟蹤程序的運(yùn)行。跟蹤過程中,隨時觀察各變量值的變化(通過狀態(tài)夾中的“查改變量”,可看到所有全局和局部變量),必要時使用調(diào)試輸出命令將變量值輸出。通過跟蹤,一般能發(fā)現(xiàn)程序出錯的原因。 5.終止程序運(yùn)行,修改代碼,繼續(xù)調(diào)試。 |
第十一課.數(shù)組2009-12-09 14:50
分享到現(xiàn)在為止,我們在前幾章中所用到的各種變量,都有一個特點(diǎn),就是在程序運(yùn)行的任何時刻,每個變量名都能代表一個數(shù)據(jù)。這種變量名,我們叫做簡單變量。 用簡單變量固然可以編寫出各種各樣的程序。但是如果在程序中有成組地出現(xiàn)的數(shù)據(jù)時,程序的編寫與處理,將是十分麻煩的。 假定我們要處理200個學(xué)生的考試成績,每人考6門課,共有1200個分?jǐn)?shù)。這1200個分?jǐn)?shù)如果要反復(fù)使用,最好的辦法是把這1200個數(shù)一次讀入1200個變量,否則每次使用得從頭讀一遍。1200個變量在內(nèi)存中,隨時可以使用,這當(dāng)然很方便,然而這是不可能的。而對于一個數(shù)組中的多個不同元素,只需取多個不同的下標(biāo)即可。而且下標(biāo)又可以通過程序的運(yùn)行予以改變,這就給編寫程序提供了較大的方便。 數(shù)組變量可以存放一組數(shù)據(jù),數(shù)組的成員數(shù)可以自行定義,并且在程序運(yùn)行后還可以動態(tài)改變,賦值方法也多種多樣。即可以動態(tài)的管理數(shù)組變量。所以數(shù)組變量是使用非常靈活、應(yīng)用非常廣泛的一種變量。 數(shù)組變量又分為“單維數(shù)組變量”和“多維數(shù)組變量”。 單維數(shù)組變量,成員的表示形式為: 數(shù)組變量名[數(shù)組成員下標(biāo)] 如:變量[2],表示該數(shù)組中的第2個成員。注意,易語言中的數(shù)組下標(biāo)是從1開始的,根本不存在“變量[0]”這個數(shù)組成員。 多維數(shù)組變量,可以看作是一個特殊的單維數(shù)組,它的成員也可以看作是多個單維數(shù)組。多維數(shù)組成員的表示形式為: 多維數(shù)組變量名[數(shù)組成員下標(biāo)][數(shù)組成員下標(biāo)] 如:變量[1][2],意思是一個二維變量中的第二個成員。 6.1數(shù)組變量的定義及賦值 1.?dāng)?shù)組變量的定義方法 在欲定義變量的數(shù)組屬性上輸入要定義的成員數(shù)。例如,要將“變量”定義為有3個成員的數(shù)組變量,就在“變量”的數(shù)組屬性上輸入3,定義后的“變量”就有變量[1]、變量[2]和變量[3]這三個數(shù)組成員。如下圖所示。 定義數(shù)組變量 2.多維數(shù)組變量的定義方法 在欲定義的“變量”的數(shù)組屬性上輸入:成員數(shù),成員數(shù),…。例如,要定義一個2維數(shù)組變量,每個維有3個成員,就在“變量”的數(shù)組屬性上輸入“3,3”如下圖所示。 二維數(shù)組定義 這個2維數(shù)組,可以看作是3個擁有3個成員的單維數(shù)組組成,這個數(shù)組中各個成員,按成員順序排列,表示方法如下: 變量[1][1]、變量[1][2]、變量[1][3]、變量[2][1]、變量[2][2]、變量[2][3]、變量[3][1]、變量[3][2]、變量[3][3] 在易語言中,多維數(shù)組成員也可以以單維數(shù)組的表示方法來訪問,上邊的多維數(shù)組有9個成員,按成員順序排列也可以表示為: 變量[1]、變量[2]、變量[3]、變量[4]、變量[5]、變量[6]、變量[7]、變量[8]、變量[9] 數(shù)組變量也可以直接稱之為數(shù)組,本書中以后如沒有特別聲明,所提到的數(shù)組都是指的數(shù)組變量。 3.?dāng)?shù)組變量的賦值 (1)直接賦值 數(shù)組變量的賦值,就是給數(shù)組中的成員賦值,每個成員都有獨(dú)立的存儲空間。數(shù)組中的每個成員都可以看作是單獨(dú)的變量,可以使用給變量賦值的方法來給數(shù)組的成員賦值,例如,給一個有2個成員的整數(shù)型數(shù)組賦值,讓每個成員都為100,程序代碼為: 變量[1]=100 變量[2]=100 例如,給一個2維的整數(shù)數(shù)組賦值,每個維有2個成員,每個成員都賦值100: 變量[1][1]=100 變量[1][2]=100 變量[2][1]=100 變量[2][2]=100 (2)連續(xù)賦值 給數(shù)組變量賦值還有一個十分簡便的方法,就是使用一對大括號將要賦予的值括起來,每個值都用“,”號隔開,被隔開的值賦予數(shù)組中的對應(yīng)位置的成員,例如上面講的給有2個成員的數(shù)組賦值,每個成員都賦值100,就可以使用下面的方法: 變量={100,100} 使用這種方法給數(shù)組成員很多的數(shù)組賦值,尤為方便,如給一個有10個成員的整數(shù)數(shù)組,就可以輸入: 變量={10,20,30,40,50,60,70,80,90,100} (3)命令賦值 可以使用“連續(xù)賦值()”命令給數(shù)組賦值,“連續(xù)賦值()”命令可將指定的常數(shù)、常數(shù)集、常量、資源、對象或者變量賦予到一系列變量或變量數(shù)組中去。參數(shù)<1>的名稱為“用作賦予的值或資源”,參數(shù)<2>的名稱為“被賦值的變量或變量數(shù)組”,命令參數(shù)表中最后一個參數(shù)可以被重復(fù)添加。具體也可以參考即時幫助,例程如: 局部變量:變量1 數(shù)據(jù)類型:整數(shù)型 數(shù)組:3 連續(xù)賦值 (100, 變量1 [1], 變量1 [2], 變量1 [3]) (4)直接用命令的返回值給數(shù)組賦值 有些命令的返回值就是一個數(shù)組,所以可以直接使用該返回值給數(shù)組賦值。賦值的時候首先要注意,根據(jù)命令返回數(shù)組的數(shù)據(jù)類型來給數(shù)組定義數(shù)據(jù)類型;還要注意數(shù)組的成員數(shù)是可變的,并且命令返回的數(shù)組成員數(shù)也不固定,所以可以定義接收返回值的數(shù)組成員數(shù)為0,當(dāng)該數(shù)組接收了命令的返回值后,會自動定義成員數(shù)。例如:“分割文本()”命令的返回值,就是一個文本型的數(shù)組,在程序中可以表示為: 代碼運(yùn)行后,如果運(yùn)行目錄是“d:\Program Files\e”,那分割后返回后子文本就是“d:”、“Program Files”、“e”,即文本數(shù)組就有了3個成員,每個成員的值就是返回來的子文本。 (5)命令參數(shù)是數(shù)組 有些命令或組件方法的參數(shù)是數(shù)組,此類命令或方法就需要根據(jù)幫助信息,來了解參數(shù)中的數(shù)組所代表的意義。例如畫板的畫多邊型方法,第一個參數(shù)中的添入的數(shù)組順序記錄多邊形各頂點(diǎn)的橫向及縱向坐標(biāo)值,坐標(biāo)是成對出現(xiàn),所以,數(shù)組中每2個成員就代表了要畫出多邊型的1個點(diǎn),要讓畫板畫出一個三角型就可以用以下代碼: 6.2動態(tài)管理數(shù)組變量 數(shù)組變量的最大特點(diǎn)就是它的成員數(shù)也是可變的,這樣就有非常大的靈活性,在程序運(yùn)行中,可以動態(tài)的為數(shù)組添加成員、刪除成員等等,這樣就達(dá)到了對數(shù)組的動態(tài)管理。 動態(tài)管理數(shù)組主要通過命令來實(shí)現(xiàn),易語言提供了10個專門針對數(shù)組操作的命令,如圖所示。 命令解釋參見下表所示。 數(shù)組操作命令 命令名 命令解釋 重定義數(shù)組 可以重新定義指定數(shù)組的維數(shù)及各維的上限值。 取數(shù)組成員數(shù) 取指定數(shù)組變量的全部成員數(shù)目,如果該變量不為數(shù)組,返回-1, 取數(shù)組下標(biāo) 返回指定數(shù)組維可用的最大下標(biāo)(最小下標(biāo)固定為1) 復(fù)制數(shù)組 將數(shù)組數(shù)據(jù)復(fù)制到指定的數(shù)組變量 加入成員 將數(shù)據(jù)加入到指定數(shù)組變量的尾部,自動增加其成員數(shù)目 插入成員 將數(shù)據(jù)插入到指定數(shù)組變量的指定位置,自動增加其成員數(shù)目 刪除成員 刪除指定數(shù)組變量中的成員,自動減少其成員數(shù)目 清除數(shù)組 刪除指定數(shù)組變量中的所有成員,釋放這些成員所占用的存儲空間 數(shù)組排序 對指定數(shù)值數(shù)組變量內(nèi)的所有數(shù)組成員進(jìn)行快速排序 數(shù)組清零 將指定數(shù)值數(shù)組變量內(nèi)的所有成員值全部設(shè)置為零 下面就結(jié)合實(shí)例來了解如何動態(tài)的管理數(shù)組。首先新建一個易程序,在窗口中添加2個編輯框組件和1個列表框組件,再添加5個按鈕組件。 添加列表框組件是因?yàn)閷?shù)組的操作是不可見的,是在程序內(nèi)部進(jìn)行操作,這里將對數(shù)組的操作過程用列表框顯示出來;2個編輯框一個用來填寫向數(shù)組中添加的內(nèi)容,另一個用來填寫“插入成員”和“刪除成員”的成員位置,2個編輯框的“輸入方式”屬性都設(shè)置成“整數(shù)文本輸入”。5個按鈕組件的標(biāo)題用5個常用的組操作命令名來命名。 首先雙擊“加入成員”按鈕,切換到程序編輯界面,然后新建一個程序集變量,變量名為“被操作數(shù)組”,數(shù)據(jù)類型為“整數(shù)型”,然后定義為0個成員的數(shù)組變量。如下圖所示。 定義一個數(shù)組 1.“計次循環(huán)首()”和“取數(shù)組成員數(shù)()”命令 “計次循環(huán)首()”命令經(jīng)常和“取數(shù)組成員數(shù)()”命令一起使用,用一個計次循環(huán),就可以輕松的調(diào)用數(shù)組中的每一個成員。方法如下:首先用“取數(shù)組成員數(shù)()”命令將數(shù)組中的成員數(shù)取出來,然后用此成員數(shù)限定“計次循環(huán)首()”命令循環(huán)次數(shù),每次循環(huán),“循環(huán)次數(shù)變量”就會遞增1,所以就可以用: 數(shù)組名[循環(huán)次數(shù)變量] 用這行代碼就可以依次訪問數(shù)組中的每個成員。在本例程中首先要考慮:要用一個列表框顯示出數(shù)組中的每個成員,所以要將數(shù)組中的每個成員依次取出,并添加到列表框中,并且每次對數(shù)組操作后都要重新顯示數(shù)組中的成員。新建一個子程序,這個子程序?qū)iT用來讓列表框刷新顯示數(shù)組內(nèi)容的,這樣可以節(jié)省很多代碼。 在程序設(shè)計界面用Ctrl+N來新建一個子程序,將子程序名改為“刷新列表框”,然后在子程序中輸入代碼: 程序中的計次循環(huán),第一次循環(huán),“循環(huán)次數(shù)變量”是1,就將“被操作數(shù)組[1]”加入了列表框;第二次循環(huán),“循環(huán)次數(shù)變量”是2,就將“被操作數(shù)組[2]”加入了列表框,依此類推,就將數(shù)組中所有的成員加入了列表框。由于被操作數(shù)組成員是整數(shù)型,所以要轉(zhuǎn)換成文本型后再加入列表框。 2.“加入成員()”命令 “加入成員()”命令很簡單,第一個參數(shù)填寫欲加入成員的數(shù)組名,第二個參數(shù)填寫欲加入的成員值。例程中是將編輯框1中的內(nèi)容加入數(shù)組,所以用鼠標(biāo)雙擊“加入成員”按鈕后產(chǎn)生的“_按鈕1_被單擊”子程序中輸入代碼: 刷新列表框()是用來調(diào)用剛才新建的“刷新列表框”子程序,子程序被調(diào)用后就會運(yùn)行子程序中的代碼。以后每次對數(shù)組操作后都將調(diào)用這個子程序,用來重新顯示被操作后的數(shù)組成員情況。 3.“插入成員()”命令 “插入成員()”命令,其實(shí)就是可以在數(shù)組中的指定位置加入成員。命令的第二個參數(shù)填寫欲插入成員的位置。例程中編輯框2用來填寫插入成員的位置,雙擊“插入成員”按鈕,在產(chǎn)生的子程序中輸入代碼: 4.“刪除成員()”命令 “刪除成員()”命令可以將數(shù)組中指定位置的成員刪除,命令的第二個參數(shù),用來填寫欲刪除的成員位置。例程中用編輯框2來填寫欲刪除的成員位置,雙擊“刪除成員”按鈕,在產(chǎn)生的子程序中輸入代碼: 5.“清除數(shù)組()”和“數(shù)組清零()”命令 “清除數(shù)組()”命令用來刪除指定數(shù)組中的所有成員;而“數(shù)組清零()”命令是將數(shù)值型數(shù)組的所有成員都設(shè)置為0。這里要注意,“數(shù)組清零()”命令只能對數(shù)值型數(shù)組進(jìn)行操作。例程中只使用到了“清除數(shù)組()”命令,雙擊“清除數(shù)組”按鈕,在產(chǎn)生的子程序中輸入代碼: 6.“數(shù)組排序()”命令 數(shù)組排序命令也只能對數(shù)值型數(shù)組進(jìn)行操作,可以將一個數(shù)值型數(shù)組進(jìn)行從大到小或從小到大的重新排列。雙擊例程中的“數(shù)組排序”按鈕,在產(chǎn)生的子程序中輸入代碼: 還有“重定義數(shù)組()”、“復(fù)制數(shù)組()”、“取數(shù)組下標(biāo)()”命令,都是對數(shù)組操作非常方便的命令,這里就不詳細(xì)介紹了。 6.3文本與數(shù)組操作實(shí)例 6.3.1 查找和替換文本 無論程序的大小,幾乎都有查找和替換文本的工具。例如在Microsoft Office Word中,使用[Ctrl + F]組合鍵,可以彈出此功能的對話界面。下圖所示: 其中“替換”子項中的功能更具代表性,所以下面編寫的示例主要以此為范例,加以簡單的解釋。 首先,介紹下圖中常用功能的使用方法。查找內(nèi)容:在“查找內(nèi)容”框內(nèi)輸入要查找的文字,單擊“查找下一處”。替換文字:可自動替換文字,例如,將“你”替換為“您”。,字同意osoft Office Word 新建“Windows窗口程序”,程序界面設(shè)計如下圖所示: 文本編輯框主要屬性設(shè)置如下: 是否允許多行 真 滾動條 縱向滾動條 輸入方式 只讀方式 編寫代碼如下所示: 第一步,添加程序集變量,如上。 第二步,打開對話框,選擇文本文件,并將文件的讀寫位置移動到文件的首部。如上。 第三步,使用“子文本替換()”命令,將“文本編輯框”中的指定文本用另一個文本替換掉,并重新把替換后的文本放到“文本編輯框”中。 第四步,查找指定的文本,并選中。 第五步,使用“文本替換()”命令,替換查找到的當(dāng)前一個文本,然后把替換后的文本重新方到“文本編輯框”中,最后調(diào)用“_查找按鈕_被單擊()”子程序查找下一個匹配的文本,并選中。 如果編輯順利,可按“F5鍵”運(yùn)行。 6.3.2創(chuàng)建CSV文本文件 CSV是逗號分隔值文件的縮寫,這是一種使用逗號來分隔各個元素的文本文件。例如,假設(shè)你具有一個由用戶的單位、姓名和職位組成的CSV文件,那么這個文件的內(nèi)容可能類似如下: 三川實(shí)業(yè)有限公司,劉小姐,銷售代表 國皓,黃雅玲,市場經(jīng)理 世邦,黎先生,采購員 先來看一段代碼,然后介紹一個較為實(shí)用的示例。以下示例可將文本“文,”、“武,”“雙,”、“全”寫入名為“文本文件.csv”的文本文件中,代碼如下: 不管在什么時候使用“打開文件()”你都需要使用適當(dāng)?shù)牡絽?shù),這取決于你想要讀取、寫入或是追加一個文件。使用“打開文件()”命令來創(chuàng)建一個名為“文本文件.csv”的新文本文件。(注意:如果沒有指定路徑,這個文本文件會創(chuàng)建在源代碼所在的相同的文件夾中。也可以指定一個完整路徑(例如D:\Documents and Settings\Administrator\桌面\文本文件.csv)。 從文本“文,”開始寫入(注意:創(chuàng)建csv文件時我們必須手動寫入逗號),“寫出文本()”命令會寫入指定的第一個文本數(shù)據(jù),并將當(dāng)前讀寫位置置于當(dāng)前位置,因此,下一次此命令添加“武,”文本時,恰好位于“文,”文本的右側(cè),后面的添加依此類推。最后得到的文本文件的內(nèi)容如下: 文,武,雙,全 注意逗號和下一個項目之間沒有任何空格。一個項目結(jié)束時,另一個項目馬上開始。來看另一個示例。 上面的代碼雖然可以寫出csv文件,但在實(shí)際操作中是不現(xiàn)實(shí)的,這樣就需要重新編寫代碼。首先創(chuàng)建“Windows窗口程序”,在“啟動窗口”上添加三個“編輯框”組件和一個“按鈕”組件;在“_按鈕_被單擊”事件子程序中添加如下代碼: 使用“寫出文本()”命令將檢索返回的數(shù)據(jù)寫到指定的文件中。 使用“檢索”檢索信息,其子程序代碼如下: 如你所見,在子程序中的代碼與前一個程序有了很大的差別,其中不再使用類似“文,”、“武,”、“雙,”、“全”的固定編碼值,而是使用類似于“單位”的參數(shù)和變量。同樣可以寫出相同格式的文本文件。 但要注意的是,當(dāng)使用包含逗號的數(shù)據(jù)可到會遇到,如一個用戶的職位為“銷售代表”,而另一用戶的職位為“市場助理,銷售經(jīng)理”這樣,文本文件應(yīng)該類似如下: 萬海,林小姐,銷售代表 嘉元實(shí)業(yè),劉小姐,市場助理,銷售經(jīng)理 其第一行包含三段信息:萬海/林小姐/銷售代表;由于職位中包含逗號,第二行中卻有四個段信息:嘉元實(shí)業(yè)/劉小姐/市場助理/銷售經(jīng)理。 處理這種嵌入逗號的方法是使用一個雙引號包含每段信息;當(dāng)文件被其它程序(Microsoft Office Access、Microsoft Office Excel以及Windows系統(tǒng)中的通訊簿)使用時,嵌入的逗號就會被忽略。文件類似如下所示, "萬海","林小姐","銷售代表" "嘉元實(shí)業(yè)","劉小姐","市場助理,銷售經(jīng)理" 為解決雙引號的問題,必須在“檢索”子程序中將雙引號加進(jìn)去,代碼修改如下: 6.3.3讀取CSV文本文件 前節(jié)創(chuàng)建的程序,可以將輸入的客戶信息直接轉(zhuǎn)換到cov文件格式,并能使共其它默認(rèn)程序正確的打開,雖然很方便,但畢竟不是自己編寫的程序。那為了能在易語言中方便的讀取和使用cov文件,下面就提供一此代碼來實(shí)現(xiàn)這個功能。的戶Vs 創(chuàng)建“Windows窗口程序”,界面如下圖所示: 示例程序界面 “超級列表框”組件的主要屬性設(shè)置如下: 類型 報表列表框 整行選擇 真 雙擊“按鈕”組件,在其事件子程序中添加代碼如下: 以上是在編寫程序中所聲明的變量。 上面代碼的功能是,打開上節(jié)中創(chuàng)建的cov文件。 下面代碼實(shí)現(xiàn)讀取文本文件中的各行文本,并分析和去除各段數(shù)據(jù)的多余文本。其中還是使用了一些硬性代碼,所以對其它方面的支持要差強(qiáng)一點(diǎn),但這是為了更容易的理解這段代碼。這里就不多做解釋了。 |
搭積木時把一個個不同形狀,不同大小的木塊作不同的組合,可以搭出各種各樣的模型來。把一個個具有特定功能的程序段作為若干個獨(dú)立塊,再把它們作不同的組合,也可以構(gòu)成一個完整的程序,這種方法稱作模塊化結(jié)構(gòu)程序設(shè)計方法。 當(dāng)一個具有特定功能的程序段在一個程序中多次被使用到時,如果在每次使用它的地方都寫一遍,不僅寫起來麻煩,輸入機(jī)器時也費(fèi)時間,還容易增加出錯機(jī)會。而且這種程序較長,占用內(nèi)存空間大,讀起來也討厭。可以設(shè)想,如果能只把它們寫入一次,需要使用它們時就調(diào)用它們一次,那不就簡單了嗎? 其實(shí)子程序就是用來對一系列命令進(jìn)行封裝,實(shí)現(xiàn)模塊化、重用及抽象,從而有利于程序的結(jié)構(gòu)化開發(fā),使程序結(jié)構(gòu)更清晰。合理劃分代碼結(jié)構(gòu)是軟件成功的基本保障。 5.1子程序的分類 易語言中的子程序可以分為兩大類:“事件子程序”和“用戶自定義子程序”。 對應(yīng)組件所發(fā)生事件的子程序,稱作組件的“事件子程序”。例如:按鈕有被單擊、被雙擊、左鍵被按下等事件,選中按鈕后,在屬性面板中的事件列表中選擇這些事件,就可以生成對應(yīng)的事件子程序,大家可以在這些事件子程序中寫入具體執(zhí)行的代碼。運(yùn)行時,一 旦這些事件產(chǎn)生,就會自動執(zhí)行相應(yīng)的子程序。事件子程序的名稱、返回值類型和參數(shù)個數(shù)都是系統(tǒng)定義的,不允許用戶任意修改。 “用戶自定義子程序”是由用戶創(chuàng)建,其參數(shù)個數(shù)和返回值都由用戶自行定義的子程序。用戶可以根據(jù)需要在程序設(shè)計時對其任意修改。 使用子程序的好處很多,例如有段代碼在程序中多處被重復(fù)調(diào)用,此時就可以將其編寫到一個子程序中,不僅減少了代碼輸入的重復(fù)勞動,而且需要修改這段代碼時,只要修改一個地方即可,而不用在程序中逐個修改,即實(shí)現(xiàn)重用;再例如要實(shí)現(xiàn)一個相對復(fù)雜的功能,如果全部代碼寫在一起,發(fā)現(xiàn)錯誤就無法確認(rèn)問題來源,此時可將問題分解為多個簡單問題,使用子程序逐個實(shí)現(xiàn),這樣有利于提高代碼的正確性和清晰度。 5.2用戶自定義子程序的創(chuàng)建 子程序是存在于程序集中的,由程序集分組管理。若一個新建的易程序還沒有進(jìn)行任何操作是沒有程序集的,這時可以使用菜單:“插入”→“程序集”來新建一個程序集放置自己所寫的用戶自定義子程序;或通過在窗體空白處雙擊鼠標(biāo),會自動創(chuàng)建該窗口對應(yīng)的窗口程序集,并自動生成“_啟動窗口_創(chuàng)建完畢”子程序(創(chuàng)建完畢事件子程序可包含本窗口創(chuàng)建時被執(zhí)行的程序代碼);或雙擊按鈕等組件,也會創(chuàng)建該窗口對應(yīng)的窗口程序集及組件對應(yīng)缺省事件子程序。此時就可以在當(dāng)前窗口程序集中添加新的子程序了。如下圖所示。 創(chuàng)建窗口程序集 用戶自定義子程序可以放在窗口程序集中,或自定義的程序集中,當(dāng)然,建議您將當(dāng)前窗口用到的用戶自定義子程序放在當(dāng)前窗口程序集中,這樣就可以非常方便地引用程序集變量和窗口中的組件,而且查找起來也較為方便。 2.若程序集已建立,可通過程序面板切換到程序集中操作,或通過窗口菜單切換。 定義一個新的子程序可以通過在程序編輯界面按下“Ctrl+N”鍵;或在程序編輯界面點(diǎn)擊鼠標(biāo)右鍵,在彈出菜單中選擇第一項“新子程序”;或者選擇易語言菜單“插入”→“新子程序”來新建子程序。 創(chuàng)建后的子程序可以根據(jù)需要修改其名稱,建議在定義子程序名稱時,盡量選擇能體現(xiàn)其功能的名稱,如“求和”、“統(tǒng)計字符”等。 5.3 子程序的調(diào)用 子程序的調(diào)用方法和命令的調(diào)用方法相同,輸入子程序的名稱就可以調(diào)用該子程序。如果子程序要求提供參數(shù),在括號中要按照子程序參數(shù)定義的數(shù)據(jù)類型和參數(shù)個數(shù)順序填寫參數(shù);如果需要用變量保存子程序返回值,必須使用和子程序返回值相同的數(shù)據(jù)類型變量。 5.4返回值和參數(shù)的定義 使用“返回()”命令,可以將子程序處理后的結(jié)果返回給調(diào)用它的程序使用。 為子程序定義返回值,需要在子程序的“返回值類型”單元格中定義其返回值的數(shù)據(jù)類型,同時,在子程序任意一個結(jié)束分支中,都必須使用“返回()”命令將欲返回的值回傳。 為子程序增加參數(shù)定義,首先在子程序名稱上按回車鍵增加一個空白參數(shù)定義,修改該參數(shù)的名稱和數(shù)據(jù)類型即可。參數(shù)的“類型”如果為空,系統(tǒng)默認(rèn)為整數(shù)型參數(shù)。如果某項參數(shù)的“可空”類型未被設(shè)置,在調(diào)用該子程序時就必須為此參數(shù)提供初始值。 子程序的參數(shù)在當(dāng)前子程序內(nèi)可以當(dāng)作變量引用。例如: 上述子程序定義中,子程序名為“相加運(yùn)算”,返回值類型為“整數(shù)型”,子程序有2個整數(shù)型參數(shù),分別為“加數(shù)1”和“加數(shù)2”。 該子程序可以對參數(shù)做相加運(yùn)算,并將運(yùn)算結(jié)果回傳。調(diào)用該子程序的方法如下: 5.5 子程序嵌套 與循環(huán)嵌套類似,子程序中再調(diào)用另一個子程序,叫子程序嵌套。而調(diào)用子程序本身,則被稱作遞歸調(diào)用。 5.6子程序指針 易語言中部分命令必須以子程序在內(nèi)存中的起始地址作為參數(shù),如“啟動線程()”命令;使用某些外部API函數(shù)時,也同樣需要知道調(diào)用的子程序在內(nèi)存中的起始地址。在易語言中,以子程序指針型變量記錄子程序在內(nèi)存中的起始地址。賦值方法為“&”+子程序名。如: 變量1=&子程序1 啟動線程 (變量1, ) 賦值之后,“變量1”(類型為“子程序指針型”)存儲的就是“子程序1”的可執(zhí)行代碼首地址。 5.7 子程序參數(shù)的“參考”屬性 子程序參數(shù)的“參考”屬性用于設(shè)置系統(tǒng)為當(dāng)前子程序參數(shù)傳遞數(shù)據(jù)時是否為傳遞指向數(shù)據(jù)的指針。如果所傳遞過來的參數(shù)數(shù)據(jù)為數(shù)組、用戶定義數(shù)據(jù)類型、庫定義數(shù)據(jù)類型、文本型、字節(jié)集型數(shù)據(jù),則無論此屬性是否為“真”(選中),都將傳遞指針。如果所傳遞過來數(shù)據(jù)的類型與相應(yīng)位置處參數(shù)的數(shù)據(jù)類型不一致但可以相互轉(zhuǎn)換。例如將“整數(shù)型”數(shù)據(jù)傳遞到“小數(shù)型”的參數(shù)中,則在數(shù)據(jù)被實(shí)際傳遞前,系統(tǒng)將首先自動將“整數(shù)型”數(shù)據(jù)轉(zhuǎn)換為“小數(shù)型”數(shù)據(jù),然后再進(jìn)行傳遞。因此在這種情況下,即使本屬性為“真”,系統(tǒng)也無 法傳遞指向原數(shù)據(jù)的指針,只能傳遞數(shù)據(jù)本身。如果系統(tǒng)將數(shù)據(jù)指針成功地傳遞過來,那么在子程序中對此參數(shù)內(nèi)容的更改將會相應(yīng)地反映到調(diào)用子程序時所提供的參數(shù)數(shù)據(jù)上。 給子程序參數(shù)定義“參考”屬性,只要將屬性相應(yīng)位置打上“√”即可。 下面通過一個例程來觀察“參考”屬性的作用。 新建一個“Windows窗口程序”,然后在“_啟動窗口”中添加一個畫板組件和一個按鈕組件。 雙擊按鈕組件,在代碼編輯界面新建一個子程序,定義子程序名為“測試”,為該子程序定義2個參數(shù),均為整數(shù)型;參數(shù)名分別設(shè)為“參考參數(shù)”和“非參考參數(shù)”,將“參考參數(shù)”的“參考”屬性上打上“√”: 在“_按鈕1_被單擊”子程序中輸入代碼: 運(yùn)行程序,觀察運(yùn)行結(jié)果。如下圖所示。 “參考”屬性對變量的影響比較 上述程序中,每次點(diǎn)擊按鈕,就會調(diào)用“測試”子程序?qū)?個參數(shù)進(jìn)行修改。從畫板的顯示結(jié)果可以看出,對應(yīng)“參考參數(shù)”的變量1,因子程序內(nèi)部對相應(yīng)參數(shù)的操作而被修改,而對應(yīng)“非參考參數(shù)”的變量2沒有發(fā)生任何變化。 5.8 子程序參數(shù)的“可空”屬性 易語言自帶的支持庫命令中有一些參數(shù)可以被省略,一般查找?guī)椭鷷r可以看到可省略的部分用中括號括起來了。如“時間到文本()”命令的第二個參數(shù)是可以省略的,它也可有一個默認(rèn)的數(shù)據(jù),此命令幫助如下: 調(diào)用格式: 〈文本型〉 時間到文本 (欲轉(zhuǎn)換到文本的時間,[轉(zhuǎn)換部分]) 將指定時間轉(zhuǎn)換為文本并返回。 參數(shù)<1>的名稱為“欲轉(zhuǎn)換到文本的時間”,類型為“日期時間型(date)”。 參數(shù)<2>的名稱為“轉(zhuǎn)換部分”,類型為“整數(shù)型(int)”,可以被省略。參數(shù)值可以為以下常量: 1、#全部轉(zhuǎn)換; 2、#日期部分; 3、#時間部分。如果省略了本參數(shù),默認(rèn)為“#全部轉(zhuǎn)換”。 用戶自定義子程序也可以實(shí)現(xiàn)這樣的功能。 在設(shè)計子程序的時候,有些參數(shù)可能經(jīng)常用到相同的數(shù)據(jù)。如果每次調(diào)用該子程序,均需手工指定此數(shù)據(jù)作為參數(shù)初始值,那是一件非常繁瑣的事情。在這種情況下,可以將此數(shù)據(jù)作為該參數(shù)的默認(rèn)值,內(nèi)置在子程序中,并將參數(shù)屬性設(shè)為“可空”類型。當(dāng)子程序被調(diào)用時,該參數(shù)沒有指定具體的初始值,就為該參數(shù)賦予默認(rèn)值參與運(yùn)算。如果某項參數(shù)的“可空”類型未被設(shè)置,在調(diào)用該子程序時就必須為此參數(shù)提供數(shù)據(jù)。 定義“可空”屬性的方法和定義“參考”屬性相同,將該屬性打上“√”即可。如果需要檢測當(dāng)前子程序被調(diào)用時,該參數(shù)是否傳遞了數(shù)據(jù),可用“是否為空()”命令進(jìn)行確認(rèn)。 下面編寫一個可以進(jìn)行加法或減法運(yùn)算的子程序,來了解“可空”屬性的實(shí)際應(yīng)用。 本例程將加減運(yùn)算的功能制作成一個子程序,通過第三個參數(shù)確定是作加法計算還是減法計算,如果第三個參數(shù)為空進(jìn)行加法運(yùn)算,不為空則進(jìn)行減法運(yùn)算。 第一步,新建一個易程序,在窗口中添加3個編輯框組件,2個按鈕組件和1個標(biāo)簽組件,將按鈕組件的標(biāo)題分別改為“加法運(yùn)算”和“減法運(yùn)算”,標(biāo)簽組件的標(biāo)題改為“=”。如下圖所示。 加減法運(yùn)算例程界面 第二步,切換到代碼編輯界面,新建一個子程序,將子程序名改為“加減運(yùn)算”。給該子程序定義3個整數(shù)型參數(shù),參數(shù)名分別為“被運(yùn)算數(shù)”、“運(yùn)算數(shù)”和“進(jìn)行的運(yùn)算”,將“進(jìn)行的運(yùn)算”參數(shù)的“可空”屬性被設(shè)置,在子程序中輸入如下程序代碼: 子程序中,“進(jìn)行的運(yùn)算”參數(shù)控制子程序進(jìn)行何種運(yùn)算,該參數(shù)為空進(jìn)行加法運(yùn)算,該參數(shù)不為空則進(jìn)行減法運(yùn)算。 第三步,回到“_啟動窗口”雙擊“減法運(yùn)算”按鈕,然后在“_按鈕1_被單擊”和“_按鈕2_被單擊”子程序中分別輸入代碼: 可以看到,在“_按鈕1_被單擊”子程序中,省略了“加減運(yùn)算”子程序第3個參數(shù)的填寫。 最后,運(yùn)行程序,查看運(yùn)行后的效果。如下圖所示。 加減法運(yùn)算例程的運(yùn)行效果 程序運(yùn)行時點(diǎn)擊左邊按鈕,程序運(yùn)行的“加減運(yùn)算”子程序第三個參數(shù)沒有填參數(shù),因此進(jìn)行的是加法計算。點(diǎn)擊右邊按鈕,程序運(yùn)行的“加減運(yùn)算”子程序第三個參數(shù)設(shè)置參數(shù)為1,因此進(jìn)行的是減法計算。本例程可以參考隨書光盤中的例程“加減運(yùn)算.e”。 5.9 子程序參數(shù)的“數(shù)組”屬性 子程序參數(shù)也可以接收數(shù)組,如系統(tǒng)的“播放MP3 (, )”命令的第二個參數(shù)就可以接收數(shù)組。而用戶自定義子程序也可以實(shí)現(xiàn)這個功能,接收一個數(shù)組,在子程序內(nèi)部進(jìn)行處理。 子程序參數(shù)定義了“數(shù)組”屬性后,就可以給這個參數(shù)中填寫一個數(shù)組變量。 子程序的參數(shù)如果是“數(shù)組”型變量,就自動具有了“參考”屬性。 定義參數(shù)的“數(shù)組”屬性,在該參數(shù)的數(shù)組屬性上打“√”。 下面就編寫一個例程,來了解數(shù)組參數(shù)的作用。 第一步,新建一個易程序,在窗口中添加一個畫板和一個按鈕組件。 第二步,雙擊按鈕組件,在程序設(shè)計界面新增一個子程序,然后將子程序名改為“測試數(shù)組屬性”,給該子程序定義一個參數(shù),將參數(shù)的名稱改為“數(shù)組”,并將參數(shù)的數(shù)組屬性選中: 第三步,在按鈕1被單擊的子程序中輸入代碼: 運(yùn)行后,畫板顯示出調(diào)用子程序前后數(shù)組變量中各成員的值,在調(diào)用子程序后,可以看出數(shù)組參數(shù)自動具有了參考屬性,數(shù)組變量中成員的值發(fā)生了改變。 |
第九課.程序的循環(huán)和跳轉(zhuǎn)2009-12-09 14:48
分享本章將介紹循環(huán)程序設(shè)計的概念。循環(huán)語句是專用于這類程序設(shè)計的,由于它有著固定的格式和執(zhí)行方法,使用起來十分方便。 4.1 循環(huán)類流控制命令 循環(huán)類流程控制命令可以在一定條件下多次執(zhí)行重復(fù)的代碼。例如,將某數(shù)據(jù)庫中前100條記錄的“姓名”字段內(nèi)容讀出并顯示在表格中,使用循環(huán)命令只需要幾行代碼即可實(shí)現(xiàn)。 循環(huán)流程類命令都由循環(huán)首和循環(huán)尾2部分組成,輸入了循環(huán)首命令,循環(huán)尾就自動出現(xiàn)。循環(huán)首表示循環(huán)的開始,循環(huán)尾表示循環(huán)的結(jié)束,循環(huán)首和循環(huán)尾之間的代碼,是循環(huán)執(zhí)行的代碼。 1.“判斷循環(huán)首()”和“循環(huán)判斷首()”命令 “判斷循環(huán)首()”命令首先檢查判斷條件是否成立。如果不成立,直接跳到循環(huán)尾后的代碼繼續(xù)執(zhí)行;如果條件成立,則進(jìn)入循環(huán)。每次循環(huán)結(jié)束后,會再一次檢查“判斷循環(huán)首”中的條件,如果條件不成立了,就退出循環(huán),執(zhí)行后續(xù)代碼。 例如:讓畫板滾動寫出100以內(nèi)的偶數(shù),“Windows窗口程序”代碼如下: “循環(huán)判斷首()”命令是先循環(huán)再判斷,即首先運(yùn)行一次循環(huán)首和循環(huán)尾之間的代碼,再判斷條件是否成立。如果“循環(huán)判斷尾()”中的條件為真,就跳到循環(huán)首處繼續(xù)循環(huán),如果條件不成立,則循環(huán)終止。將上面的代碼中的“判斷循環(huán)首”直接轉(zhuǎn)換為“循環(huán)判斷首”,運(yùn)行結(jié)果是相同的。可以看出,這兩個命令在一定情況下是可以互換的,但由于兩個命令的判斷位置不同,有可能對循環(huán)體內(nèi)的運(yùn)行結(jié)果造成影響,在實(shí)際應(yīng)用中要注意區(qū)分。 下面編寫用列表框組件列出C盤根目錄下所有文件的程序。 首先,新建一個“Windows窗口程序”,然后添加1個列表框組件和1個按鈕組件。 雙擊按鈕組件,在“_按鈕1_被單擊”子程序中輸入代碼: 這里用到了“尋找文件()”命令,當(dāng)使用“尋找文件()”命令在指定目錄連續(xù)檢索相同條件的文件(非子目錄)時,第二次調(diào)用無需填寫參數(shù),該命令會自動繼續(xù)向下尋找。 運(yùn)行程序,程序會將C盤根目錄中所有的文件,包括被隱藏文件和系統(tǒng)文件都顯示在列表框中。 可嘗試將“判斷循環(huán)首()”命令轉(zhuǎn)換成“循環(huán)判斷首()”命令,看運(yùn)行結(jié)果是否有所不同。 2.“計次循環(huán)首()”命令 “計次循環(huán)首()”命令可以指定循環(huán)的次數(shù)。命令的第二個參數(shù)可以填入一個變量,用來記錄已循環(huán)次數(shù),第一次循環(huán)時變量值為1,第二次循環(huán)時變量值為2,依此類推。 下面編寫一個將1到指定范圍內(nèi)的所有整數(shù)相加的程序。 創(chuàng)建“Windows窗口程序”,在“_啟動窗口”中添加一個編輯框組件和一個按鈕組件。 然后將編輯框的“輸入方式”屬性設(shè)置為“整數(shù)文本輸入”,雙擊按鈕,在“_按鈕1_被單擊”的子程序中輸入代碼: 最后,試運(yùn)行程序,在編輯框中輸入一個大于1的整數(shù),然后點(diǎn)擊按鈕,可以求出1到編輯框中的數(shù)值范圍以內(nèi)所有整數(shù)的和。但要注意的是,如果輸入的數(shù)過大,就會導(dǎo)致循環(huán)的時間過長,程序暫時失去響應(yīng);如果輸入的數(shù)值范圍太大,可能會出現(xiàn)數(shù)據(jù)溢出情況。 3.“變量循環(huán)首()”命令 該命令用做一個變量的內(nèi)部循環(huán),有四個參數(shù),規(guī)定了變量的起始值,目標(biāo)值和遞增值,每次循環(huán),變量的起始值都會增加規(guī)定的遞增值,直到達(dá)到目標(biāo)值,退出循環(huán)。第四個參數(shù)記錄當(dāng)前起始值,類似“計次循環(huán)首()”命令的記錄循環(huán)次數(shù)的變量。 例如,可以求出100到200之間的整數(shù)和,用以下代碼: 循環(huán)結(jié)束后的“相加變量”就是求得的結(jié)果。最后將結(jié)果顯示在編輯框中。 4.2循環(huán)的套用 循環(huán)流程命令可以嵌套使用。 在循環(huán)體內(nèi)再次使用循環(huán)語句,構(gòu)成了循環(huán)語句的嵌套使用。大循環(huán)內(nèi)套一個小循環(huán),小循環(huán)內(nèi)還可以再套一個循環(huán)。一個套一個,所套的次數(shù),叫做循環(huán)嵌套深度。 多重循環(huán)在解決應(yīng)用問題中,是非常有用的。 例如,下面就用易語言做一個簡單的程序: 打印乘法表的1×1=1,1×2=2,1×3=3,…,1×9=9 可以使用“計次循環(huán)首()”命令。新建“Windows控制臺程序”。程序代碼如下: 這個程序在輸出格式上作了一些考慮。在每輸出一次運(yùn)算結(jié)果(內(nèi)層循環(huán)中的輸出語句)的后面加上兩個空格,以便使下次輸出能與之保留距離。在外層循環(huán)中的輸出語句是使以后的輸出能另起一行。這樣就可以顯示出格式正確的九九表。 雙重循環(huán)語句的執(zhí)行過程中,程序總是先遇到最外層那個循環(huán)。這時你就可以把內(nèi)層循環(huán)當(dāng)作一個語句來看待。最外層循環(huán)執(zhí)行過程中,是將其內(nèi)部的每條語句順序執(zhí)行的,而遇到內(nèi)層循環(huán)時,我們既把它當(dāng)作一個語句,也一樣要執(zhí)行這個語句。然而它畢竟是一個循環(huán)語句,所謂執(zhí)行它,還是按一般循環(huán)語句的執(zhí)行方法。因此,就事論事剛剛列出的顯示九九表的程序而言,每對“乘數(shù)”循環(huán)一次,就要對“被乘數(shù)”完整的循環(huán)當(dāng)前“乘數(shù)”變量中的次數(shù)。 三重循環(huán)、四重循環(huán)等,執(zhí)行過程依此類推。 4.3跳轉(zhuǎn)類流程控制命令 有了跳轉(zhuǎn)類流程控制命令,可以更加方便的控制循環(huán),“返回()”和“結(jié)束()”命令可以控制子程序和整個程序的結(jié)束。 1.“到循環(huán)尾()”和“跳出循環(huán)()”命令 這兩個跳轉(zhuǎn)類流程控制命令都是用來控制循環(huán)的。當(dāng)一個循環(huán)中運(yùn)行了到“到循環(huán)尾()”命令,將會直接跳到循環(huán)尾的代碼處,當(dāng)一個循環(huán)中運(yùn)行了“跳出循環(huán)()”命令,那么當(dāng)前的循環(huán)就會結(jié)束,然后繼續(xù)運(yùn)行循環(huán)體以后的代碼。例如: (1)讓一個編輯框中只顯示10以內(nèi)的奇數(shù)“1,3,5,7,9”,代碼如下: 當(dāng)循環(huán)變量等于不想顯示出的值,就會執(zhí)行“到循環(huán)尾()”命令,跳過顯示到編輯框的代碼。 (2)如果在循環(huán)過程中,當(dāng)某個條件產(chǎn)生,想提前結(jié)束該循環(huán),可以使用“跳出循環(huán)()”命令,如: 當(dāng)循環(huán)變量等于8,就運(yùn)行“跳出循環(huán)()”命令,循環(huán)即會結(jié)束,所以編輯框會顯示“1234567”。 2.“返回()”命令 “返回()”命令被執(zhí)行后,會退出當(dāng)前子程序。當(dāng)前子程序中“返回()”命令之后的代碼將不再被執(zhí)行,程序?qū)⒆詣犹D(zhuǎn)到調(diào)用本子程序語句的下一條語句處繼續(xù)執(zhí)行。 由于“返回()”命令后面的代碼不被運(yùn)行,所以“返回()”命令也經(jīng)常被用于程序的偵錯,在后面的章節(jié)會有介紹。有返回值的子程序必須使用“返回()”命令來返回執(zhí)行結(jié)果,要注意實(shí)際返回值的數(shù)據(jù)類型要和子程序定義的返回值數(shù)據(jù)類型相匹配。例如返回日期時間型的數(shù)據(jù): 返回([2004年11月15日]) 在循環(huán)中使用“返回()”命令,也可以終止一個循環(huán)的運(yùn)行。例如: 當(dāng)變量1等于10的時候,就運(yùn)行“返回()”命令,當(dāng)前循環(huán)和當(dāng)前子程序都會被終止。 3.“結(jié)束()”命令 “結(jié)束()”命令是結(jié)束當(dāng)前易程序的運(yùn)行。不論當(dāng)前易程序有多少個已載入窗口,都會被自動關(guān)閉??梢杂糜诔绦虻年P(guān)閉按鈕。“結(jié)束()”命令沒有返回值也沒有參數(shù)。若僅想關(guān)閉當(dāng)前的某一個窗口,應(yīng)使用“窗口”的“銷毀()”方法。 例如,在按下“關(guān)閉按鈕”后,就將結(jié)束程序: 注:建議盡量在程序中使用銷毀所有已載入窗口的方法來結(jié)束程序。 |
第八課.程序流控制命令2009-12-09 14:47
分享“如果()”命令 “如果()”命令的參數(shù)為一個邏輯型數(shù)據(jù),非真即假。若條件為真,則程序順序執(zhí)行后續(xù)代碼;若條件為假,則程序跳轉(zhuǎn)到左箭頭所示的代碼行繼續(xù)運(yùn)行。 新建一個“Windows窗口程序”,在“_啟動窗口”中添加1個編輯框組件和一個按鈕組件。然后雙擊按鈕,在“_按鈕1_被單擊”子程序中輸入代碼: 運(yùn)行程序。此時編輯框中沒有任何內(nèi)容,單擊按鈕,可以看到編輯框顯示“Windows窗口程序”;再單擊按鈕,此時編輯框中已有內(nèi)容,則編輯框顯示“”。 其實(shí)上面代碼中的: 如果(編輯框.內(nèi)容=“”) 解釋為,編輯框中的內(nèi)容是空文本(條件語句的值為真),程序可以向下順序執(zhí)行。 可以看出,條件語句的值只能是邏輯型的“真”或“假”。 “如果()”命令參數(shù)中還可以填寫多個條件,用“或”和“且”連接,例如: 用“或”連接多個條件時,只要有一個條件成立時,整個條件參數(shù)就為真。上述代碼中,當(dāng)“比較值”等于100、50或25時,“比較值”被改為0,否則就等于它自身的五倍。 用“且”連接的多個條件,必須所有條件都成立時,整個條件參數(shù)才為真。上述代碼中,只有當(dāng)“比較值”等于100,并且“比較值”等于50時,“比較值”被改為0,否則“比較值”會加1。 3.2“如果真()”命令 “如果真()”命令從流程線上就可以看出與“如果()”命令的不同,“如果真()”命令在條件成立的時候運(yùn)行“如果真()”命令下的代碼,否則“如果真()”命令沒有任何動作。 例如: 當(dāng)“比較值”大于100,則會運(yùn)行“比較值=0”的代碼,否則直接跳到判斷結(jié)束后的代碼繼續(xù)運(yùn)行。 3.3“判斷()”命令 本命令根據(jù)提供的邏輯參數(shù)的值,來決定是否改變程序的執(zhí)行位置,如果提供的邏輯參數(shù)值為“真”,程序?qū)⑻^同組后面的“判斷”語句繼續(xù)順序向下執(zhí)行,否則跳轉(zhuǎn)到下一分支處去繼續(xù)判斷。 “判斷()”命令主要用于條件的分支選擇,如下面2段代碼運(yùn)行效果相同,程序結(jié)構(gòu)也相同,但使用“判斷()”命令,代碼流程結(jié)構(gòu)要清晰許多,而使用“如果()”命令,不僅會使程序嵌套太多,程序代碼難以看清楚,也降低了程序運(yùn)行效率。 |
第七課.運(yùn)算符和表達(dá)式2009-12-09 14:46
分享管理提醒: 本帖被 小豪 執(zhí)行提前操作(2009-11-02) 將數(shù)據(jù)類型相同的常量、變量和函數(shù)用規(guī)定的運(yùn)算符連接起來,就構(gòu)成了表達(dá)式。表達(dá)式本身有一個值。 編寫代碼時,除了大量的使用命令或?qū)M件的屬性或方法進(jìn)行操作,運(yùn)算符的使用也非常重要。程序中所有涉及到的算術(shù)運(yùn)算或關(guān)系比較運(yùn)算等操作,都需要使用運(yùn)算符。 易語言中提供了大量的運(yùn)算符。例如賦值時使用的“=”號,就是賦值運(yùn)算符,比較大小時使用的“>”和“<”號,是關(guān)系運(yùn)算符等等。如表2-2所示。 易語言運(yùn)算符 運(yùn)算符分類 運(yùn)算符 運(yùn)算符含義 代碼中顯示 算術(shù)運(yùn)算符號 + 加法運(yùn)算,將加號兩邊的數(shù)相加 + - 減法運(yùn)算,將減號兩邊的數(shù)相減;負(fù)號 - * 乘法運(yùn)算,將乘號兩邊的數(shù)相乘 × / 除法運(yùn)算,將除號兩邊的數(shù)相除 ÷ \ 整除運(yùn)算,將整除號兩邊的數(shù)整除 \ % 求余數(shù)運(yùn)算 % 關(guān)系運(yùn)算符 > 判斷是否大于 > < 判斷是否小于 < = 或 == 判斷是否等于 = >= 判斷是否大于等于 ≥ <= 判斷是否小于等于 ≤ <> 或 != 判斷是否不等于 ≠ = 判斷是否約等于 ≈ 邏輯運(yùn)算符 && 或QIE 邏輯與運(yùn)算符,可以連接幾個必須同時滿足的條件 且 ||或HUO 邏輯或運(yùn)算符,可以連接幾個可選條件 或 賦值運(yùn)算符 = 將等號后面的值賦值給等號前面的對象 = 程序中的運(yùn)算符都有其優(yōu)先級別,在程序運(yùn)行的時候會按照符號的優(yōu)先級別,從高到低依次運(yùn)行。運(yùn)算符的優(yōu)先級別參見下表。 易語言常用運(yùn)算符的優(yōu)先級 運(yùn)算符 優(yōu)先級 ()(小括號) 最高 *(乘) /(除) \(整除) %(求余數(shù)) +(加) -(減) <(小于) <=(小于等于) >(大于) >=(大于等于) ==(等于) !=(不等于) ?=(約等于) &&(邏輯與) ||(邏輯或) =(賦值) 在這里我們已看出:算術(shù)表達(dá)式中算術(shù)運(yùn)算符號的優(yōu)先順序,和在數(shù)學(xué)上是完全一樣的: (1)如果有括號,必須先做括號內(nèi)的。在程序中,沒有大、中、小括號之分,一律使用應(yīng)括號(),括號內(nèi)可以套用括號,但不得超過36層。這就同數(shù)學(xué)上一樣,先做最內(nèi)層括號中的計算,層層向外脫,最后處理最外層括號中的計算。 (2)無論括號內(nèi)或括號外,函數(shù)計算優(yōu)先于其它算術(shù)運(yùn)算符。 (3)乘、除運(yùn)算優(yōu)先于加、減運(yùn)算。乘或除同時出現(xiàn)在一個表達(dá)式中時,先完成左邊的后完成右邊的(即以先后出現(xiàn)順序?yàn)樾?。 (4)最后做加、減運(yùn)算。加、減號同時出現(xiàn)在一個表達(dá)式中時,也以先后出現(xiàn)的順序?yàn)樾颉?br>對于初學(xué)者來說,下列幾點(diǎn)要格外注意: 1.在數(shù)學(xué)上,代表兩個數(shù)的字母相乘時,可以連寫。如A代表一個數(shù),B代表一個數(shù),則可用AB代表兩個數(shù)相乘。在表達(dá)式中,這是絕對不允許的(這時它會把AB當(dāng)作變量名)。必須寫成A*B。用A.B也是不允許的。 2./號代表除號。 3.左右括號必須成對出現(xiàn)。且不得用方括號[ ]或花括號{}代替。 2.8.1算術(shù)運(yùn)算符和算術(shù)表達(dá)式 1.算術(shù)運(yùn)算符 在程序中表示為: +,加法運(yùn)算。如:3+2 —,減法運(yùn)算或負(fù)值運(yùn)算。如:10-2、-10 ×,乘法運(yùn)算。如:2×3 /,除法運(yùn)算。如:20/12 \,整除運(yùn)算。如:12\5,運(yùn)算后會將保留一個整數(shù),小數(shù)部分將被舍去 %,余數(shù)運(yùn)算。還可以輸入“求余數(shù)”,第一個參數(shù)填被除數(shù),第二個參數(shù)填除數(shù),第二個參數(shù)可以重復(fù)添加。如:1220%100、1220%100%120 2.算術(shù)表達(dá)式 用算術(shù)符號和括號將運(yùn)算對象連接起來的,符合易語言語法規(guī)則的式子,稱易語言算術(shù)表達(dá)式。例如,下面是一個合法的易語言算術(shù)表達(dá)式: 變量=((6 × 12 + 16 ÷ 8) - 23) \ 10 表達(dá)式中運(yùn)算的先后,是按照運(yùn)算符的優(yōu)先級別來進(jìn)行判定的。 算式計算的結(jié)果可以被程序調(diào)用。 2.8.2賦值運(yùn)算符和賦值表達(dá)式 1.“=”是賦值運(yùn)算符,在程序中給變量賦值或用代碼改變組件屬性,大部分都是使用“=”進(jìn)行賦值的,將等號后面的值賦值給等號前面的賦值對象。 2.賦值表達(dá)式 一個正確的賦值表達(dá)式,一定要保證欲賦的值和被賦值的對象之間的數(shù)據(jù)類型相同,不同的數(shù)據(jù)類型要轉(zhuǎn)換成相同的數(shù)據(jù)類型后再賦值。 3.賦值運(yùn)算符“=”和關(guān)系運(yùn)算符“=”的區(qū)別。雖然2個運(yùn)算符使用的是相同的符號,但含義卻不同,賦值運(yùn)算符“=”是用于賦值,將“=”右邊的值(或變量)賦值給“=”左邊的變量(或組件屬性、數(shù)組成員、自定義數(shù)據(jù)類型成員);關(guān)系運(yùn)算符“=”,是比較符號兩邊的值是否相等,如果相等返回真,不相等返回假。 上述代碼中,條件語句“如果()”中的“被比較值=比較值”,是用關(guān)系運(yùn)算符“=”進(jìn)行比較,如果相等會返回“真”,不相等會返回“假”,如果返回“真”將會執(zhí)行:標(biāo)簽1.標(biāo)題=“相等”;如果返回“假”將會執(zhí)行:標(biāo)簽1.標(biāo)題=“不相等”,這2行給標(biāo)簽標(biāo)題屬性賦值的代碼中,使用的就是賦值運(yùn)算符“=”。 2.8.3文本運(yùn)算符與文本表達(dá)式 字符串在易語言中被稱為文本,其運(yùn)算符只有一個: + 連接運(yùn)算符 其功能是將兩個文本連接起來。 例如: “ABCD”+“123” 將得到一個新的文本,其值為“ABCD123”。 可見,可用字符串運(yùn)算符連接兩個字符串,構(gòu)成字符串表達(dá)式。 |
第五課.易語言的數(shù)據(jù)類型2009-12-09 14:45
分享2.5.1 了解數(shù)據(jù)類型 易語言中基本數(shù)據(jù)類型有6種,包括數(shù)值型、邏輯型、日期時間型、文本型、字節(jié)集型、子程序指針型。 字節(jié)型??扇菁{ 0 到 255 之間的數(shù)值。 數(shù)值型中整數(shù)型數(shù)據(jù),如:13556。 邏輯型數(shù)據(jù),只能有2種值,即“真”或“假”。 日期時間型數(shù)據(jù),用來記錄日期及時間,如:[2002-2-2]。 文本型數(shù)據(jù),可用來記錄一段文本,如:“中文編程易語言”。在程序中表示一段文本數(shù)據(jù),都要用雙引號將文本引起來。 字節(jié)集型數(shù)據(jù),用作記錄一段字節(jié)型數(shù)據(jù),表示為{23456754}。圖片或mp3格式的文件是典型的字節(jié)集型數(shù)據(jù),在程序中,存放此類數(shù)據(jù)的變量一定要定義為字節(jié)集型。 子程序指針型數(shù)據(jù),是一個子程序在內(nèi)存中的地址。 2.5.2 給變量正確賦值 定義了變量的數(shù)據(jù)類型后,要給變量賦值就應(yīng)注意賦值的類型要和變量類型相同。例如: 文本變量=“中文編程易語言” ‘ 給文本變量賦值 整數(shù)變量=32342 ‘ 給整數(shù)變量賦值 日期時間變量=[1982年1月1日] ‘ 給日期時間型的變量賦值 字節(jié)集變量=#圖片 ‘ 給字節(jié)集變量賦值,圖片1圖片資源表中的資源 這里要注意,給“子程序指針”類型的變量賦值,表示為“&”+要指向的子程序名。例如: 變量=&子程序1 2.5.3 數(shù)據(jù)的比較 在編程中,經(jīng)常會在各種數(shù)據(jù)間進(jìn)行比較。同種數(shù)據(jù)類型之間進(jìn)行比較,可以直接進(jìn)行;而不同種數(shù)據(jù)之間進(jìn)行比較,就要先進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,將不同種的數(shù)據(jù)類型轉(zhuǎn)換為同一種數(shù)據(jù)類型后才能進(jìn)行比較,否則程序會報錯。 例如:編輯框中輸入了一個整數(shù),要比較編輯框中的內(nèi)容是否大于50。由于編輯框中的內(nèi)容是一個文本,首先要將編輯框中的內(nèi)容轉(zhuǎn)換成整數(shù)型數(shù)據(jù)后,再進(jìn)行比較,輸入以下代碼: 到數(shù)值(編輯框1.內(nèi)容)>50 比較后,會返回一個邏輯值,如果大于50就會返回真,小于或等于50將返回假。 易語言中常用的數(shù)據(jù)類型間轉(zhuǎn)換的命令有: “到數(shù)值()”命令,用來將一個通用型數(shù)據(jù)轉(zhuǎn)換到整數(shù)型。 “到文本()”命令,用來將一個通用型數(shù)據(jù)轉(zhuǎn)換到文本型。 “到字節(jié)集()”命令,用來將一個通用型數(shù)據(jù)轉(zhuǎn)換到字節(jié)集型。 “從字節(jié)集轉(zhuǎn)換()”命令,用來將一個字節(jié)集型的數(shù)據(jù)轉(zhuǎn)換成通用型數(shù)據(jù),命令的第2個參數(shù)控制欲轉(zhuǎn)換成的數(shù)據(jù)類型。 “到時間()”命令,用來將一個文本型的數(shù)據(jù)轉(zhuǎn)換成日期時間型。 使用這些數(shù)據(jù)類型間互相轉(zhuǎn)換的命令,就可以進(jìn)行不同數(shù)據(jù)類型間的比較了。 例如:比較2個編輯框中數(shù)的大小,用信息框顯示出比較的結(jié)果,并用第3個編輯框顯示出較大數(shù)減較小數(shù)的結(jié)果。在窗口中添加3個編輯框組件和一個按鈕組件,雙擊按鈕組件,然后輸入代碼: 變量之間的比較也是一樣,一定要注意變量的數(shù)據(jù)類型,不同數(shù)據(jù)類型的變量一定要轉(zhuǎn)換成相同類型后再進(jìn)行比較。 2.5.4 數(shù)據(jù)類型的存儲字節(jié)與溢出 1.?dāng)?shù)據(jù)類型的存儲字節(jié) 各種數(shù)值型的數(shù)據(jù)都在內(nèi)存中占用一定的存儲空間。字節(jié)(byte)是系統(tǒng)中的基本存儲單位。數(shù)據(jù)類型所占字節(jié)數(shù)越多,所能夠容納數(shù)值的范圍就越大。參見表2-1。 表2-1 常用數(shù)據(jù)類型 數(shù)據(jù)類型名稱 占用字節(jié)數(shù) 取值范圍 字節(jié)型 1 0 到 255 短整數(shù)型 2 -32,768 到 32,767 整數(shù)型 4 -2,147,483,648 到 2,147,483,647 長整數(shù)型 8 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 小數(shù)型 4 -3.4E38 到 3.4E38 (7位小數(shù)) 雙精度小數(shù)型 8 -1.7E308 到 1.7E308 (15位小數(shù)) 邏輯型 2 “真”或“假”, 日期時間型 8 100年1月1日到9999年12月31日 子程序指針 4 尺寸為 4 個字節(jié)。具有此數(shù)據(jù)類型的變量可以用來間接調(diào)用子程序。 文本型 由以字節(jié) 0 結(jié)束的一系列字符組成 字節(jié)集 一段字節(jié)型數(shù)據(jù) 從上表可以看出,數(shù)值型數(shù)據(jù)容納的數(shù)值范圍越大,占用的字節(jié)就越多。比如,短整數(shù)型的數(shù)值3000和整數(shù)型的數(shù)值3000,都代表了數(shù)值3000,但在系統(tǒng)中占用的空間卻不同,即短整數(shù)型占2個字節(jié),整數(shù)型占4個字節(jié)。所以,在實(shí)際應(yīng)用時就要根據(jù)自己的需要來選擇使用的數(shù)據(jù)類型,避免存儲空間的浪費(fèi)。例如,存儲的數(shù)據(jù)在-32768至32767以內(nèi),就要采用短整數(shù)型;如果使用小數(shù)而對精度不高,就可以使用小數(shù)型而不用采用雙精度小數(shù)型等等。 2.?dāng)?shù)據(jù)的溢出 某數(shù)據(jù)類型存儲的值超出了其所能容納的范圍,就會發(fā)生數(shù)據(jù)溢出錯誤。比如,讓短整數(shù)型數(shù)據(jù)存放大于32767的數(shù)值,將會得到錯誤的結(jié)果。所以在選擇數(shù)據(jù)類型時,除了要避免空間的浪費(fèi),又要防止數(shù)據(jù)的溢出。 可以做一個簡單例程來測試一下數(shù)據(jù)的溢出,新建一個“Windows控制臺程序”,然后在“_啟動子程序”中首先按下Ctrl+L鍵,新建一個變量,并定義變量名為“整數(shù)變量”,變量類型為整數(shù)型,然后輸入代碼: 最后按“F5鍵”試運(yùn)行程序,輸入一個很大的數(shù)(比如:10000000000),然后按“回車鍵”,如果超出整數(shù)型變量容納范圍而產(chǎn)生溢出,會顯示出錯誤的結(jié)果。 2.5.5自定義數(shù)據(jù)類型 除了使用易語言提供的數(shù)據(jù)類型以外,還可以根據(jù)需要自定義新的數(shù)據(jù)類型。例如要定義一個數(shù)據(jù)類型“矩形”,定義方法如下: 第一步,新建一個“Windows窗口程序”,雙擊程序面板中的“自定義數(shù)據(jù)類型”。 第二步,在自定義數(shù)據(jù)類型界面按下Ctrl+N鍵,新建一個數(shù)據(jù)類型。然后將數(shù)據(jù)類型名定義為“矩形”,由于決定一個矩形的位置取決于矩形左上點(diǎn)的橫縱坐標(biāo)和矩形右下點(diǎn)的橫縱坐標(biāo)。所以,在“成員名”上按4次回車,加入4個成員。將4個成員名分別定義為“左上橫坐標(biāo)”、“左上縱坐標(biāo)”、“右下橫坐標(biāo)”、“右下縱坐標(biāo)”。 最后,就要來使用這個自定義的數(shù)據(jù)類型了。畫板有一個方法是“畫矩形()”,下面就用自定義的數(shù)據(jù)類型“矩形”來為畫矩形方法填寫參數(shù)。在窗口中添加一個畫板組件和一個按鈕組件,雙擊按鈕組件,在“_按鈕1_被單擊”子程序中新建一個變量,變量名為“矩形”,然后定義變量的數(shù)據(jù)類型為“矩形”,然后輸入代碼: 代碼輸入后試運(yùn)行程序,點(diǎn)擊按鈕,畫板會以畫板的邊框大小畫一個矩形。 2.6常量 常量,其值在使用過程中不會發(fā)生變化的變量,稱為常量。比如數(shù)字15,不管程序如何變化,它永遠(yuǎn)是數(shù)字15。 核心支持庫中已經(jīng)定義了大量常量,其它支持庫通常也會定義一些常量,用戶也可以在程序中定義自己的常量。 各種圖片或聲音等資源都被看作常量,要想在程序中隨時調(diào)用,可以將其存放在資源表中,這樣在編程時不但可以隨時調(diào)用,而且資源表中的資源會和程序一起編譯到可執(zhí)行文件里面。 2.6.1 了解常量 常量是一個固定的量,其值不可以被改變。易語言中規(guī)定了一些常量,這些常量都有固定的值,例如易語言中的“#藍(lán)色”代表了數(shù)值16711680、“#F鍵”代表了數(shù)值70,所以在程序中使用“#藍(lán)色”其實(shí)是調(diào)用了“16711680”這個顏色值。 核心支持庫定義了許多常量,這些常量可以直接用#常量名即可調(diào)用,有數(shù)值型常量,如顏色值:#藍(lán)色、#綠色;有文本型的常量,如:# 引號等等。擴(kuò)展支持庫也有許多常量的定義,并且新增加的支持庫中,有的也會增加新的常量。 2.6.2 ASCII碼 ASCII碼是各種計算機(jī)通用的一種常量。例如字符a的ASCII碼是97、字符b的ASCII碼是98等等,參見下表所示??梢允褂靡渍Z言中的“字符()”和“取代碼()”命令,在ASCII碼和字符之間進(jìn)行轉(zhuǎn)換。例如: 信息框 (取代碼 (“a”, 1), 0, ) 信息框會顯示“a”的ASCII碼。 常用ASCII碼表 ASC值 對應(yīng)字符 ASC值 對應(yīng)字符 ASC值 對應(yīng)字符 ASC值 對應(yīng)字符 032 (space) 056 8 080 P 104 h 033 ! 057 9 081 Q 105 i 034 " 058 : 082 R 106 j 035 # 059 ; 083 S 107 k 036 $060 < 084 T 108 L 037 % 061 = 085 U 109 M 038 & 062 > 086 V 110 N 039 ' 063 ? 087 W 111 O 040 ( 064 @ 088 X 112 P 041 ) 065 A 089 Y 113 Q 042 * 066 B 090 Z 114 R 043 + 067 C 091 [ 115 S 044 , 068 D 092 \ 116 T 045 - 069 E 093 ] 117 U 046 . 070 F 094 ^ 118 V 047 / 071 G 095 _ 119 W 048 0 072 H 096 ` 120 X 049 1 073 I 097 a 121 Y 050 2 074 J 098 b 122 Z 051 3 075 K 099 c 123 { 052 4 076 L 100 d 124 | 053 5 077 M 101 e 125 } 054 6 078 N 102 f 126 ~ 055 7 079 O 103 g 127 □ 2.6.3 常量的使用 下面就介紹常量的使用方法: (1)顏色值常量的使用 有顏色屬性的組件,在顏色屬性上都有一個顏色選擇器,用來直接改變顏色,顏色選擇器上可直接選擇顏色的顏色值都作為常量提供,在調(diào)用的時候直接輸入“#顏色名”即可,如: 標(biāo)簽1.背景顏色=#天藍(lán) (2)“#換行符”的使用 一段文本尾部加入了一個“#換行符”,接在換行符后面的文本將另起一行,相當(dāng)于在記事本中輸入的回車鍵。如果想讓編輯框顯示一段文本并自動換行,就需要使用換行符,將“#換行符”加到欲換行文本的前面即可,如: 編輯框1.是否允許多行 = 真 編輯框1.內(nèi)容=“易語言”+#換行符+“編程可視化” (3)“#引號”、“#左引號”、“#右引號” 為了不和代碼中表示文本數(shù)據(jù)的引號相沖突,程序中將文本的引號作為了一個文本常量,如果要讓編輯框顯示出一個引號,就要使用“#引號”常量,要顯示中國標(biāo)點(diǎn)中的引號,就要使用常量“#左引號”、“#右引號”。例如:讓編輯框顯示出:“我愛易語言,我愛編程!”,需要輸入以下代碼: 編輯框1.內(nèi)容=#左引號+“我愛易語言,我愛編程!”+#右引號 (4)鍵代碼的使用 易語言中,將標(biāo)準(zhǔn)的101鍵盤上所有鍵的鍵代碼都作為了核心支持庫定義的常量,在程序中使用只需要輸入“#”+鍵名,如鍵盤上的F11的鍵代碼,在易語言中用常量表示為:#F11鍵。例如,在向編輯框中輸入內(nèi)容的時候,想簡單的屏蔽掉某個鍵,就可以在編輯框的“按下某鍵”事件子程序中輸入代碼。 (5)用常量填寫參數(shù) 很多命令參數(shù)填入的都是常量,如:“時間到文本”命令,此命令將指定時間轉(zhuǎn)換為文本并返回。第1個參數(shù)為“欲轉(zhuǎn)換到文本的時間”,而第2個參數(shù)值可以為以下常量:1、#全部轉(zhuǎn)換;2、#日期部分;3、#時間部分。在填寫第二個參數(shù)時,可以填寫數(shù)字,也可以直接填寫常量名,如: 時間到文本 ([2004年3月16日5時11分11秒], #日期部分) 2.6.4 枚舉常量 枚舉常量是一種非常方便的常量類型,它本身就是一個常量的集合,將多個常量以成員的形式,存放在一個常量中,使用的格式為 #枚舉常量名.成員名 這里要注意,枚舉常量只是一種常量的表現(xiàn)形式,是由易語言支持庫定義的常量,和普通常量相同,但只能由用戶來調(diào)用,但不能自定義。 易語言中有很多支持庫中使用了枚舉常量,如核心支持庫中定義的“變體類型”,“變體類型”提供變體型中所能夠容納數(shù)據(jù)類型的枚舉值。如表3-4中的某類型枚舉常量可存放于變體型中,通過“變體型.取類型()”取回當(dāng)前變體型對象的數(shù)據(jù)類型。 變體類型常量成員及常量值 變體類型 枚舉常量集合類型 成員 描 述 未知 常量值為 -1 初空 常量值為 0 數(shù)值型 常量值為 1 文本型 常量值為 2 邏輯型 常量值為 3 日期型 常量值為 4 對象型 常量值為 5 錯誤值型 常量值為 6 數(shù)值型數(shù)組 常量值為 7 文本型數(shù)組 常量值為 8 邏輯型數(shù)組 常量值為 9 日期型數(shù)組 常量值為 10 對象型數(shù)組 常量值為 11 錯誤值型數(shù)組 常量值為 12 變體型數(shù)組 常量值為 13 表中,列出了“變體類型”常量的所有成員名及成員的常量值,在程序中,如果想調(diào)用“變體類型”常量中的“日期型”成員,該成員的常量值為4,程序中調(diào)用該成員就等于調(diào)用了4這個整數(shù),例如用信息框顯示出該成員使用代碼: 信息框 (#變體類型.日期型, 0, ) 運(yùn)行后,信息框?qū)@示4。 這里要注意,在核心支持庫中還定義了“變體型”,“變體型”和“變體類型”不同,“變體型”是一種數(shù)據(jù)類型,可以將一個變量的類型定義成“變體型”,“變體型”的變量,可以加入成員和改變成員的值;而“變體類型”是一個常量,其值只可以調(diào)用而不可以改變。 “變體型”變量的成員和值,要通過調(diào)用命令來改變。 例如程序定義一個“變體型”變量,并加入一個文本型成員,然后給該成員賦值“”,然后用信息框顯示該成員,代碼如下: 對“變體型”變量的操作的其他一些命令包括:清除()、取類型()、取數(shù)組成員數(shù)()、取文本()、取數(shù)值()、取邏輯值()、取日期()、取對象()、取變體型()、賦值()、創(chuàng)建數(shù)組()。程序中可以使用這些命令來操作“變體型”變量。 2.6.5 自定義常量 除了各支持庫定義的常量以外,易語言中還可以自定義常量,自己來規(guī)定一個新的常量及其代表的值。自定義常量,可以定義一些固定值,編程中使用一些自定義常量還可以增加編程的靈活性,當(dāng)程序中多個地方調(diào)用了某個自定義常量時,如果改變這個自定義常量的值,那這些調(diào)用該常量的地方將會自動調(diào)用改變后的新值,這樣可以節(jié)省改寫程序的時間。 定義了一個新的常量后,可以任意定義常量的名稱,然后在“常量值”上輸入該常量的值。自定義常量的使用方法和非自定義的常量的使用方法相同,用“#”+自定義常量的名稱。 下面就用一個簡單的例程來學(xué)習(xí)使用自定義常量。新建一個“Windows窗口程序”,在窗口中添加1個編輯框組件、1個標(biāo)簽組件和1個按鈕組件。然后按照上面介紹的方法自定義一個常量,常量名叫“顯示內(nèi)容”,然后將常量值定義為“易語言”。這里要說明的是,如果定義數(shù)值型的常量,直接在“常量值”上輸入數(shù)值即可;如果定義文本型常量要在欲定義的文本兩端加雙引號。 雙擊窗口中的按鈕,在“_按鈕1_被單擊”子程序中輸入代碼: 最后運(yùn)行程序,按下按鈕后,可以看到標(biāo)簽和編輯框同時顯示出“易語言”。可以試著在不改變代碼的情況下,直接改變自定義常量的值,再次運(yùn)行程序,可以看到改變常量值后,標(biāo)簽和編輯框顯示的內(nèi)容也跟著改變。 |