欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      程序設(shè)計(jì)教案VB版第一章、第二章五篇

      時(shí)間:2019-05-12 21:06:23下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《程序設(shè)計(jì)教案VB版第一章、第二章》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《程序設(shè)計(jì)教案VB版第一章、第二章》。

      第一篇:程序設(shè)計(jì)教案VB版第一章、第二章

      第一章

      本書的任務(wù)是啟迪讀者應(yīng)用某種計(jì)算機(jī)語(yǔ)言,對(duì)于內(nèi)業(yè)平差計(jì)算,按照測(cè)量平差基本理論,通過編程來(lái)處理各種測(cè)量控制網(wǎng)的數(shù)據(jù),最后輸出控制網(wǎng)基本信息(網(wǎng)形碼、已知點(diǎn)數(shù)、未知點(diǎn)數(shù)、路線條數(shù)等)、起算數(shù)據(jù)表、觀測(cè)數(shù)據(jù)表、平差計(jì)算中間重要過程數(shù)據(jù)、平差計(jì)算結(jié)果(含精度評(píng)定指標(biāo))及控制網(wǎng)形圖、誤差橢圓圖、誤差曲線圖等;對(duì)于外業(yè)觀測(cè)記錄手簿,按照相應(yīng)的電子記錄標(biāo)準(zhǔn)通過編程來(lái)實(shí)現(xiàn)外業(yè)自動(dòng)記錄計(jì)算;對(duì)于專業(yè)測(cè)繪部門的測(cè)繪資料管理,通過編程來(lái)實(shí)現(xiàn)控制點(diǎn)的坐標(biāo)、高程、點(diǎn)之記、地形圖等的自動(dòng)查詢。書中編程示例采用的計(jì)算機(jī)語(yǔ)言是Visual Basic 6.0版(以下簡(jiǎn)稱VB6.0)。

      §1-1 學(xué)習(xí)本書需注意的幾個(gè)問題

      一、本書的主要內(nèi)容

      1、程序設(shè)計(jì)基本原理(含軟件工程、程序設(shè)計(jì)的基本概念及原則)。

      2、VB6.0的基本用法。

      3、用VB6.0制作測(cè)量程序圖形界面、菜單的方法。

      4、VB6.0數(shù)據(jù)輸入方法。

      測(cè)量程序設(shè)計(jì)中,必須含有數(shù)據(jù)輸入功能。用VB6.0進(jìn)行數(shù)據(jù)輸入的方法,根據(jù)具體問題的不同,可采用對(duì)話框輸入方法(也稱為鍵盤輸入方式),也可采用數(shù)據(jù)文件輸入方式。

      5、數(shù)據(jù)處理方法。

      不同的控制網(wǎng)形,具體的數(shù)據(jù)處理方法不盡相同,有的時(shí)候技術(shù)難度還較大,或者必須采用特殊方法,需要讀者在后續(xù)章節(jié)內(nèi)容的學(xué)習(xí)中給予注意,細(xì)心研讀。

      6、VB6.0數(shù)據(jù)輸出方法。

      測(cè)量程序設(shè)計(jì)中,必須含有數(shù)據(jù)輸出功能。用VB6.0進(jìn)行數(shù)據(jù)輸出的方法,根據(jù)具體問題的不同,可采用屏幕直接輸出,也可采用數(shù)據(jù)文件輸出,還可通過打印機(jī)打印輸出。

      7、圖形輸出方法。

      控制網(wǎng)平差計(jì)算后,應(yīng)輸出與實(shí)地方位一致、按一定比例尺縮小的控制網(wǎng)形圖。具體的輸出方法,可采用屏幕直接輸出,也可通過打印機(jī)打印輸出。

      二、本書的學(xué)習(xí)方法提示

      1、讀者應(yīng)具有一定的VB6.0的基本知識(shí)。學(xué)習(xí)VB6.0的基本知識(shí)過程中,針對(duì)一些問題應(yīng)上機(jī)試驗(yàn),以便準(zhǔn)確掌握。例如SUB、FUNCTION過程傳遞數(shù)據(jù)的用法、返回?cái)?shù)據(jù)的用法;特別應(yīng)注意傳遞數(shù)組的方法、各個(gè)字符串函數(shù)的用法等。

      讀者應(yīng)掌握如下VB6.0的基本知識(shí):

      ⑴、建立窗體模塊的方法。

      ⑵、建立菜單的方法。

      ⑶、基本控件的用法。

      ⑷、簡(jiǎn)單數(shù)據(jù)輸入方法(對(duì)話框方式)。

      ⑸、簡(jiǎn)單數(shù)據(jù)輸出方法(屏幕直接輸出方式或?qū)υ捒蚍绞剑"?、SUB、FUNCTION過程傳遞數(shù)據(jù)的用法,返回?cái)?shù)據(jù)的用法。⑺、數(shù)組的不同用法。

      ⑻、各個(gè)字符串函數(shù)的用法。⑼、繪圖“方法”的用法。

      ⑽、輸入、輸出數(shù)據(jù)文件的用法。

      2、讀者應(yīng)有較為系統(tǒng)的測(cè)量專業(yè)知識(shí)。

      3、邊學(xué)邊練。練習(xí)時(shí),必須按所要求的基本規(guī)則進(jìn)行編程,充分進(jìn)行調(diào)試(需考慮到各種特殊情況)。

      三、學(xué)習(xí)本書對(duì)計(jì)算機(jī)軟、硬件的基本要求

      1、硬件配置

      CPU:奔Ⅲ(或賽揚(yáng)Ⅱ800)(不要毒龍或雷鳥系列的任何物品)

      內(nèi)存:256M 硬盤:20G 顯示器、顯示卡分辨率:1024*768 主板:帶USB口。

      主板、顯示卡、聲卡非一體化。

      光驅(qū):48速

      鼠標(biāo):羅技光電鼠標(biāo)

      2、軟件安裝

      需要安裝Windows XP操作系統(tǒng)、Office XP辦公軟件及VB6.0編程語(yǔ)言系統(tǒng)。

      §1-2 測(cè)量程序功能簡(jiǎn)介

      一、測(cè)量程序整體演示

      1、菜單

      2、外業(yè)數(shù)據(jù)采集程序

      ⑴、普通水準(zhǔn)測(cè)量記錄計(jì)算

      ⑵、三等水準(zhǔn)測(cè)量記錄計(jì)算

      ⑶、四等水準(zhǔn)測(cè)量記錄計(jì)算

      ⑷、水平方向觀測(cè)記錄計(jì)算(方向觀測(cè)法)

      ⑸、水平角觀測(cè)記錄計(jì)算(測(cè)回法)

      ·

      ·

      ·

      3、內(nèi)業(yè)平差計(jì)算程序

      ⑴、導(dǎo)線近似平差計(jì)算

      ⑵、單三角鎖近似平差計(jì)算

      ⑶、測(cè)角、測(cè)邊交會(huì)計(jì)算

      ⑷、導(dǎo)線網(wǎng)嚴(yán)密平差計(jì)算

      ⑸、三角網(wǎng)嚴(yán)密平差計(jì)算

      ·

      ·

      ·

      4、Gauss投影計(jì)算程序

      5、地形圖分幅編號(hào)程序

      二、測(cè)量程序子功能演示

      1、測(cè)量程序菜單

      2、多重窗體的轉(zhuǎn)換

      3、數(shù)據(jù)文件的讀寫

      4、奇進(jìn)偶舍

      5、Degree與Radian的互化及輸入、輸出

      6、坐標(biāo)正算

      7、坐標(biāo)反算

      8、推算坐標(biāo)方位角

      9、建立測(cè)量控制點(diǎn)符號(hào)庫(kù)

      10、繪制測(cè)量專用線段(單虛線、雙虛線、半實(shí)半虛單線、半實(shí)半虛雙線等)

      11、繪制等高線(三次樣條曲線,二階導(dǎo)數(shù)連續(xù))

      12、繪制誤差橢圓、誤差曲線

      13、自動(dòng)顯示控制網(wǎng)形圖并打印

      第二章

      程序設(shè)計(jì)基本原理

      §2-1 概 述

      一、軟件工程的概念

      在計(jì)算機(jī)迅猛發(fā)展的短暫歷史中,軟件的發(fā)展,和計(jì)算機(jī)硬件技術(shù)的發(fā)展、計(jì)算機(jī)的推廣應(yīng)用緊密相關(guān),至今為止,已經(jīng)歷了程序設(shè)計(jì)、軟件、軟件工程三個(gè)階段的演化:

      1、程序設(shè)計(jì)階段——單人編制模式

      在計(jì)算機(jī)發(fā)展的初期(1946年 ── 1954年),為了有效地利用計(jì)算機(jī),程序設(shè)計(jì)人員采用個(gè)體手工方式開發(fā)編制了一些具有單一實(shí)際用途的程序。這個(gè)階段的程序只是作為硬件的附屬品,還沒有作為商品進(jìn)入營(yíng)銷市場(chǎng),其開發(fā)的工作效率很低,屬于手工生產(chǎn)方式。

      2、軟件階段(又稱程序系統(tǒng)階段)——小組編制模式

      這階段是指1955年──1970年一段時(shí)間。這個(gè)階段的軟件生產(chǎn)方式已由個(gè)體手工進(jìn)入作坊生產(chǎn)方式,采取由程序員小組進(jìn)行編程(個(gè)體分工合作)的方法。

      由于計(jì)算機(jī)硬件功能和質(zhì)量的不斷發(fā)展,而整機(jī)價(jià)格大幅度地下降 ── 這意味著計(jì)算機(jī)可以更廣泛地應(yīng)用于生產(chǎn)和社會(huì)生活的各個(gè)領(lǐng)域,軟件的社會(huì)需求迅速上升。但是,軟件是一種包含算法、思想等密集知識(shí)型的非物理實(shí)體,其整個(gè)研制開發(fā)過程是一個(gè)“思考”過程。在寫出代碼并在計(jì)算機(jī)上試運(yùn)行之前,對(duì)開發(fā)過程的進(jìn)展情況很難控制,質(zhì)量也難于評(píng)價(jià),而且,往往還會(huì)潛存著錯(cuò)誤 ── 編寫的源程序必須經(jīng)過機(jī)上運(yùn)行、各種可能數(shù)據(jù)(含非數(shù)字的數(shù)據(jù),例如代表某種意義的字符串)測(cè)試均通過,才算告捷!

      軟件這一性質(zhì)隨著其在計(jì)算機(jī)系統(tǒng)中所占地位的日益重要和復(fù)雜度的增加,使軟件開發(fā)人員越來(lái)越滿足不了需要,因而,軟件的供需矛盾加劇,出現(xiàn)了軟件成本高、質(zhì)量低,常不能按期完成開發(fā)計(jì)劃,軟件可靠性差,生產(chǎn)效率低等現(xiàn)象。對(duì)此,人們稱之為“軟件危機(jī)”。所以,有人將這一階段稱為“軟件危機(jī)時(shí)期”。

      3、軟件工程階段——企業(yè)生產(chǎn)模式

      這階段是指自1970至現(xiàn)在的時(shí)間。針對(duì)“軟件危機(jī)”的現(xiàn)象,人們逐漸認(rèn)識(shí)到:要經(jīng)濟(jì)地研制出功能強(qiáng)、應(yīng)用面寬、可靠性高的軟件,單憑經(jīng)驗(yàn)和直覺、采用作坊式小組編程是不行的,有必要采取良好的技術(shù)措施(方法和工具 ── 軟件工具)和科學(xué)的組織管理形式。于是,提出了用系統(tǒng)工程學(xué)的原理和方法來(lái)管理軟件生產(chǎn)過程的設(shè)想。1968年,在“北大西洋公約”(簡(jiǎn)稱“北約”)組織的一次學(xué)術(shù)會(huì)議上,第一次正式提出了“軟件工程”這個(gè)術(shù)語(yǔ)。

      經(jīng)過各國(guó)軟件業(yè)人員三十余年的悉心研究,目前已創(chuàng)造了許多適用于軟件生產(chǎn)各階段的方法和技術(shù),確立了軟件研制的各個(gè)階段的生產(chǎn)模式和組織管理形式(制度),使整個(gè)軟件研制過程“有章可循”?!肮こ袒钡乃枷霝檐浖兄浦赋隽诵碌耐緩剑饾u形成了軟件生產(chǎn)的規(guī)范化和自動(dòng)化,推動(dòng)了軟件研制走向自動(dòng)化的進(jìn)程。在此基礎(chǔ)上,形成了一門獨(dú)立的學(xué)科──軟件工程學(xué)。(參見《計(jì)算機(jī)應(yīng)用與軟件》1995年第三期、第四期)

      這個(gè)階段,軟件已作為一種社會(huì)產(chǎn)品進(jìn)行批量生產(chǎn)和標(biāo)準(zhǔn)化生產(chǎn)。在生產(chǎn)方式上,出現(xiàn)了大批軟件公司、軟件工廠等集體生產(chǎn)方式,并以軟件作為計(jì)算機(jī)的中心,提出了一整套軟件生產(chǎn)過程的基礎(chǔ)理論、方法和工具系統(tǒng)。

      經(jīng)驗(yàn)證明:采用軟件工程理論指導(dǎo)軟件開發(fā),可以大大地提高軟件開發(fā)的成功率和生產(chǎn)率,例如美國(guó)的IBM公司從70年代初開始運(yùn)用軟件工程系統(tǒng),研制了“紐約時(shí)報(bào)情報(bào)檢索”和“空間實(shí)驗(yàn)室的飛行模擬”兩個(gè)大型系統(tǒng)軟件;微軟公司、我國(guó)的“希望電腦公司”等研制的一些軟件,均取得了滿意的結(jié)果。

      因此,研制軟件就不再僅僅是“編程序”的單一問題,而是像其它產(chǎn)品一樣,應(yīng)包括計(jì)劃、分析、設(shè)計(jì)、加工(編寫源代碼)、拼裝(集成)、測(cè)試、生產(chǎn)運(yùn)營(yíng)(進(jìn)入營(yíng)銷市場(chǎng),由客戶應(yīng)用于實(shí)際工作中)、維護(hù)等階段,達(dá)到以較少的投資獲得“優(yōu)質(zhì)、高產(chǎn)”的軟件產(chǎn)品的目的。

      計(jì)算機(jī)軟件的概念:與計(jì)算機(jī)系統(tǒng)操作有關(guān)的程序(源代碼)、過程及任何有關(guān)的文檔資料的總稱。

      計(jì)算機(jī)軟件按其功能的不同可分為系統(tǒng)軟件和應(yīng)用軟件兩類。

      系統(tǒng)軟件是指用于管理計(jì)算機(jī)各種資源及協(xié)調(diào)各種裝置正常工作的有關(guān)程序,以及為用戶編制程序服務(wù)的程序。例如:計(jì)算機(jī)操作系統(tǒng)(DOS、WINDOWS)、設(shè)備安裝系統(tǒng)(光驅(qū)驅(qū)動(dòng)程序、打印機(jī)驅(qū)動(dòng)程序、顯示卡驅(qū)動(dòng)程序、聲卡驅(qū)動(dòng)程序)、語(yǔ)言處理系統(tǒng)(BASIC語(yǔ)言、C語(yǔ)言、PASCAL語(yǔ)言)、文字編輯系統(tǒng)(WPS、WORD等)數(shù)據(jù)庫(kù)管理系統(tǒng)、診斷程序等。

      應(yīng)用軟件是指與具體用途關(guān)系密切、應(yīng)用針對(duì)性強(qiáng)的軟件。例如:稅務(wù)統(tǒng)計(jì)軟件、大地測(cè)量平差計(jì)算軟件、地籍管理地理信息系統(tǒng)、題庫(kù)綜合操作系統(tǒng)、學(xué)生工作管理系統(tǒng)等。

      根據(jù)生命周期方法學(xué)原理,可知軟件的生命期包含如下幾個(gè)階段:

      ⑴、計(jì)劃

      ⑵、分析

      ⑶、設(shè)計(jì)

      ⑷、編碼

      ⑸、測(cè)試

      ⑹、運(yùn)行

      ⑺、維護(hù)

      ⑻、廢棄

      軟件工程的概念是:根據(jù)生命周期方法學(xué)原理,將一個(gè)(套)軟件自其生命期的起點(diǎn)至終點(diǎn)所包含的各個(gè)階段的系統(tǒng)工作,稱為軟件工程。

      軟件生命周期階段的劃分,按我國(guó)軟件設(shè)計(jì)開發(fā)規(guī)范(GB8566-88),分成如下八個(gè)階段: ⑴、可行性研究與計(jì)劃:確定要開發(fā)軟件項(xiàng)目的總項(xiàng)目,從技術(shù)、經(jīng)濟(jì)和社會(huì)條件諸方面調(diào)查研究并確定要開發(fā)的軟件系統(tǒng)是否可行,制定完成開發(fā)任務(wù)的實(shí)施計(jì)劃。(參見《白山發(fā)電廠大壩變形觀測(cè)數(shù)據(jù)采集及處理項(xiàng)目的可行性研究》,1997年11月)

      ⑵、需求分析:對(duì)將開發(fā)的軟件進(jìn)行詳細(xì)定義。詳細(xì)說明被開發(fā)系統(tǒng)與其它硬件、軟件的接口,以及人機(jī)的界面;描述功能細(xì)節(jié)及性能要求,說明功能之間及功能與數(shù)據(jù)之間的關(guān)系,確定設(shè)計(jì)性能和測(cè)試準(zhǔn)則,并編寫初步的用戶手冊(cè)和配置管理計(jì)劃。

      ⑶、概要設(shè)計(jì):又稱系統(tǒng)設(shè)計(jì)。主要任務(wù)是決定系統(tǒng)的模塊結(jié)構(gòu),確定目標(biāo)系統(tǒng)的功能模塊之間的關(guān)系,定義各功能模塊間的數(shù)據(jù)接口,對(duì)模塊劃分的評(píng)價(jià)等。

      ⑷、詳細(xì)設(shè)計(jì):對(duì)概要設(shè)計(jì)的功能模塊進(jìn)行過程描述,確定系統(tǒng)的具體實(shí)現(xiàn)方法;寫出程序的詳細(xì)規(guī)格說明,提供編寫實(shí)際程序代碼的依據(jù)。

      ⑸、編碼與單元測(cè)試:將詳細(xì)設(shè)計(jì)說明轉(zhuǎn)化為計(jì)算機(jī)可以接受的程序源代碼,即用程序設(shè)計(jì)語(yǔ)言或數(shù)據(jù)庫(kù)語(yǔ)言書寫的源程序,并對(duì)編寫好的源程序進(jìn)行模塊測(cè)試,驗(yàn)證模塊接口與設(shè)計(jì)說明的一致性。

      ⑹、集成測(cè)試:也稱組裝測(cè)試。按照選定的測(cè)試策略,采用系統(tǒng)化的方法,將經(jīng)過模塊測(cè)試的模塊按預(yù)先制定的測(cè)試計(jì)劃逐步進(jìn)行組合和測(cè)試。

      ⑺、確認(rèn)測(cè)試:對(duì)集成后的軟件全部設(shè)計(jì)功能進(jìn)行全面確認(rèn)測(cè)試,確認(rèn)軟件開發(fā)成功,并提供最終的用戶手冊(cè)和操作手冊(cè)。

      ⑻、使用與維護(hù):對(duì)投入市場(chǎng)運(yùn)行后的軟件系統(tǒng)不斷進(jìn)行修改和完善,使軟件能夠適應(yīng)外界環(huán)境的改變,并進(jìn)一步改善其性能、擴(kuò)大其功能,延長(zhǎng)其生命周期,直至該軟件退役。

      美國(guó)國(guó)防部所制定的軟件設(shè)計(jì)開發(fā)標(biāo)準(zhǔn)(DOD-STD-2167)對(duì)軟件生命周期各階段的劃分如下:

      ⑴、軟件要求分析。

      ⑵、預(yù)設(shè)計(jì)。

      ⑶、詳細(xì)設(shè)計(jì)。

      ⑷、編碼與單元測(cè)試。

      ⑸、CSC集成與測(cè)試(Computer Software Configuration,計(jì)算機(jī)軟件配置)。

      ⑹、CSCI級(jí)測(cè)試(Computer Software Configuration Item)。

      ⑺、運(yùn)行與維護(hù)。

      二、軟件工程目標(biāo)

      軟件工程的目標(biāo)是以較低的投資而獲得高質(zhì)量的軟件。那么,如何來(lái)評(píng)價(jià)軟件質(zhì)量的高低呢?一般地講,不同的人會(huì)有不同的觀點(diǎn),不同的設(shè)計(jì)課題所要求的標(biāo)準(zhǔn)也不會(huì)一樣。所以,對(duì)軟件質(zhì)量的評(píng)價(jià)很難有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。但就大多數(shù)的軟件來(lái)講,對(duì)其質(zhì)量還是可以找出一些共性標(biāo)準(zhǔn)來(lái)衡量,例如:可以從如下的幾個(gè)方面得到共同的認(rèn)識(shí):

      1、可靠性

      軟件的可靠性是指軟件本身沒有錯(cuò)誤,在預(yù)期的環(huán)境條件下能正確地完成期望的功能,而在意外的情況下,也能作出適當(dāng)?shù)奶幚聿恢略斐蓢?yán)重的損害。所以,軟件的可靠性應(yīng)包括程序的正確性和健壯性兩個(gè)方面。

      ⑴、正確性

      編制程序的目的是為了完成某些特定的功能,如果一個(gè)程序不具有所要求的功能,則這個(gè)程序是毫無(wú)價(jià)值的。正確性應(yīng)是程序的一個(gè)最基本的要求,它是通過對(duì)算法的精心設(shè)計(jì)和詳盡的檢查來(lái)實(shí)現(xiàn)的。

      ⑵、健壯性

      程序的健壯性和正確性是同樣重要的。一個(gè)可靠的程序應(yīng)該具有一定的糾錯(cuò)能力。一個(gè)完全正確的程序,若根本不檢查輸入的數(shù)據(jù)是否合理,就可能造成嚴(yán)重的后果,這樣的程序顯然是不可靠的。一個(gè)正確的程序還應(yīng)該具有查核輸入數(shù)據(jù)的正確性和合理性的能力,要經(jīng)得起長(zhǎng)時(shí)間及大批量數(shù)據(jù)的考驗(yàn)。

      2、易修改性

      軟件開發(fā)是根據(jù)用戶的需求進(jìn)行的。用戶往往會(huì)因時(shí)、因地提出一些新的要求。另外,一個(gè)較大的軟件經(jīng)測(cè)試后還可能會(huì)有錯(cuò)誤,這些錯(cuò)誤要在運(yùn)行階段才會(huì)逐步暴露出來(lái)。所以,軟件需要不斷修改、擴(kuò)充。為了能有效地修改程序,可在尊重程序原有結(jié)構(gòu)的情況下,修改某一部分,而不影響其它部分,以取得所期望的新結(jié)果。

      3、易理解性

      易理解性是指程序的內(nèi)部結(jié)構(gòu)清晰,易于閱讀和理解(為了測(cè)試、排錯(cuò)、修改等),在系統(tǒng)中人機(jī)界面簡(jiǎn)明、清晰,使用戶樂于使用。為此,一個(gè)好的軟件應(yīng)層次分明,其最低層應(yīng)采用好的編碼風(fēng)格,而較高層應(yīng)是數(shù)據(jù)和算法的合理映射,使測(cè)試維護(hù)人員能從中容易地分離出其中的數(shù)據(jù)結(jié)構(gòu)和算法。

      4、有效性

      有效性是指軟件系統(tǒng)是否能以最佳方式,有效地使用計(jì)算機(jī)資源。在現(xiàn)今硬件價(jià)格下降,性能、速度不斷提高,而軟件開發(fā)費(fèi)用不斷上升的情況下,人們寧可犧牲一點(diǎn)機(jī)上運(yùn)行的效率也要獲得較好的易修改性和可靠性。

      §2-2 程序設(shè)計(jì)的基本概念

      一、程序和程序設(shè)計(jì)

      計(jì)算機(jī)程序是指計(jì)算機(jī)一組指令的有序集合,或者說是一組語(yǔ)句的有序集合。換言之,一個(gè)程序是用程序設(shè)計(jì)語(yǔ)言對(duì)處理過程的描述,而描述的對(duì)象不外乎是對(duì)處理對(duì)象──數(shù)據(jù)和處理方式──算法的描述。所以,程序結(jié)構(gòu)應(yīng)包括數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu)兩個(gè)方面,即:

      程序=數(shù)據(jù)結(jié)構(gòu)+算法

      實(shí)際上,一個(gè)程序除了以上兩個(gè)主要要素之外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算機(jī)語(yǔ)言表示。因此,程序可以這樣表示:

      程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+語(yǔ)言工具和環(huán)境

      也就是說,以上四個(gè)方面是一個(gè)程序設(shè)計(jì)人員所應(yīng)具備的知識(shí)。本書將兼顧這四個(gè)方面介紹測(cè)量程序的編寫方法。

      程序設(shè)計(jì)是指構(gòu)造具有某種指定功能的指令序列的過程。這是一項(xiàng)技術(shù)性很強(qiáng)的工作,它是模仿性和創(chuàng)造性的統(tǒng)一。所謂模仿性,是指程序設(shè)計(jì)必須嚴(yán)格遵循程序設(shè)計(jì)語(yǔ)言的有關(guān)語(yǔ)法規(guī)則,模仿它的格式來(lái)編寫。創(chuàng)造性是指在符合程序設(shè)計(jì)語(yǔ)言所規(guī)定的語(yǔ)法規(guī)則的前提下,如何描述計(jì)算過程,采用什么計(jì)算方法,程序設(shè)計(jì)人員可以針對(duì)各自的課題盡情地發(fā)揮。這里賦予程序員以極大的靈活性和創(chuàng)造性。因此,對(duì)同一課題,由不同人員設(shè)計(jì)出來(lái)的程序往往是不同的。例如編程求下面數(shù)列的前n項(xiàng)和:

      a?,a??a ?,aaa?,aa?,???????第1項(xiàng)第2項(xiàng)第3項(xiàng)??第n項(xiàng)其中0?a?9,且a為整數(shù)。

      針對(duì)這個(gè)問題,可采用以下兩個(gè)不同的算法:

      1、方法一:設(shè)a?8,則:

      8?10?2

      ?10?2*10 1088?(100?20)?(10?2)

      ?(102?2*101)?(101?2*100)

      888?(1000?200)?(100?20)?(10?2)

      ?(10?2*10)?(10???? 8??8?(10???n個(gè)n322?2*10)?(10?2*10)

      110?2*10n?1)?(10n?1?2*10n?2)????(10?2*10)?(10 n?(10?8)*10n?1)?(10n?1?(10?8)*107

      n?2)????(10?(10?8)*10)10

      方法一程序:

      A=8

      (即a=8)

      I=1

      (I為循環(huán)變量)

      N=10

      (N為數(shù)列的總項(xiàng)數(shù))T=0 DO IF I>N THEN EXIT DO

      J=1

      (J為內(nèi)層循環(huán)變量)TT=0 TT0=0 DO TT0=10^J-(10-A)*10^(J-1)TT=TT+TT0 J=J+1 IF J>I THEN EXIT DO

      LOOP T=T+TT I=I+1 LOOP PRINT“數(shù)列前N項(xiàng)之和=”;T

      (T為結(jié)果)

      2、方法二:設(shè)a?8,則:

      8?8*10 088?8*10?8*10

      888?8*10210?8*10?8*10

      10n?1n?20 8??8?8*10?8*10????8*10??????????????????n個(gè)n項(xiàng)方法二程序: A = 8 TT = 0 N = 10 For R = 0 To N-1 J = 0 For I = 0 To R k = A *(10 ^ I)J = J + k Next I TT = TT + J Next R Print “數(shù)列前N項(xiàng)之和=”;TT

      又如給定三點(diǎn)坐標(biāo),據(jù)此作三角形之前,判斷這三點(diǎn)是否共線??刹捎萌缦聝煞N方法:

      1、先計(jì)算1點(diǎn)與2點(diǎn)之間、2點(diǎn)與3點(diǎn)之間的坐標(biāo)方位角?

      12、?23;然后,判斷這三點(diǎn)是否共線。

      ?or若?12??2

      3??or?12??23?180?(?12?180?,?12??23?180?(?12?180?,?23?180?)?23?180?)

      則說此三點(diǎn)共線;否則,說明這三點(diǎn)不共線。

      2、如圖2-1所示有三種可能情況,先計(jì)算平距D12、D23、D13;然后,判斷這三點(diǎn)是否共線。

      D13?D12?D23 or

      D12?D23?D13 or

      D23?D12?D13

      則說明三點(diǎn)共線;否則,說明三點(diǎn)不共線?!搯栴}可用于根據(jù)碎部點(diǎn)構(gòu)造三角網(wǎng),以便自動(dòng)內(nèi)插等高線;也可用于根據(jù)三點(diǎn)繪制三角形外接圓等問題

      圖2-1 三點(diǎn)共線

      二、程序設(shè)計(jì)的一般過程

      在實(shí)際工作中,人們所開發(fā)的軟件項(xiàng)目,多數(shù)是只需一、二人參加就足夠的小項(xiàng)目。像這類項(xiàng)目可根據(jù)“小”的特點(diǎn),采用適當(dāng)簡(jiǎn)化的方法,比如,小項(xiàng)目規(guī)模小,對(duì)問題的理解比較容易,一般可以不進(jìn)行可行性研究。但對(duì)開發(fā)的軟件,先進(jìn)行分析制定計(jì)劃還是必要的。有的編程設(shè)計(jì)人員有一接受任務(wù)不制定計(jì)劃就著手開發(fā)的壞習(xí)慣,應(yīng)克服。又如在設(shè)計(jì)、編碼階段,由于一、二人進(jìn)行,對(duì)程序的復(fù)查工作帶來(lái)困難,開發(fā)者提供文檔資料,幫助復(fù)審人員更好地理解所開發(fā)的軟件是必要的。但是,小的軟件項(xiàng)目可以使用簡(jiǎn)化了的軟件工程方法進(jìn)行,對(duì)某些階段和文檔資料,根據(jù)具體情況進(jìn)行簡(jiǎn)化。對(duì)程序設(shè)計(jì)的一般過程可歸納為:

      1、分析任務(wù)、定義功能。對(duì)任務(wù)和給定的數(shù)據(jù)進(jìn)行分析,明確需要完成的功能和輸出的要求,概括地、明確地用文字整理成文。

      2、根據(jù)定義的功能,設(shè)計(jì)一個(gè)體現(xiàn)總?cè)蝿?wù)的“抽象程序”。

      3、將總?cè)蝿?wù)分解成若干子任務(wù),并對(duì)每個(gè)子任務(wù)進(jìn)行再分解,直到不能再分解為止。

      4、對(duì)每個(gè)子任務(wù)進(jìn)行算法和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),繪制N─S流程圖及進(jìn)行相應(yīng)的文字說明。

      5、選擇適當(dāng)?shù)某绦蛟O(shè)計(jì)語(yǔ)言和進(jìn)行結(jié)構(gòu)化編碼,并寫出使用說明。

      6、程序的測(cè)試和調(diào)試工作。

      三、程序設(shè)計(jì)的基本原則

      軟件工程的最終目標(biāo)是以較少的投資獲得具有可靠性、易修改、易理解和有效性的軟件產(chǎn)品。因而,進(jìn)行程序設(shè)計(jì)應(yīng)遵循如下基本原則:

      1、抽象與隱蔽

      由于人的能力所存在的固有的局限性,一般不可能一下子就能觸及到問題的全部細(xì)節(jié)。總是先從分析問題入手,抽取基本的性質(zhì)忽略非基本的細(xì)節(jié),提出一個(gè)總的抽象算法。將一些能影響系統(tǒng)的細(xì)節(jié)隱蔽起來(lái)成為不可訪問的,這是應(yīng)付復(fù)雜問題的重要手段。抽象只考慮應(yīng)“做什么”,“如何做”則隱蔽起來(lái)。

      抽象是有層次的,人們可在抽象的不同層次上認(rèn)識(shí)和處理問題。比如一個(gè)學(xué)校主要考慮要辦幾個(gè)系,系則關(guān)心的是本系要設(shè)幾個(gè)專業(yè),專業(yè)教研室則關(guān)心的是本專業(yè)的建設(shè)問題。人們就可利用抽象這一重要的屬性,實(shí)現(xiàn)對(duì)復(fù)雜問題的分解,使它簡(jiǎn)化。又如程序使用說明書,作為用戶和程序員的界面,用戶從中只看到程序可以“做什么”,看不到程序是“如何做”的技術(shù)細(xì)節(jié),這就簡(jiǎn)化了用戶應(yīng)掌握的內(nèi)容,而集中精力抓住問題的本質(zhì)。

      應(yīng)用抽象和隱蔽的原則,實(shí)現(xiàn)復(fù)雜問題的分解和不同功能軟件的疊加,從而改善了程序設(shè)計(jì)環(huán)境,使程序設(shè)計(jì)變得簡(jiǎn)單而方便。

      2、模塊和模塊化

      模塊和模塊化是對(duì)一個(gè)復(fù)雜問題的“分解”與“綜合”,是應(yīng)付復(fù)雜問題的重要手段。所謂分解,就是將一個(gè)總?cè)蝿?wù)分解成一系列相互聯(lián)系而又相對(duì)獨(dú)立的基本元素(子模塊);所謂綜合,是從總?cè)蝿?wù)的完整性和每個(gè)元素功能特征出發(fā),進(jìn)行綜合分析,以確定它們之間的聯(lián)系,形成整體結(jié)構(gòu)。

      模塊和模塊化的原則,直接支持了易修改性、可靠性和易理解性的目標(biāo)。

      3、反復(fù)與復(fù)審

      程序在開發(fā)過程不可能總是直線式進(jìn)行,在研制過程中,免不了要發(fā)生各種各樣的錯(cuò)誤,這些錯(cuò)誤往往要在后期才能發(fā)現(xiàn)。這就決定了程序的研制工作必然存在重復(fù)交錯(cuò)進(jìn)行的現(xiàn)象,各階段甚至要反復(fù)進(jìn)行幾次才能達(dá)到目的。

      復(fù)審制度的建立,是減少反復(fù)次數(shù)的保障措施。在研制過程的每一階段都應(yīng)堅(jiān)持復(fù)審。做到這點(diǎn),也是實(shí)現(xiàn)軟件工程目標(biāo)的有力保證。

      4、一致性和確定性

      一項(xiàng)稍大軟件的開發(fā)常由多人合作完成,研制過程做到統(tǒng)一化、規(guī)范化是開發(fā)成功的必要條件。一致性就是要求在步調(diào)上、命令方式、文檔格式做到一致,使開發(fā)工作走上規(guī)范化軌道。

      確定性也是保證軟件質(zhì)量的前提。它要求將人們的一些直覺變成明確的說明。比如將“軟件質(zhì)量要好”具體化成“正確可靠、易修改、易理解”;將用戶心目中想的“響應(yīng)時(shí)間很快”明確地表達(dá)成“響應(yīng)時(shí)間小于x秒”等都是確定性的體現(xiàn)。

      §2-3 結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)

      70年代,荷蘭著名計(jì)算機(jī)科學(xué)家Edsgar W.Dijkctra(迪克特拉)提出了結(jié)構(gòu)化程序設(shè)計(jì)的思想。結(jié)構(gòu)化程序設(shè)計(jì)規(guī)定:一個(gè)程序由“順序、選擇和循環(huán)(重復(fù))”三種基本結(jié)構(gòu)組成,要求結(jié)構(gòu)化程序設(shè)計(jì)的高級(jí)計(jì)算機(jī)語(yǔ)言中應(yīng)該具有直接實(shí)現(xiàn)這三種基本結(jié)構(gòu)的語(yǔ)句,而且要求程序?qū)崿F(xiàn)模塊化(即主程序和子程序分別屬于不同的模塊)。

      具有代表性的結(jié)構(gòu)化程序設(shè)計(jì)的計(jì)算機(jī)編程語(yǔ)言有: BASIC:True BASIC Quick BASIC Turbo BASIC C: Turbo C C++ PASCAL VB60也具有結(jié)構(gòu)化程序設(shè)計(jì)的計(jì)算機(jī)編程語(yǔ)言的功能。

      現(xiàn)在,已經(jīng)把程序“具有良好的結(jié)構(gòu),容易閱讀和理解”作為衡量程序質(zhì)量的首要條件。一個(gè)好的程序應(yīng)該具備以下條件:

      ①、運(yùn)行結(jié)果正確(這是最起碼的條件)。

      ②、有良好的結(jié)構(gòu),清楚易懂。

      ③、盡可能少的運(yùn)行時(shí)間。

      ④、運(yùn)行時(shí)所占內(nèi)存應(yīng)壓縮到合理的范圍之內(nèi)。

      也就是說,按照現(xiàn)在的標(biāo)準(zhǔn),易讀性好是第一位的,其次才是效率。因?yàn)閺母旧险f,只有程序具有良好的結(jié)構(gòu),才易于設(shè)計(jì)和維護(hù),減少軟件成本,從整體來(lái)說才是真正的效率。

      人們看程序總是從上往下看下去的,在程序中無(wú)限制地使用GOTO語(yǔ)句,跳轉(zhuǎn)太多,思路就亂了。像這樣的程序,如同一團(tuán)亂麻,使人無(wú)從下手。人們把這種程序稱作面條式程序(如同一碗面條,互相絞纏在一起),或稱BS型程序(BS是 a Bowl of Spaghetti的縮寫,意為“一碗面條”)。這種程序無(wú)任何規(guī)律而言,令人望而生畏。它造成程序設(shè)計(jì)和檢查程序時(shí)的困難,增加程序出錯(cuò)的可能,降低程序的質(zhì)量。

      為了提高程序的易讀性(容易理解),保證程序質(zhì)量,降低軟件成本,荷蘭學(xué)者迪克特拉等提出了“結(jié)構(gòu)化程序設(shè)計(jì)方法”的概念。它的要點(diǎn)是:

      1、程序的質(zhì)量標(biāo)準(zhǔn)是“清晰第一、效率第二”。

      2、要求程序設(shè)計(jì)者按一定規(guī)范書寫程序,而不能隨心所欲地設(shè)計(jì)程序。應(yīng)當(dāng)按照“工程化”生產(chǎn)方式來(lái)組織軟件生產(chǎn),每個(gè)人都必須按照同一規(guī)則、同一方法進(jìn)行工作,使生產(chǎn)的軟件有統(tǒng)一的標(biāo)準(zhǔn)、統(tǒng)一的風(fēng)格,成為“標(biāo)準(zhǔn)產(chǎn)品”,便于推廣,便于生產(chǎn)和維護(hù)。

      3、結(jié)構(gòu)化程序設(shè)計(jì)方法規(guī)定了三種具有良好特性的“基本結(jié)構(gòu)”(順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)),用它們作為構(gòu)成程序的基本單元,如同建筑房屋用的標(biāo)準(zhǔn)預(yù)制件一樣。每一種基本結(jié)構(gòu)完成一種類型的操作序列。由這些小單元順序組成一個(gè)大結(jié)構(gòu),這種結(jié)構(gòu)可以避免上述“任意轉(zhuǎn)向”的缺點(diǎn)。

      4、一個(gè)大程序開發(fā)應(yīng)當(dāng)采取“自頂向下、逐步細(xì)化和模塊化”的方法。即將一個(gè)大任務(wù)先分成若干個(gè)子任務(wù),每一個(gè)子任務(wù)就是一個(gè)模塊。如果某一個(gè)子任務(wù)還是太復(fù)雜,還可以再分解為若干子任務(wù),如此逐層分解。對(duì)每一個(gè)模塊的設(shè)計(jì)也是采取這種“自頂向下、逐步細(xì)化”的方法,直到將它分解為上述的基本結(jié)構(gòu)為止。這如同寫文章一樣,有人不訂提綱,想到哪里寫到哪里,而有人則先擬出總題目和中心內(nèi)容,再確定分為幾大部分,每一大部分又分為哪幾節(jié),每一節(jié)分為哪幾段,每一段包含哪些內(nèi)容。有了這樣通盤考慮的提綱后,文章的結(jié)構(gòu)一般來(lái)說是比較清楚的,考慮是周全的,不易發(fā)生遺漏。這就是“自頂向下、逐步細(xì)化”的方法。

      5、“具有良好特性的基本結(jié)構(gòu)”應(yīng)具有如下特點(diǎn):

      ①、只有一個(gè)入口。

      ②、只有一個(gè)出口。

      ③、無(wú)“死語(yǔ)句”(沒有永遠(yuǎn)執(zhí)行不到的語(yǔ)句)。也就是說,結(jié)構(gòu)中的每一部分都應(yīng)當(dāng)有執(zhí)行到的機(jī)會(huì),即每一部分都應(yīng)當(dāng)有一條從入口到出口的路徑通過它(至少通過一次)。

      ④、沒有“死循環(huán)”(“死循環(huán)”是指永遠(yuǎn)執(zhí)行不完的循環(huán),即無(wú)終止的循環(huán))。

      實(shí)踐證明:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是具有以上特點(diǎn)的良好結(jié)構(gòu)。

      結(jié)構(gòu)化程序要求每一基本結(jié)構(gòu)具有單入口和單出口的性質(zhì)是十分重要的。這是為了便于保證和驗(yàn)證程序的正確性。設(shè)計(jì)程序時(shí)一個(gè)結(jié)構(gòu)一個(gè)結(jié)構(gòu)地寫下來(lái),整個(gè)程序結(jié)構(gòu)如同一串珠子一樣次序清楚,層次分明。在修改程序時(shí),可以將某一基本結(jié)構(gòu)孤立出來(lái)進(jìn)行修改,在修改一個(gè)基本結(jié)構(gòu)時(shí),不會(huì)影響到其它基本結(jié)構(gòu)中的語(yǔ)句。

      由以上三種基本結(jié)構(gòu)所構(gòu)成的程序可以處理任何復(fù)雜的問題。一個(gè)結(jié)構(gòu)化程序是由具有以上特點(diǎn)的基本結(jié)構(gòu)組成的,反過來(lái)說,一個(gè)結(jié)構(gòu)化程序必定能分解為上述基本結(jié)構(gòu)。下面以VB6.0為例說明結(jié)構(gòu)化程序設(shè)計(jì)中的三種基本結(jié)構(gòu)。

      一、結(jié)構(gòu)化程序的基本控制結(jié)構(gòu)

      1、順序控制結(jié)構(gòu)

      順序控制結(jié)構(gòu)簡(jiǎn)稱順序結(jié)構(gòu)。它是程序中最經(jīng)常、最大量遇到的一種最簡(jiǎn)單、最基本的控制結(jié)構(gòu)。它將程序或程序段分成若干塊(一個(gè)語(yǔ)句或多個(gè)語(yǔ)句),各塊在結(jié)構(gòu)內(nèi)執(zhí)行的順序是按照它們出現(xiàn)的順序依次執(zhí)行,或者說,其邏輯順序和物理順序是一致的。順序控制的每一步執(zhí)行是建立在上一步執(zhí)行成功背道而馳基礎(chǔ)上的,本步的執(zhí)行要受到上一步的控制。結(jié)構(gòu)化程序正是利用這一性質(zhì),要求整個(gè)程序由若干控制邏輯結(jié)構(gòu)順序組成。

      在順序結(jié)構(gòu)處理塊內(nèi)的程序語(yǔ)句,允許是一個(gè)(組)自上至下依次執(zhí)行、不產(chǎn)生控制轉(zhuǎn)移的語(yǔ)句,也允許是一個(gè)調(diào)用子過程、子程序的語(yǔ)句 ── 因?yàn)樵谶@樣情況下整個(gè)控制流程仍可視為順序結(jié)構(gòu)。

      2、選擇控制結(jié)構(gòu)

      只用順序結(jié)構(gòu)能編寫一些簡(jiǎn)單的程序,以進(jìn)行簡(jiǎn)單的運(yùn)算。但是,人們對(duì)計(jì)算機(jī)運(yùn)算的要求并不是僅局限于一些簡(jiǎn)單的運(yùn)算,經(jīng)常會(huì)遇到要求計(jì)算機(jī)進(jìn)行邏輯判斷,即給出一個(gè)(或一組)條件,讓計(jì)算機(jī)判斷是否滿足該條件,并按不同的情況讓計(jì)算機(jī)進(jìn)行不同的處理。例如:

      ①、從鍵盤輸入一個(gè)數(shù),如果它是正數(shù),把它打印出來(lái),否則不打印;

      ②、將點(diǎn)位誤差超限的“點(diǎn)名”及其“點(diǎn)位誤差”打印出來(lái)(用于精度評(píng)定);

      ③、比較一組橫坐標(biāo),將其中數(shù)值最大與最小者打印出來(lái)(用于屏顯網(wǎng)形圖);

      ④、若一條邊的兩端點(diǎn)均為已知點(diǎn)(兩個(gè)判斷條件),用雙實(shí)線連接。

      選擇控制結(jié)構(gòu)簡(jiǎn)稱選擇結(jié)構(gòu)或分支結(jié)構(gòu)。它是根據(jù)給定的一個(gè)或一組條件經(jīng)過分析、比較、判斷后,決定按不同情況進(jìn)行不同的處理(選擇執(zhí)行某一個(gè)或某一組語(yǔ)句)。

      選擇結(jié)構(gòu)的表達(dá)式分為關(guān)系表達(dá)式(六種關(guān)系運(yùn)算符)和邏輯表達(dá)式(六種邏輯表達(dá)式)。

      在VB6.0中實(shí)現(xiàn)選擇結(jié)構(gòu)的語(yǔ)句有條件語(yǔ)句(IF...THEN...ELSEIF...ELSE...END IF)、情況語(yǔ)句(SELECT CASE...CASE...END SELECT)。關(guān)系表達(dá)式和邏輯表達(dá)式只是上述各語(yǔ)句實(shí)際應(yīng)用中的語(yǔ)句體。

      3、循環(huán)(重復(fù))控制結(jié)構(gòu)

      在實(shí)際應(yīng)用中,經(jīng)常遇到一些操作并不復(fù)雜,但需要反復(fù)多次處理的問題,例如多條邊坐標(biāo)方位角的推算,多個(gè)點(diǎn)坐標(biāo)的計(jì)算等,這都將用到循環(huán)控制結(jié)構(gòu)。

      VB6.0中循環(huán)控制結(jié)構(gòu)的語(yǔ)句有三種不同風(fēng)格的循環(huán)語(yǔ)句:計(jì)數(shù)循環(huán)(FOR...TO...STEP...NEXT)、當(dāng)循環(huán)(WHILE...WEND)、DO循環(huán)(DO...LOOP)。

      二、結(jié)構(gòu)化程序的特點(diǎn)

      所謂結(jié)構(gòu)化程序,就是由上面介紹的三種基本控制結(jié)構(gòu)所組成的程序。反之,任何結(jié)構(gòu)化的程序應(yīng)該是可以分解成上述三種基本控制結(jié)構(gòu)。否則,就不是一個(gè)結(jié)構(gòu)化程序。因此,一個(gè)結(jié)構(gòu)化程序的結(jié)構(gòu)應(yīng)具備如下特點(diǎn):

      1、程序由基本控制結(jié)構(gòu)組成。

      2、程序中的各個(gè)基本控制結(jié)構(gòu)都只有一個(gè)入口和一個(gè)出口。

      3、通過結(jié)構(gòu)的任一部分,都應(yīng)存在一條從入口到出口的路徑,即在結(jié)構(gòu)中每一部分都存在被執(zhí)行的機(jī)會(huì)。

      各個(gè)基本控制結(jié)構(gòu)只有一個(gè)入口和一個(gè)出口是十分重要的。做到這點(diǎn)可保持各結(jié)構(gòu)間有簡(jiǎn)單的接口關(guān)系,從而達(dá)到相對(duì)獨(dú)立地設(shè)計(jì)各個(gè)子結(jié)構(gòu),靜態(tài)地分析控制關(guān)系,并驗(yàn)證它的正確性。比如某一個(gè)子結(jié)構(gòu)需要修改,只要接口關(guān)系不變,就不會(huì)影響其它子結(jié)構(gòu)和整個(gè)程序。

      三、結(jié)構(gòu)化程序的實(shí)現(xiàn)

      ㈠、實(shí)現(xiàn)結(jié)構(gòu)化程序采用的技術(shù)

      1、自頂向下逐步求精技術(shù)

      這是結(jié)構(gòu)化程序設(shè)計(jì)中的一種基本方法,它的要點(diǎn)是:

      ①、對(duì)問題作全局性分析,以確定數(shù)學(xué)模型。

      ②、用分解技術(shù)將問題分成若干相對(duì)獨(dú)立的子塊,確定各子塊的相互關(guān)系。

      ③、對(duì)各子塊逐一精細(xì)化,直到能用程序設(shè)計(jì)語(yǔ)言直接描述。

      這項(xiàng)技術(shù)符合人們先整體后細(xì)節(jié)、先全局后局部、先抽象后具體的思維活動(dòng)規(guī)律。堅(jiān)持采用這一技術(shù),容易達(dá)到程序結(jié)構(gòu)清晰、易讀、易修改的要求,從而提高程序的正確性。

      2、模塊化技術(shù)

      模塊化程序設(shè)計(jì)技術(shù),是將求解的任務(wù)劃分成幾個(gè)功能相對(duì)獨(dú)立的子任務(wù)。對(duì)每個(gè)子任務(wù)要求意義單

      一、職責(zé)明確,各子任務(wù)間的聯(lián)系簡(jiǎn)明。對(duì)每個(gè)子任務(wù)稱為子模塊。每個(gè)子任務(wù)還可按照逐步求精技術(shù),繼續(xù)劃分為更小的任務(wù),形成具有層次結(jié)構(gòu)的整體,如圖2-1所示。

      圖2-1 層次結(jié)構(gòu)圖

      3、結(jié)構(gòu)化的編碼技術(shù)

      結(jié)構(gòu)化編碼技術(shù)要求對(duì)程序的所有處理及程序的控制邏輯,僅由三種基本控制結(jié)構(gòu)描述;所選用的控制結(jié)構(gòu)應(yīng)做到只有一個(gè)入口和一個(gè)出口;對(duì)復(fù)雜的程序結(jié)構(gòu)僅用嵌套的三種基本控制結(jié)構(gòu)實(shí)現(xiàn);當(dāng)選用的程序設(shè)計(jì)語(yǔ)言沒有和基本控制結(jié)構(gòu)相應(yīng)的語(yǔ)句結(jié)構(gòu)時(shí),應(yīng)采用前后一致的方法來(lái)模擬實(shí)現(xiàn)。

      結(jié)構(gòu)化編碼嚴(yán)格限制GOTO語(yǔ)句的使用。因?yàn)?,過多地使用GOTO語(yǔ)句會(huì)破壞程序的層次結(jié)構(gòu),使程序的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)執(zhí)行路徑差異較大,最終導(dǎo)致程序質(zhì)量的下降。

      4、限制變量的作用域

      變量的作用域指的是變量的可見性或有效性。在VB6.0程序中,根據(jù)變量的定義方式,可以分為兩類,即局部變量和全局變量。其中局部變量只在程序的某一部分有效,而全局變量可用于子程序的每個(gè)部分。

      限制變量的作用域,有利于更好地保障程序模塊具有相對(duì)獨(dú)立性,不致于干擾其它模塊,保障程序的模塊化編碼。

      ㈡、子程序(過程)

      在結(jié)構(gòu)化程序設(shè)計(jì)中,子程序是常用的技術(shù)?,F(xiàn)簡(jiǎn)要介紹如下。

      1、子程序的概念

      在設(shè)計(jì)較復(fù)雜的程序時(shí),通常應(yīng)根據(jù)程序需要實(shí)現(xiàn)的主要功能,劃分為若干個(gè)相對(duì)獨(dú)立的部分,其中每個(gè)部分都可以編寫出一段程序,習(xí)慣上,把這樣的一段程序稱為子程序。顧名思義,子程序是整個(gè)程序的一部分,它是執(zhí)行一個(gè)特定任務(wù)的程序塊。

      定義子程序后,就可以在程序的其它地方調(diào)用它。調(diào)用程序與被調(diào)用的子程序之間的信息交換通過參數(shù)的傳送來(lái)實(shí)現(xiàn)。

      一般來(lái)說,子程序是在程序的若干處都需要執(zhí)行的相同的代碼,使用子程序可以達(dá)到縮短程序長(zhǎng)度和減少占用內(nèi)存空間的目的。

      在VB6.0 中,通常把子程序稱為過程。其過程一般分為兩類,即子程序過程和函數(shù)過 13

      程,前者叫做SUB過程,后者叫做FUNCTION過程。

      使用過程編寫程序,主要有以下兩個(gè)優(yōu)點(diǎn):

      ①、便于調(diào)試。用過程可以把程序劃分為若干個(gè)獨(dú)立的邏輯單元,調(diào)試一個(gè)過程比調(diào)試整個(gè)程序要容易得多。

      ②、節(jié)省代碼。將一個(gè)程序中的某個(gè)子功能用一個(gè)過程來(lái)編寫,可被整個(gè)程序的任何位置所調(diào)用,這樣,便可節(jié)省整個(gè)程序的代碼總量;而且,這樣具有相對(duì)獨(dú)立功能的過程,通常不需要修改或進(jìn)行很小的修改,就能用于其它程序中。

      2、子程序的結(jié)構(gòu)與調(diào)用方法

      一般地,SUB過程用CALL來(lái)調(diào)用;FUNCTION 過程可像函數(shù)一樣直接調(diào)用。

      四、結(jié)構(gòu)化程序設(shè)計(jì)的基本特征

      結(jié)構(gòu)化程序設(shè)計(jì)具有如下基本特征:

      1、用系統(tǒng)工程觀點(diǎn)把一個(gè)程序視為一個(gè)大系統(tǒng)。

      2、將大系統(tǒng)運(yùn)用“自頂向下、逐步求精”的方法,進(jìn)行程序開發(fā)。

      3、用模塊化的設(shè)計(jì)方法,使一個(gè)模塊完成一項(xiàng)子功能。

      4、結(jié)構(gòu)化程序中的每一個(gè)模塊都是由基本控制邏輯結(jié)構(gòu)(或相互嵌套)順序地組成,且各控制結(jié)構(gòu)只有一個(gè)入口和一個(gè)出口。

      5、結(jié)構(gòu)化程序只能有限制地使用GOTO語(yǔ)句。

      6、在結(jié)構(gòu)化程序內(nèi)部,應(yīng)適當(dāng)?shù)厥褂贸绦蚬δ茏⑨專≧EM 語(yǔ)句),以提高程序的可讀性。

      利用VB6.0編程時(shí),在每一個(gè)窗體模塊或標(biāo)準(zhǔn)模塊內(nèi)由程序員編寫的程序代碼,即是一個(gè)相對(duì)完整的結(jié)構(gòu)化程序;它調(diào)用的子過程允許不在同一個(gè)模塊內(nèi)。

      §2-4 面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)

      一、OOP(Object Oriented Programming)概述

      程序包含兩類基本的元素,即數(shù)據(jù)和操作數(shù)據(jù)的指令集(稱為代碼)。傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言以設(shè)計(jì)代碼為核心,程序設(shè)計(jì)實(shí)際上就是指定程序指令的先后次序,數(shù)據(jù)表示必須適應(yīng)代碼的設(shè)計(jì)。模塊化程序設(shè)計(jì)方法將完成某一功能的指令集組成一個(gè)相對(duì)獨(dú)立的程序模塊(即函數(shù)或過程),使得程序的結(jié)構(gòu)清晰,便于有效地維護(hù),對(duì)程序設(shè)計(jì)技術(shù)有很大的促進(jìn)。但由于結(jié)構(gòu)化程序設(shè)計(jì)方法并不能保證各程序模塊之間真正的相互獨(dú)立,程序設(shè)計(jì)者在設(shè)計(jì)一個(gè)模塊時(shí)很難完全排除其它模塊的影響。隨著程序規(guī)模的增大,各模塊之間的相互影響導(dǎo)致了一些難于測(cè)試、難于定位發(fā)現(xiàn)的錯(cuò)誤,增加了程序開發(fā)和維護(hù)的困難。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法就是在這種背景下出現(xiàn)和發(fā)展起來(lái)的。

      面向?qū)ο蟮某绦蛟O(shè)計(jì)方法主要以數(shù)據(jù)為中心,代碼是圍繞著需要處理的數(shù)據(jù)而設(shè)計(jì)的。

      OOP ── 面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種比較先進(jìn)的程序設(shè)計(jì)方法。

      作為Windows環(huán)境下的軟件開發(fā)工具語(yǔ)言,VB所采用的一個(gè)關(guān)鍵技術(shù)是面向?qū)ο缶幊蹋?jiǎn)稱OOP??梢詫?duì)象看作變量,與通常變量不同的是,真正的面向?qū)ο缶幊痰膶?duì)象不僅具有特征屬性(變量),同時(shí)具有行為方法(函數(shù))。一個(gè)對(duì)象知道如何管理自己,例如可能使 14

      自己初始化,打印或完成其它任務(wù)。特別是對(duì)象可以響應(yīng)外界觸發(fā)的事件。編寫面向?qū)ο蟮某绦驎r(shí),程序員并不關(guān)心所使用的對(duì)象實(shí)際如何工作,而只需知道對(duì)象的行為。一旦消除了對(duì)象中那些令人乏味的細(xì)節(jié),程序員即可集中精力于所需功能的編程,即編寫應(yīng)用程序中無(wú)法替代的部分。另外,可以在程序中重復(fù)使用對(duì)象。

      在VB中,窗體、控件即為具有屬性、方法并可響應(yīng)事件的對(duì)象。通過改變控件的屬性,控制其外觀和行為。例如,通過改變文本框的字體和顏色屬性,可以知道(確定)如何顯示其中的文本。方法是控件本身所固有的程序,例如選中文本框后,當(dāng)在鍵盤上按下一個(gè)鍵時(shí),這個(gè)鍵所代表的字符將在文本框編輯區(qū)內(nèi)以特定格式顯示。此外,每個(gè)控件還可識(shí)別特定的事件。大多數(shù)控件知道鼠標(biāo)是否移動(dòng)到其上,是單擊,單擊的是左鍵還是右鍵。而對(duì)于大多數(shù)控件,都可以編寫一段對(duì)應(yīng)的程序。當(dāng)事件發(fā)生時(shí),程序執(zhí)行,從而完成所需的功能。

      二、幾個(gè)術(shù)語(yǔ)

      1、對(duì)象(Object)

      對(duì)象是OOP程序的基本單元,其屬性給出其特征,其方法指定實(shí)現(xiàn)的任務(wù)。對(duì)象還可響應(yīng)并識(shí)別事件。

      2、控件(Control)對(duì)于VB而言,控件是可重復(fù)使用的對(duì)象,如文本框、按鈕等??丶糜跇?gòu)成程序的可視化界面。

      3、事件(Event)事件是用戶或操作系統(tǒng)執(zhí)行的操作,如通過鍵盤輸入一個(gè)字符、單擊、等待超時(shí)等。

      4、方法(Method)方法是指對(duì)象固有的程序代碼。

      5、過程(Procedure)過程是用于實(shí)現(xiàn)一項(xiàng)功能的一段程序代碼,通常用于響應(yīng)一個(gè)事件。

      6、屬性(Properties)屬性是對(duì)象的特征,如位置、尺寸、顏色、字符等。屬性給出對(duì)象的外觀,有時(shí)也用于確定目標(biāo)的行為,也可用于輸入數(shù)據(jù)給對(duì)象或從對(duì)象中獲得數(shù)據(jù)。

      三、VB6.0特點(diǎn)

      VB6.0最大特點(diǎn)是大大簡(jiǎn)化了Windows應(yīng)用程序的開發(fā),是設(shè)計(jì)Windows應(yīng)用程序的極好工具。VB6.0與當(dāng)前各種BASIC語(yǔ)言在設(shè)計(jì)思想上有許多相似之處,對(duì)于已經(jīng)掌握或熟悉其它版本BASIC語(yǔ)言的用戶,可很快掌握VB6.0語(yǔ)言。VB6.0繼承了BASIC語(yǔ)言的優(yōu)點(diǎn),同時(shí)又增加了圖形用戶界面,使得用戶只需記住很少的命令即可使用。VB6.0中的“Visual”直譯為“可視化”,是指為開發(fā)圖形用戶界面,不需要編寫大量的程序代碼,而只需用鼠標(biāo)拖放窗口和控件,設(shè)置其大小、位置和屬性等。

      使用VB6.0設(shè)計(jì)Windows應(yīng)用程序的最大方便之處是在設(shè)計(jì)階段即可創(chuàng)建用戶界面,從一個(gè)窗體開始,在其上添加所需的菜單和控件等;然后,編程,連接代碼與對(duì)象,即可完成一個(gè)應(yīng)用程序的設(shè)計(jì)。步驟如下:

      1、創(chuàng)建窗體。

      2、為每個(gè)窗體選擇控件。

      3、為主窗體設(shè)計(jì)菜單。

      4、設(shè)計(jì)控件和窗體的屬性。

      5、定義事件和編寫通用過程。

      6、調(diào)試。

      四、VB6.0快捷鍵

      1、剪切(T)Ctrl+X

      2、復(fù)制(C)Ctrl+C

      3、粘貼(P)Ctrl+V

      4、撤消(Z)Ctrl+Z

      5、查找(F)Ctrl+F

      6、打開(O)Ctrl+O

      7、保存(S)Ctrl+S

      §2-5 編程風(fēng)格問題

      為了使程序代碼易于維護(hù),在編寫程序時(shí)應(yīng)遵循一定的公認(rèn)準(zhǔn)則。

      1、重要的程序行一般要頂格寫,即該行前面不要留空格。例如,注釋行。

      2、語(yǔ)句縮進(jìn)準(zhǔn)則:書寫程序應(yīng)采用縮進(jìn)格式,這是為了層次分明、結(jié)構(gòu)清晰,便于閱讀、修改,像一篇文章分段書寫一樣。

      雖然沒有任何一種計(jì)算機(jī)編程語(yǔ)言強(qiáng)制要求使用縮進(jìn)準(zhǔn)則,但在實(shí)際編程中,幾乎每一個(gè)程序員都使用縮進(jìn)來(lái)增強(qiáng)代碼的可讀性。使用縮進(jìn)的方式是千差萬(wàn)別的,例如VB中可使用該語(yǔ)言系統(tǒng)所提供的Tab鍵縮進(jìn)格式,當(dāng)然也可使用SPACE鍵(空格鍵)靈活縮進(jìn)。

      3、注釋:雖然不要求對(duì)每行語(yǔ)句都進(jìn)行注釋,但最好對(duì)每一源文件、每個(gè)函數(shù)、每一特殊操作語(yǔ)句(或語(yǔ)句段)、重要變量等都能有注釋,以說明文件、函數(shù)、語(yǔ)句或變量等的用途和意義。

      VB中所提供的注釋語(yǔ)句是:REM......或'(撇號(hào))。

      對(duì)源文件的總體注釋應(yīng)放在文件(程序)的最前面,一般包括如下幾部分:

      ①、文件名

      ②、文件功能、用途

      ③、創(chuàng)建時(shí)間

      ④、作者

      ⑤、修改時(shí)間

      ⑥、修改的目的

      ⑦、修改人

      4、源文件設(shè)置:主程序盡量簡(jiǎn)明,起到“總調(diào)度”的功能;將各子任務(wù)盡可能地分解,分別用過程(SUB或FUNCTION過程)處理;嚴(yán)格控制使用GOTO語(yǔ)句,以免破壞程序的模塊化結(jié)構(gòu)。

      5、命名準(zhǔn)則:編寫代碼時(shí)如何給常量、變量和函數(shù)取名將在很大程度上影響代碼的可讀性,好的命名方式,可減少編寫代碼的筆誤和提高代碼的維護(hù)效率。一般的命名準(zhǔn)則包括:

      ①、使用能描述常量、變量和過程的意義或用途的詞命名。

      ②、具有相似特征或意義的一組常量、變量和過程的名稱,可分成兩部分來(lái)表示:第一部分的名稱相同,第二部分的名稱不同,這兩部分之間用下劃線連接。

      6、作用域問題:在設(shè)置變量時(shí),應(yīng)盡量少用全局變量及占用字節(jié)多的變量,例如雙精度變量、長(zhǎng)整型變量等;盡量通過使用過程參數(shù)來(lái)傳遞數(shù)據(jù)。

      7、針對(duì)具體問題,不要先把注意力放在某一種語(yǔ)言如何使用上,而應(yīng)先把注意力放在 16

      程序設(shè)計(jì)的思路和方法上,即應(yīng)先考慮解決具體問題的程序設(shè)計(jì)的思路和方法,然后再考慮用某一種語(yǔ)言的什么語(yǔ)句、函數(shù)、命令等解決它。

      8、風(fēng)格前后一致準(zhǔn)則:在編寫代碼時(shí),應(yīng)注意保持所使用的編碼風(fēng)格的前后一致性。

      作為計(jì)算機(jī)應(yīng)用人員,應(yīng)當(dāng)建立程序設(shè)計(jì)的概念。程序設(shè)計(jì)是一個(gè)計(jì)算機(jī)應(yīng)用人員應(yīng)具有的基本功。無(wú)論是在學(xué)校學(xué)習(xí)期間或者是在實(shí)際工作中,一個(gè)優(yōu)秀的工程技術(shù)人員,應(yīng)當(dāng)把程序設(shè)計(jì)作為一項(xiàng)基本訓(xùn)練。只有懂得程序設(shè)計(jì),才能真正理解計(jì)算機(jī)是如何進(jìn)行工作的,才能在工程實(shí)踐中利用計(jì)算機(jī)編程有效地解決一些問題。

      第二篇:公開課 VB程序設(shè)計(jì)教案

      第四課 學(xué)學(xué)程序設(shè)計(jì)—初步認(rèn)識(shí)編程軟件VB 教學(xué)目標(biāo):

      知識(shí)目標(biāo):了解什么是程序設(shè)計(jì)語(yǔ)言和計(jì)算機(jī)程序以及語(yǔ)言的分類

      過程與方法:培養(yǎng)學(xué)生的閱讀總結(jié)和自主探索能力

      情感態(tài)度與價(jià)值觀:通過學(xué)生利用所學(xué)的知識(shí)解決實(shí)際問題,激

      發(fā)學(xué)生的學(xué)習(xí)興趣

      教學(xué)重難點(diǎn):了解什么是程序設(shè)計(jì)語(yǔ)言

      啟發(fā)學(xué)生創(chuàng)新思維

      以任務(wù)為驅(qū)動(dòng),激發(fā)學(xué)生創(chuàng)新思維 教法:講授法、任務(wù)驅(qū)動(dòng)法 教學(xué)過程:

      一、導(dǎo)入新課

      教師運(yùn)行游戲小程序,引起學(xué)生的興趣,并打開程序的原代碼說明編程并不很神秘。試運(yùn)行游戲小程序,激發(fā)學(xué)生的學(xué)習(xí)興趣。

      二、教師講授: 程序設(shè)計(jì)語(yǔ)言

      教師活動(dòng):語(yǔ)言是人類交流思想、溝通感情最重要的工具。那么語(yǔ)言不通的人如何交流呢?

      學(xué)生活動(dòng):請(qǐng)一個(gè)語(yǔ)言翻譯或自己學(xué)會(huì)他人的語(yǔ)言

      教師活動(dòng):計(jì)算機(jī)所做的事情均為人向機(jī)器下達(dá)的命令,那么操作作者又是通過什么語(yǔ)言同計(jì)算機(jī)進(jìn)行溝通的呢? 程序設(shè)計(jì)語(yǔ)言的分類及特點(diǎn)

      1、機(jī)器語(yǔ)言

      教師活動(dòng):①計(jì)算機(jī)能聽懂的語(yǔ)言(機(jī)器語(yǔ)言)②機(jī)器語(yǔ)言的實(shí)質(zhì)(二進(jìn)制語(yǔ)言)③二進(jìn)制語(yǔ)言的特點(diǎn)。強(qiáng)調(diào)計(jì)算機(jī)內(nèi)部只認(rèn)識(shí)二進(jìn)制

      學(xué)生活動(dòng):談對(duì)二進(jìn)制語(yǔ)言的感受

      教師小結(jié):機(jī)器語(yǔ)言的特點(diǎn)(二進(jìn)制、計(jì)算機(jī)直接能懂、難以理解,與人類語(yǔ)言差距較大)匯編語(yǔ)言-用助記符號(hào)表示面向機(jī)器的程序設(shè)計(jì)語(yǔ)言。使用匯編語(yǔ)言編寫的程序,機(jī)器不能直接識(shí)別,要由一種程雪匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言。適合編寫直接控制機(jī)器操作的程序,不容易使用。高級(jí)語(yǔ)言-最接近人的自然語(yǔ)言,即簡(jiǎn)單易學(xué),它所編制的程序計(jì)算機(jī)執(zhí)行時(shí)需要“翻譯”,執(zhí)行速度比二進(jìn)制程序慢。三:展示微課視頻

      VB簡(jiǎn)介、認(rèn)識(shí)VB窗口、相關(guān)概念:

      1、對(duì)象的概念

      2、屬性的概念

      3、事件和代碼的概念。演示設(shè)計(jì)運(yùn)行程序“奔跑的小汽車”依照微課演示編寫程序“奔跑的小汽車” 四:學(xué)生體驗(yàn)

      1、學(xué)生編寫程序“奔跑的小汽車”,教師巡回指導(dǎo)。

      2、試修改程序,讓汽車倒車、速度變慢。

      五、教學(xué)評(píng)價(jià):

      1、教師點(diǎn)評(píng)教師通過巡視,把部分學(xué)生修改的結(jié)果進(jìn)行點(diǎn)評(píng),指出典型的錯(cuò)誤。

      六、課后小結(jié):

      這節(jié)課,我們體驗(yàn)了用VB設(shè)計(jì)程序,了解程序有關(guān)知識(shí)。(回顧本節(jié)知識(shí))希望同學(xué)們繼續(xù)努力。

      第三篇:程序設(shè)計(jì)教案VB版第三章

      第三章

      矩陣的基本計(jì)算程序設(shè)計(jì)方法

      §3-1 行列式的性質(zhì)(參見文獻(xiàn)[39]P91)

      矩陣的基本計(jì)算用到了行列式的內(nèi)容。行列式通常用記號(hào)A或detA表示,det的英文單詞是:determinant。為后面討論矩陣計(jì)算時(shí)方便,下面先敘述行列式的十個(gè)主要性質(zhì)。

      1、把行列式的行變?yōu)橥?hào)數(shù)的列,行列式的值不變。即一個(gè)行列式與它的轉(zhuǎn)置行列式的值相等。

      2、對(duì)調(diào)行列式的兩行(或兩列),行列式的符號(hào)改變,但絕對(duì)值不變。

      3、有兩行(或兩列)相同的行列式的值必等于零。

      4、行列式等于它任意一行(或一列)的各元素與對(duì)應(yīng)于它們的代數(shù)余子式的乘積的和。

      5、行列式某一行(或某一列)的各元素與另一行(或另一列)對(duì)應(yīng)元素的代數(shù)余子式的乘積的和恒等于零。

      6、行列式的某一行(或某一列)的各元素如果有公因子,這公因子可以提到行列式記號(hào)的外面去。

      7、如果行列式的某一行(或某一列)的各元素都等于零,則此行列式等于零。

      8、如果行列式的第i行(或第i列)的各元素是兩個(gè)加數(shù)的和,則此行列式可表示為兩個(gè)行列式的和,其中一個(gè)行列式的第i行(或第i列)的各元素是上述的一個(gè)加數(shù),而另一個(gè)行列式的第i行(或第i列)的各元素是另一個(gè)加數(shù);在這三個(gè)行列式中,其余的各元素完全相同。

      9、如果行列式的兩行(或兩列)的對(duì)應(yīng)元素成比例,則此行列式等于零。

      10、把行列式的某一行(或某一列)所有的元素同乘以一個(gè)數(shù)后,加于另一行(或另一列)的各對(duì)應(yīng)元素上,行列式的值不變。

      §3-2 矩陣基本計(jì)算的程序設(shè)計(jì)原理

      矩陣的基本計(jì)算包括:矩陣的初等變換(行變換或列變換),矩陣的加、減法,矩陣的轉(zhuǎn)置,矩陣乘法的定義及計(jì)算方法、代數(shù)余子式的定義及計(jì)算方法、按照定義式進(jìn)行矩陣求逆等的編程方法。矩陣的英文單詞是matrix。

      一、矩陣的基本概念

      設(shè)有一個(gè)線性方程組,例如測(cè)量平差中的條件方程: ?a1v1?a2v2????anvn?wa?0??b1v1?b2v2????bnvn?wb?0 ?

      ????????????????rv?rv????rv?w?022nnr?11等式的左邊由三部分組成,即n個(gè)改正數(shù)vi,r個(gè)改正數(shù)的系數(shù),r個(gè)閉合差?,F(xiàn)在我們將這三種成份按原來(lái)排列的次序抽出來(lái),分別組成下面三個(gè)表:

      ?a1??b1????r?1a2b2?r2????????an??bn?,?v1???rn???wa??wbvn?,????w?r???? ???v2? 18 這種由一組數(shù)排列成矩形的表,就稱為矩陣。表中的數(shù)稱為矩陣的元素。在第一個(gè)表中有r行n列元素,該表稱為r?n階矩陣;第二個(gè)表只有一行n列元素,稱為1?n階矩陣,或稱行矩陣;第三表有r行一列元素,稱為r?1階矩陣,或稱列矩陣。

      一般地,設(shè)有m?n個(gè)元素排成矩形的表: ?a11??a21 A?????a?m1a12a22?am2????????a1n??a2n? ???amn??稱A為m行n列矩陣,aij稱為矩陣A的元素。m行n列矩陣記為m?n階矩陣。

      二、常見的特殊矩陣

      1、方陣

      當(dāng)m?n時(shí),矩陣A稱為n階矩陣,或稱n階方陣。方陣A中的元素a11,a22,?,ann稱為矩陣A的對(duì)角線元素。例如條件平差中法方程組的系數(shù)陣,即為方陣。

      2、零矩陣

      如果某一個(gè)矩陣的元素全為零,則稱為零矩陣,記為O。測(cè)量平差中常見的零矩陣是r?1階零矩陣,一般也用O表示。即:

      ?0????0? O???

      ????0???

      3、對(duì)角陣

      如果一個(gè)n階方陣除對(duì)角線元素外,其余元素全為零,則稱其為對(duì)角陣,即: ?a11??0 A?????0?0a22?0????????0??0? ???ann??

      4、單位矩陣

      對(duì)于對(duì)角陣A,當(dāng)主對(duì)角線元素全為1時(shí),即:a11?a22??ann?1,則稱其為單位矩陣,簡(jiǎn)稱單位陣,也稱為幺陣,一般用E表示,也有用I表示的。

      5、上三角矩陣

      對(duì)于n階方陣A,如果當(dāng)i?j時(shí),aij均為零,則稱該矩陣為上三角矩陣。即: ?a11??0A? ????0?a12a22?0????????a1n??a2n? ???ann??

      6、下三角矩陣

      對(duì)于n階方陣A,如果當(dāng)i?j時(shí),aij均為零,則稱該矩陣為下三角矩陣。即: ?a11??a21 A?????a?n10a22?an2????????0??0? ???ann??

      7、行矩陣

      對(duì)于m?n階矩陣,若m?1時(shí),則稱其為行矩陣,也稱為行向量。即:

      A??a11

      8、列矩陣

      對(duì)于m?n階矩陣,若n?1時(shí),則稱其為列矩陣,也稱為列向量。即: ?a11???a?21? A??

      ?????a??m1?a12?a1n?

      9、對(duì)稱方陣

      對(duì)于n階方陣A: ?a11??a21A? ????a?n1a12a22?an2????????a1n??a2n? ???ann???ann兩側(cè)的元素對(duì)稱相等,若主對(duì)角線元素a11,a22,即aij?aji,則稱A為n階對(duì)稱方陣。

      三、矩陣的基本計(jì)算

      矩陣和行列式有本質(zhì)的區(qū)別,屬于兩個(gè)不同的概念。行列式本身代表一個(gè)數(shù),而矩陣僅僅是一組數(shù)排列成的表,它只說明表中各元素的排列位置,但矩陣的整體可以參與運(yùn)算。下面介紹矩陣的基本計(jì)算規(guī)則。

      ㈠、矩陣的相等

      設(shè)有兩個(gè)同階矩陣A?(aij)和B?(bij),如果它們的對(duì)應(yīng)元素相等,即:aij?bij,則矩陣A和B稱為相等。

      ㈡、矩陣的加、減法

      1、如果矩陣A?(aij)和B?(bij)是同階矩陣,則矩陣A與B是可加減的。將兩個(gè)同階矩陣中對(duì)應(yīng)元素求和差,稱為矩陣的加減法。即: ?a11?b11??a21?b21 A?B??????a?bm1?m1a12?b12a22?b22??am2?bm2????????a1n?b1n??a2n?b2n? ????amn?bmn?? 20 若令aij?bij?cij,C?(cij),則矩陣:

      C?A?B

      可見矩陣C必與A、B同階。

      2、一個(gè)常數(shù)與一個(gè)矩陣相乘的定義及計(jì)算方法

      常數(shù)?與某矩陣A相乘所得之矩陣B,其元素就是常數(shù)?與矩陣A中各個(gè)元素之乘積。即:

      ???a11????a21 B???A?A?????????am1???a12??a22???????????a1n???a2n???am2??amn??? ???

      3、矩陣加減法運(yùn)算的基本性質(zhì)

      ⑴、可結(jié)合性:A?(B?C)?(A?B)?C ⑵、可交換性:A?B?B?A

      ⑶、A?O?A(式中O為與A同階的零矩陣)

      ⑷、(???)A???A???A(式中A為矩陣,?、?是常數(shù))⑸、?(A?B)???A???B(式中A、B為矩陣,?是常數(shù))

      ㈢、矩陣的轉(zhuǎn)置

      1、設(shè)A是m?n階矩陣,將A的行與列依次對(duì)換,得n?m階矩陣,稱為A的轉(zhuǎn)置矩陣,并記為A?,或記為AT。即: ?a11??a21 A?????a?m1a12a22?am2????????a1n??a11??a2n??a12TA? ????????aamn??1na21a22?a2n????????am1??am2? ???anm??

      2、轉(zhuǎn)置矩陣的性質(zhì)

      ⑴、將矩陣進(jìn)行兩次轉(zhuǎn)置即得原矩陣,即:(A)⑵、(A?B)⑶、(??A)TTTTT?A。

      ?ATT?B

      TTT???A(式中A為矩陣,?是常數(shù))

      ⑷、(A?B)?B?A

      ⑸、對(duì)角陣的轉(zhuǎn)置矩陣,仍為對(duì)角陣,且與原對(duì)角陣相等。⑹、若AT?A,則A為對(duì)稱矩陣。

      ㈣、矩陣相乘的定義及計(jì)算方法

      1、兩個(gè)矩陣相乘的定義及計(jì)算方法 設(shè)矩陣A的列數(shù)等于矩陣B的行數(shù): ?a11??a21A?????a?m1a12a22?am2????????a1p??b11??a2p??b21B? ????????bamp??p1c1n??c2n? ???cmn??b12b22?bp2????????b1n??b2n? ???bpn??又設(shè)矩陣:

      ?c11??c21 C?????c?m1pc12c22?cm2????????這里cij??ak?1ik,將C稱為?bkj(i?1,2,?,m;j?1,2,?,n;1?i?m;1?j?n)矩陣A與B的乘積,記作C?AB。

      2、矩陣乘積的性質(zhì)

      ⑴、注意,一般地,AB?BA,即矩陣的乘法一般不滿足交換律。

      ⑵、矩陣乘法的結(jié)合律是成立的,即:(AB)C?A(BC)或(??A)B??(AB)。⑶、矩陣乘法的分配律是成立的,即:A(B?C)?AB?AC或(A?B)C?AC?BC。⑷、若A是n階矩陣,E是n階單位矩陣,則有:AE?EA?A。

      ㈤、代數(shù)余子式的定義及計(jì)算方法

      在某階行列式中,劃去aij所在的行和列的元素,余下的元素構(gòu)成一個(gè)降階行列式,它與(?1)i?j的乘積叫做aij的代數(shù)余子式,記作Aij。例如:

      a11a12a22a322?3a13a23中a23的代數(shù)余子式為: a33行列式a21a31A23?(?1)a11a31a12a32??a11a31a12a32

      ㈥、按照定義式進(jìn)行矩陣求逆的一種編程方法

      1、非奇異矩陣和奇異矩陣的定義 ?a11??a21設(shè)n階矩陣為:A?????a?n1a12a22?an2????????a1n??a2n?,方陣A的行列式記作A,若A?0,???ann??稱A為非奇異矩陣(也稱滿秩矩陣);否則,稱A為奇異矩陣。

      2、逆矩陣的定義 對(duì)于n階矩陣A,如果有一個(gè)n階矩陣B,滿足:AB?BA?E,則B叫做A的逆矩陣,A也叫做B的逆矩陣。A的逆矩陣記作A?1,這里E是單位矩陣。

      重要的性質(zhì):一個(gè)n階矩陣有逆矩陣的必要與充分條件是該矩陣是非奇異矩陣。非奇異矩陣有唯一的逆矩陣。

      3、伴隨方陣的定義及逆矩陣的定義式

      設(shè)A為一個(gè)n階非奇異矩陣,則A有唯一的一個(gè)逆矩陣A?1,其定義式為:

      A?1?1AA*

      ?a11??a21A? ????a?n1??? A*?????A11A12?A1na12a22?an2A21A22?A2na12a22?an2????????????????????????a1n??a2n? ???ann??An1??An2? ???Ann??a1na2n?anna11 A?a21?an1

      式中,Aij是行列式A中元素aij的代數(shù)余子式,稱矩陣A*為矩陣A的伴隨方陣,A?1是矩陣A的逆矩陣。

      4、矩陣A的行列式A的值的計(jì)算方法

      根據(jù)行列式的性質(zhì)10,首先通過列變換,將行列式第一行上除主對(duì)角線上的一個(gè)元素外,將這行上其它各元素均變換成零;這樣,根據(jù)行列式的性質(zhì)4可知,行列式的值等于第一行各元素與對(duì)應(yīng)于它們的代數(shù)余子式的乘積之和,即等于第一行不為零的主對(duì)角線上的元?與其代數(shù)余子式的積。素a11若行列式的某一行(或某一列)的所有元素均為零,則該行列式的值為零,不需要進(jìn)行變換。

      a11a12a22?an2????????a1na2n?ann A?a21?an1

      a110?a22??2an?????????a22?a23?a33??3an0?na2??ann?????????na2?na3??anna1ia11 ?a21?an1

      ???1?1?1a11?a32??2an

      上式中首先將a12、a13、??、a1n均變換為0,具體方法如下:取乘數(shù)m1i??

      3、??、n)(i?

      2、,從第二列起,每列各元素加上第一列各元素與m1i的積。例如,若想

      ?a12使a12變?yōu)?,應(yīng)將第一列各元素同乘以???a11??a13將第一列各元素同乘以???a11???后,加到第二列上;若想使a13變?yōu)?,應(yīng)????后,加到第三列上;??。?? 仿照列變換,也可以進(jìn)行行變換,使a11、a21、a31、??、an1均變換為0。

      同理,往下可以逐次變換,每變換一次,行列式便降一階,最后行列式A的值為經(jīng)過變換的主對(duì)角線上各元素與每一次降階時(shí)的(?1)i?j的積。

      由于每次降階時(shí)均有i?j,所以(?1)i?j?1。這樣,矩陣A的行列式的值為: ??a33???a44?????

      A?a11?a225、伴隨矩陣A*中各元素Aij的計(jì)算方法

      類似地,利用上述求行列式A的值的方法可以求出伴隨矩陣A*中各元素Aij(Aij為行列式A中元素aij的代數(shù)余子式)的值。

      6、有關(guān)逆矩陣的兩個(gè)性質(zhì)

      ①、若矩陣A、B都有逆矩陣,則其乘積AB也有逆矩陣,其(AB)②、設(shè)A為非奇異矩陣,則(A)?1T?1?B?1A?1。

      ?(A)T?1,即(A)為AT的逆矩陣。

      ?1T㈦、矩陣的秩

      1、矩陣A的k階子式的定義

      在一個(gè)m行、n列的矩陣A中任取k行、k列,位于這些行、列相交處的元素構(gòu)成的k階行列式,叫做A的k階子式。

      2、矩陣A的秩的定義

      矩陣A中不等于零的子式的最大階數(shù),叫做矩陣A的秩。

      3、關(guān)于計(jì)算矩陣A的秩的三個(gè)定理(這三個(gè)定理又稱為矩陣的初等變換)①、如果一個(gè)矩陣的某一行(列)乘以一個(gè)不為零的數(shù),則矩陣的秩不變。

      ②、若一個(gè)矩陣的任意兩行(列)交換,則矩陣的秩不變。

      ③、如果一個(gè)矩陣A的某一行(列)乘以一個(gè)不為零的數(shù)k,然后加到另一行(列)的對(duì)應(yīng)元素上去,則矩陣的秩不變。

      ㈧、分塊矩陣

      對(duì)于階數(shù)比較高的矩陣A,在計(jì)算過程中,經(jīng)常采用“矩陣分塊法”,這樣,它可以使計(jì)算簡(jiǎn)化為較低階矩陣的運(yùn)算。

      1、分塊矩陣的定義

      將一個(gè)m?n階矩陣A用若干條縱線和橫線分成多塊低階矩陣,每一塊低階矩陣稱為A的子塊,以子塊為元素的矩陣稱為分塊矩陣。

      實(shí)際計(jì)算中,多數(shù)情況下是將一個(gè)m?n階矩陣A化成m?1階或1?n階分快矩陣,即將矩陣A按列或按行分塊,這樣分塊的作用是規(guī)律性強(qiáng),利于編程計(jì)算。

      2、分塊矩陣的計(jì)算規(guī)則

      ⑴、作分塊矩陣的加減法運(yùn)算時(shí),必須將兩個(gè)同階矩陣按相同方法分塊,才能運(yùn)算。

      ⑵、作分塊矩陣A與B相乘時(shí),A的列子陣數(shù)必須等于B的行子陣數(shù),且對(duì)應(yīng)相乘的子陣Cih與Dhi必須有Cih的列數(shù)等于Dhi的行數(shù)。即:

      ?C11??C21A?????C?s1C12C22?Cs2????????at?1,l?2at?2,l?2?at?m,l?2???C1p??D11??C2p??D21 B????????DCsp???p1????????at?1,l?n??at?2,l?n?? ??at?m,l?n??D12D22?Dp2????????D1r??D2r? ???Dpr??且 Cih?at?1,l?1??at?2,l?1?????a?t?m,l?1?bf?1,e?1??????bf?x,e?1 Dhibf?1,e?n????

      ?bf?x,e?n?⑶、分塊矩陣轉(zhuǎn)置時(shí),先將子陣看成矩陣的元素,作轉(zhuǎn)置后,再將每個(gè)子陣轉(zhuǎn)置。即:

      ?C11??C21A?????C?s1

      C12C22?Cs2????????TC1p??C11??TC2p??C12T A????????CTCsp???1pC21C22?C2pTTT????????TCs1??TCs2?? ??T?Csp?25 ⑷、分塊矩陣求逆法 參見文獻(xiàn)[30]P506。

      四、矩陣基本計(jì)算程序示例

      1、矩陣加減、轉(zhuǎn)置、乘法運(yùn)算 Private Sub GPHARRAY1_Click()Rem ***** 矩陣加減計(jì)算子菜單 ***** Dim I As Integer Dim J As Integer I = 3 J = 3 ReDim A(1 To I, 1 To J)As Double ReDim B(1 To I, 1 To J)As Double A(1, 1)= 1 A(1, 2)= 2 A(1, 3)= 3 A(2, 1)= 4 A(2, 2)= 5 A(2, 3)= 6 A(3, 1)= 7 A(3, 2)= 8 A(3, 3)= 9 B(1, 1)= 0.1: '***** 第一行第一列 B(1, 2)= 0.2 B(1, 3)= 0.3 B(2, 1)= 0.4: '***** 第二行第一列 B(2, 2)= 0.5 B(2, 3)= 0.6 B(3, 1)= 0.7: '***** 第三行第一列 B(3, 2)= 0.8 B(3, 3)= 0.9 Cls Call GPHARRAY11(A(), B())End Sub

      Private Sub GPHARRAY11(ByRef A()As Double, ByRef B()As Double)Rem ***** 矩陣加減計(jì)算子程序 ***** Dim I As Integer Dim J As Integer Dim N As Integer N = 3 ReDim C(1 To N, 1 To N)As Double For I = 1 To N For J = 1 To N C(I, J)= A(I, J)+ B(I, J)Print Spc(6);“C(”;I;“,”;J;“)=”;C(I, J)Next J Next I End Sub

      Private Sub GPHARRAY2_Click()Rem ***** 矩陣轉(zhuǎn)置計(jì)算子菜單 ***** Dim I As Integer I = 2 J = 3 ReDim A(1 To I, 1 To J)As Double A(1, 1)= 2: '***** 第一行第一列 A(1, 2)= 3 A(1, 3)= 4 A(2, 1)= 5: '***** 第二行第一列 A(2, 2)= 6 A(2, 3)= 7 Cls Call GPHARRAY21(A())End Sub

      Private Sub GPHARRAY21(ByRef A()As Double)Rem ***** 矩陣轉(zhuǎn)置計(jì)算子程序 ***** Dim I As Integer Dim J As Integer Dim I1 As Integer Dim J1 As Integer I = LBound(A, 1): '***** 返回二維數(shù)組第一維的最小下標(biāo) J = LBound(A, 2): '***** 返回二維數(shù)組第二維的最小下標(biāo) I1 = UBound(A, 1): '***** 返回二維數(shù)組第一維的最大下標(biāo) J1 = UBound(A, 2): '***** 返回二維數(shù)組第二維的最大下標(biāo) ReDim C(I To J1, J To I1)As Double For R = 1 To J1 For S = 1 To I1 C(R, S)= A(S, R)Print Spc(6);“C(”;R;“,”;S;“)=”;C(R, S)Next S 27 Next R End Sub

      Private Sub GPHARRAY3_Click()Rem ***** 矩陣乘法計(jì)算子菜單 ***** Dim I As Integer Dim J As Integer I = 2 J = 3 K = 4 ReDim A(1 To I, 1 To J)As Double ReDim B(1 To J, 1 To K)As Double A(1, 1)= 1 A(1, 2)= 2 A(1, 3)= 3 A(2, 1)= 4 A(2, 2)= 5 A(2, 3)= 6 B(1, 1)= 1: '***** 第一行第一列 B(1, 2)= 2 B(1, 3)= 3 B(1, 4)= 4 B(2, 1)= 5: '***** 第二行第一列 B(2, 2)= 6 B(2, 3)= 7 B(2, 4)= 8 B(3, 1)= 9: '***** 第三行第一列 B(3, 2)= 10 B(3, 3)= 11 B(3, 4)= 12 Cls Call GPHARRAY31(A(), B())End Sub

      Private Sub GPHARRAY31(ByRef A()As Double, ByRef B()As Double)Rem ***** 矩陣乘法計(jì)算子程序 ***** Dim I As Integer Dim J As Integer Dim K As Integer Dim U As Integer Dim I1 As Integer Dim J1 As Integer Dim K1 As Integer I1 = UBound(A, 1): '***** 返回二維數(shù)組第一維的最大下標(biāo),此為矩陣A()的行數(shù)

      J1 = UBound(A, 2): '***** 返回二維數(shù)組第二維的最大下標(biāo),此為矩陣A()的列數(shù) K1 = UBound(B, 2): '***** 返回二維數(shù)組第二維的最大下標(biāo),此為矩陣B()的列數(shù) Rem ***** C()=A()*B()

      ReDim C(1 To I1, 1 To K1)As Double For I = 1 To I1 For K = 1 To K1 U = 0 For J = 1 To J1 U = U + A(I, J)* B(J, K)Next J C(I, K)= U Print Spc(6);“C(”;I;“,”;K;“)=”;C(I, K)Next K Next I End Sub

      2、矩陣求逆

      Private Sub Form_Load()Dim I As Integer Dim J As Integer Dim K As Integer Dim N As Integer Dim R As Integer Dim DetA As Double, S As Double N = 4 ReDim A(1 To N, 1 To N), B(1 To N, 1 To N)As Double, C(1 To N, 1 To N)As Double 'A數(shù)組存放源矩陣,B數(shù)組臨時(shí)存放各元素的代數(shù)余子式,C數(shù)組存放逆矩陣 A(1, 1)= 10: A(1, 2)= 4: A(1, 3)= 3: A(1, 4)= 6 A(2, 1)= 5: A(2, 2)= 8: A(2, 3)= 7: A(2, 4)= 9 A(3, 1)= 1: A(3, 2)= 3: A(3, 3)= 5: A(3, 4)= 7 A(4, 1)= 2: A(4, 2)= 6: A(4, 3)= 3: A(4, 4)= 1 '求矩陣的行列式 For I = 1 To N For J = 1 To N B(I, J)= A(I, J)Next J Next I Call QIUJUZHEN(B(), N, S)DetA = S Debug.Print “S=”;S '求代數(shù)余子式及伴隨矩陣 N = N1)= A(K, R)If R < J And K > I Then B(K1, R1 For J = I + 1 To N M =-B(I, J)/ B(I, I)For K = I To N B(K, J)= B(K, J)+ M * B(K, I)' Debug.Print “B(”;K;“,”;J;“)=”;B(K, J)Next K Next J Next I For I = 1 To N S = S * B(I, I)Next I

      End Function 30

      第四篇:程序設(shè)計(jì)教案VB版第七章

      第七章

      繪制誤差橢圓、誤差曲線的程序設(shè)計(jì)方法

      §7-1 繪制誤差橢圓的程序設(shè)計(jì)方法

      測(cè)量平面控制網(wǎng)平差計(jì)算后進(jìn)行精度評(píng)定時(shí),點(diǎn)位中誤差雖然可以用來(lái)評(píng)定待定點(diǎn)的點(diǎn)位精度,但是它卻不能代表該點(diǎn)在某一任意方向上的位差大小。在有些情況下,往往需要確定點(diǎn)位在某些特殊方向上的位差大??;此外,還要了解點(diǎn)位在哪一個(gè)方向上的位差最大,在哪一個(gè)方向上的位差最小。例如,在工程放樣中,就經(jīng)常需要研究這個(gè)問題。為了便于求定待定點(diǎn)點(diǎn)位在任意方向上位差的大小,一般是通過求出待定點(diǎn)的點(diǎn)位誤差橢圓來(lái)實(shí)現(xiàn)的。通過誤差橢圓可以求得待定點(diǎn)在任意方向上的位差,這樣就可以較精確地、形象而全面地反映待定點(diǎn)點(diǎn)位在各個(gè)方向上誤差的分布情況。

      為了確定任意兩個(gè)待定點(diǎn)之間相對(duì)位置的某些精度,也需要作出兩個(gè)待定點(diǎn)之間的相對(duì)誤差橢圓。

      無(wú)論是表示點(diǎn)位絕對(duì)位差的誤差橢圓,還是表示兩個(gè)待定點(diǎn)之間相對(duì)位置的某些精度的相對(duì)誤差橢圓,在測(cè)量程序設(shè)計(jì)中所要面臨的問題都是繪制橢圓,而這個(gè)橢圓一般情況下不是正立的。由于目前常用的幾種編程語(yǔ)言(例如VB、VC)中沒有現(xiàn)成的語(yǔ)句、命令、函數(shù)或方法來(lái)繪制傾斜任意角度的橢圓,因此,下面研究在計(jì)算機(jī)屏幕上繪制傾斜任意角度的橢圓的編程方法。

      一、繪制誤差橢圓的基本思路

      以下討論問題及編程中所使用的平面直角坐標(biāo)系,設(shè)經(jīng)過一段程序的控制,已將屏幕繪圖區(qū)域的平面直角坐標(biāo)系調(diào)整為測(cè)量平面直角坐標(biāo)系(以下簡(jiǎn)稱坐標(biāo)系),即縱軸向上為X軸正向,橫軸向右為Y軸正向。

      繪制傾斜任意角度的誤差橢圓時(shí),已知數(shù)據(jù)如下: 橢圓的長(zhǎng)半軸:E(也可用a表示)橢圓的短半軸:F(也可用b表示)

      橢圓中心點(diǎn)的在坐標(biāo)系中的坐標(biāo):(X0,Y0)

      橢圓長(zhǎng)半軸在坐標(biāo)系中的坐標(biāo)方位角:T(T稱為誤差橢圓的主軸方向)

      如圖7-1所示,繪制傾斜任意角度的誤差橢圓的基本思路是:首先,求出在坐標(biāo)系中坐標(biāo)方位角為T的橢圓長(zhǎng)半軸與橢圓圓周的交點(diǎn)G的坐標(biāo);然后,再求出橢圓圓周上一系列點(diǎn)P(i)的坐標(biāo)(設(shè)i?0時(shí),P(0)點(diǎn)與G點(diǎn)重合;i?n時(shí),P(n)點(diǎn)與G點(diǎn)重合);最后,從G點(diǎn)開始用VB中畫直線方法LINE(以下簡(jiǎn)稱LINE)依次連接相鄰點(diǎn)。

      為了用LINE依次連接相鄰點(diǎn)時(shí)所畫出的直線趨近于橢圓曲線,需要使橢圓圓周上一系列點(diǎn)P(i)(將P(i)點(diǎn)稱為誤差橢圓圓周上細(xì)部點(diǎn),簡(jiǎn)稱P(i)點(diǎn),下同)分布合理,即P(i)點(diǎn)與P(i?1)點(diǎn)之間的直線距離應(yīng)足夠小。鑒于計(jì)算機(jī)屏幕的分辨率,可控制在0.2mm內(nèi)。

      關(guān)于G點(diǎn)坐標(biāo)的計(jì)算,應(yīng)以橢圓中心點(diǎn)坐標(biāo)(X0,Y0)作為起始坐標(biāo)、以橢圓的長(zhǎng)半軸E為距離、以T為坐標(biāo)方位角、按坐標(biāo)正算的方法進(jìn)行計(jì)算,即:

      ?XG?X0?a?Cos(T)

      (7-1)?Y?Y?a?Sin(T)0?G

      155 橢圓長(zhǎng)軸與橢圓圓周的另一個(gè)交點(diǎn)GA的坐標(biāo)為:

      ?sT??)?XGA?X0?a?Co((7-2)

      (T??)?YGA?Y0?a?Sin橢圓短軸與橢圓圓周的兩個(gè)交點(diǎn)H、HA的坐標(biāo)分別為:

      ??X?X?b?Cos(T?)0??H(7-3)??Y?Y?b?Sin(T??)H0?2?3??X?X?b?Cos(T?)0??HA2

      (7-4)?3??Y?Y?b?Sin(T?)HA0?2?根據(jù)上述坐標(biāo),用LINE可畫出橢圓的長(zhǎng)軸及短軸。以下重點(diǎn)介紹計(jì)算P(i)點(diǎn)坐標(biāo)的方法。

      二、計(jì)算P(i)點(diǎn)坐標(biāo)的方法

      1、坐標(biāo)轉(zhuǎn)換公式

      如圖7-1所示,設(shè)P點(diǎn)在坐標(biāo)系XOY中的坐標(biāo)為XP、YP,在坐標(biāo)系EO?F中的坐標(biāo)為EP、FP;O?點(diǎn)在坐標(biāo)系XOY中的坐標(biāo)為XO、YO;E軸正向在坐標(biāo)系XOY中的坐標(biāo)方位角為T。則可以推證出如下坐標(biāo)互換公式:

      圖7-1 傾斜任意角度的誤差橢圓

      ?XP?XO?EP?CosT?FP?SinT

      (7-5)?Y?Y?E?SinT?F?CosTOPP?P?EP?(YP?YO)?SinT?(XP?XO)?CosT及:

      ?

      (7-6)

      F?(Y?Y)?CosT?(X?X)?SinTPOPO?P2、計(jì)算P(i)點(diǎn)坐標(biāo)的參數(shù)方程法

      如圖7-2所示,該法的基本思路是:先用橢圓的參數(shù)方程求解正立豎放橢圓上P(i)點(diǎn)坐標(biāo)EP(i)、FP(i);然后,使用坐標(biāo)轉(zhuǎn)換公式的(7-5)式計(jì)算P(i)點(diǎn)在坐標(biāo)系XOY中的坐標(biāo)XP(i)、YP(i)。

      P(i)點(diǎn)在EO?F坐標(biāo)系中的坐標(biāo)EP(i)、FP(i)可用參數(shù)方程表示為:

      156 ?EP(i)?a?Cos(t)

      (7-7)??FP(i)?b?Sin(t)參照?qǐng)D7-1,用P(i)代替P、EP(i)代替EP、FP(i)代替FP、XP(i)代替XP、YP(i)代替YP,將(7-7)式代入(7-5)式中,可得任一點(diǎn)P(i)在XOY坐標(biāo)系中的坐標(biāo)為:

      ?XP(i)?X0?(a?Cos(t))?Cos(T)?(b?Sin(t))?Sin(T)

      (7-8)??YP(i)?Y0?(a?Cos(t))?Sin(T)?(b?Sin(t))?Cos(T)如圖7-2所示,編程中,可設(shè)t?i?(DT),其中DT是橢圓圓周上有序(即有一定規(guī)律)分布的一系列點(diǎn)中的任意相鄰兩點(diǎn)P(i)、P(i?1)和橢圓中心相連的直線的夾角,t應(yīng)從O?G開始沿順時(shí)針方向遞增,即自E軸正向沿著順時(shí)針方向至O?P(i)的水平夾角;i是程序中的循環(huán)變量,i?0,1,2,??,n。

      3、計(jì)算P(i)點(diǎn)坐標(biāo)的直線點(diǎn)斜式方程法

      如圖7-2所示,該法的基本思路是:首先,求出

      圖7-2 正立豎放橢圓 橢圓圓周上一系列點(diǎn)P(i)到橢圓中心的距離D(i);然后,直接用坐標(biāo)正算公式求解P(i)點(diǎn)在坐標(biāo)系XOY中坐標(biāo)XP(i)、YP(i)。

      設(shè)正立豎放橢圓中心O?點(diǎn)在EO?F坐標(biāo)系中的坐標(biāo)為(0,則過該點(diǎn)及橢圓圓周上任0),一點(diǎn)P(i)的直線點(diǎn)斜式方程為:

      FP(i)?m?EP(i)

      (7-9)其中:

      m?tg(i?DT)

      (7-10)

      (7-10)式中的m為直線O?P(i)的斜率,i、DT的意義與前面相同。

      在EO?F坐標(biāo)系中的正立豎放橢圓的標(biāo)準(zhǔn)方程為:

      (EP(i))2(FP(i))2??

      1(7-11)

      22ab將(7-9)式代入到(7-11)式,并顧及(7-10)式,可解得:

      a2b(EP(i))?2

      (7-12)22b?a?tg(i?DT)2 157 則O?點(diǎn)至P(i)點(diǎn)的距離為:

      D(i)?(EP(i))2?(FP(i))2

      ?a2?b2a2?b22?m?2

      (7-13)

      b2?a2?m2b?a2?m2從式(7-13)可以看出,D(i)的計(jì)算與坐標(biāo)系無(wú)關(guān),也可以說與橢圓傾斜角度無(wú)關(guān)。在圖7-1與圖7-2中,不論橢圓是正立豎放,還是傾斜任意角度的,D(i)是不變的。因此,P(i)點(diǎn)在坐標(biāo)系XOY中的坐標(biāo)按坐標(biāo)正算公式可得:

      ??XP(i)?XO?D(i)?Cos(T?i?DT)

      (7-14)

      ?YP(i)?YO?D(i)?Sin(T?i?DT)

      編程中,如圖7-1所示,從G點(diǎn)開始依順時(shí)針方向用LINE依次連接相鄰點(diǎn),最后,再回到G點(diǎn),即可繪出所要求的誤差橢圓。

      4、計(jì)算P(i)點(diǎn)坐標(biāo)的遞推計(jì)算方法

      該方法與計(jì)算P(i)點(diǎn)坐標(biāo)的參數(shù)方程法基本相同,只是編程計(jì)算中采用了遞推計(jì)算的方法計(jì)算Cos(t)和Sin(t)。詳見后面的示例程序。

      三、坐標(biāo)軸的平移、旋轉(zhuǎn)公式(即(7-5)式、(7-6)式的推導(dǎo)過程)

      如圖7-3所示,設(shè)P點(diǎn)在坐標(biāo)系

      ?,YP?),O?點(diǎn)X?O?Y?中的坐標(biāo)為(XP在坐標(biāo)系XOY中的坐標(biāo)為(XO,YO);經(jīng)

      圖7-3 坐標(biāo)軸的平移、旋轉(zhuǎn)

      ?,YP?)平移、旋轉(zhuǎn)后,P點(diǎn)在坐標(biāo)系XOY中的坐標(biāo)為(XP,YP)。根據(jù)求(XP(XP,YP)的公式如下:

      XP?XO?A1P

      ?X0?O?P?Cos(???)

      s?Co?s?O?P?Si?n?Si?n

      ?XO?O?P?Co???Cos??YP??Sin? ?XO?XPYP?YO?O?A1

      ?Y0?O?P?Sin(???)

      ?YO?O?P?Sin??Cos??O?P?Cos??Sin?

      158 ??Sin??YP??Cos?

      ?YO?XP?,YP?)(XO,YO)、(XP,YP)根據(jù)?、,也可求得,有以下兩種方法。(XP?、YP?。方法一:根據(jù)上面的兩式聯(lián)立方程組,可解得XP方法二:如圖7-3所示,設(shè)?PO?A1??1,則可得:

      ??O?P?Sin(???1)

      XP

      ?O?P?Sin??Cos?1?O?P?Cos??Sin??(YP?YO)?Sin??(XP?XO)?Cos?

      ??O?P?Cos(???1)

      YP

      ?O?P?Cos??Cos?1?O?P?Sin??Sin?1

      ?(YP?YO)?Cos??(XP?XO)?Sin?

      四、正立橫放橢圓的參數(shù)方程與標(biāo)準(zhǔn)方程

      繪制傾斜任意角度的誤差橢圓時(shí),也可根據(jù)正立橫放橢圓推導(dǎo)出另一套公式進(jìn)行編程。

      如圖7-4所示,正立橫放橢圓的參數(shù)方程為:

      圖7-4 正立橫放橢圓

      ?XP?XB?b?Cos? ?Y?Y?a?Sin?A?P 在坐標(biāo)系XOY中,橢圓中心位于坐標(biāo)原點(diǎn)的正立橫放橢圓的標(biāo)準(zhǔn)方程為:

      Y2X2??1 a2b

      2五、繪制誤差橢圓程序示例(輸出圖形見圖7-5)

      Private Sub GPHPIC22_Click()Rem ***** 繪制誤差橢圓菜單子過程 ***** Dim X As Double Dim Y As Double Dim A As Double

      159 Dim B As Double Dim T As String Cls

      Form2.DrawStyle = 0: ' ***** 設(shè)定繪制單實(shí)線

      Form2.DrawWidth = 1: ' ***** 設(shè)定繪制單實(shí)線的線寬

      Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '***** 繪制一個(gè)紅色矩形作為繪圖區(qū)域。

      X = 80: '***** 橢圓中心測(cè)量縱坐標(biāo) ***** Y = 100: '***** 橢圓中心測(cè)量橫坐標(biāo) ***** A = 25.4: '***** 橢圓長(zhǎng)半軸 ***** B = 9.5: '***** 橢圓短半軸 ***** T = “138 54 12”: '***** 橢圓長(zhǎng)半軸坐標(biāo)方位角 **** Call GPHP15(X, Y, A, B, T)End Sub

      Private Sub GPHP15(ByVal XC As Double, ByVal YC As Double, ByVal A As Double, ByVal B As Double, ByVal T As String)Rem ***** 繪制誤差橢圓子過程 ***** Dim II As Integer Dim N As Integer Dim I As Integer Dim DT As Double Dim TT As Double: '***** 橢圓長(zhǎng)半軸坐標(biāo)方位角 ****

      N = 200

      ReDim X(N + 1)As Double ReDim Y(N + 1)As Double

      TT = RAD(T): '***** 程序中T應(yīng)為度、分、秒(字符串)DT = 2 * PI()/ N

      II = 3: '***** 選擇繪制橢圓的方法

      Select Case II Case 1: '***** 用橢圓參數(shù)方程及將坐標(biāo)進(jìn)行平移、旋轉(zhuǎn)變換的方法

      Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)

      For I = 1 To N

      X(I)= XC + A * Cos(I * DT)* Cos(TT)ST * SS: '***** 遞推求算Cos(i*DT)

      ST = ST * CC + CT * SS: '***** 遞推求算Sin(i*DT)

      CT = DCT

      XP = XC + A * CT * Cos(TT)-B * ST * Sin(TT)

      YP = YC + A * CT * Sin(TT)+ B * ST * Cos(TT)

      Form2.Line-(YP, XP), RGB(0, 0, 0)

      Next I

      Case 3: '***** 用點(diǎn)斜式直線方程與豎放橢圓的標(biāo)準(zhǔn)方程聯(lián)立方程組

      Rem ***** 解算橢圓中心O(0,0)至橢圓圓周交點(diǎn)距離的方法

      Dim AT As Double

      Dim BT As Double

      Dim XI As Double

      Dim YI As Double

      Dim M As Double

      Dim DI As Double

      Dim XPI As Double

      Dim YPI As Double

      Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)

      161

      AT = A ^ 2

      BT = B ^ 2

      For I = 1 To N

      M = Tan(I * DT): '***** 直線的斜率

      M = M ^ 2

      XI = AT * BT /(BT + AT * M): '***** 正立豎放橢圓圓周i點(diǎn)縱坐標(biāo)的平方,X(i)^2

      YI = XI * M: '***** 正立豎放橢圓圓周i點(diǎn)橫坐標(biāo)的平方,Y(i)^2

      DI = Sqr(XI + YI): '***** 橢圓中心至橢圓圓周i點(diǎn)的距離D(i)

      XPI = XC + DI * Cos(TT + I * DT): '***** 斜立橢圓圓周i點(diǎn)的縱坐標(biāo)XP(i)

      YPI = YC + DI * Sin(TT + I * DT): '***** 斜立橢圓圓周i點(diǎn)的橫坐標(biāo)YP(i)

      Form2.Line-(YPI, XPI), RGB(0, 0, 0)

      Next I End Select

      Rem ***** 繪制橢圓的長(zhǎng)、短軸,用坐標(biāo)正算的方法 *****

      Dim X1 As Double

      Dim Y1 As Double

      Dim X2 As Double

      Dim Y2 As Double

      X1 = XC + A * Cos(TT)

      Y1 = YC + A * Sin(TT)

      X2 = XC + A * Cos(TT + PI())

      圖7-5 誤差橢圓

      Y2 = YC + A * Sin(TT + PI())

      Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)

      X1 = XC + B * Cos(TT + PI()/ 2)

      Y1 = YC + B * Sin(TT + PI()/ 2)

      X2 = XC + B * Cos(TT + 3 * PI()/ 2)

      Y2 = YC + B * Sin(TT + 3 * PI()/ 2)

      Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)

      Rem ***** 以下繪制測(cè)量坐標(biāo)系及方框 ***** Rem ***** 略 ***** End Sub

      162 §7-2 繪制誤差曲線的程序設(shè)計(jì)方法

      一、誤差曲線簡(jiǎn)介

      誤差曲線的方程為:

      2m??a2?Cos2??b2?Sin2?

      式中:

      a —— 誤差曲線所對(duì)應(yīng)的誤差橢圓的長(zhǎng)半軸 b —— 誤差曲線所對(duì)應(yīng)的誤差橢圓的短半軸

      ? —— 以a為起始方向、以誤差曲線中心為起始點(diǎn)、沿順時(shí)針方向?qū)?yīng)誤差曲線上某點(diǎn)的方向角

      m?—— 對(duì)應(yīng)任意方向角?的誤差曲線上某點(diǎn)的位差

      以不同的?和m?為極坐標(biāo)的點(diǎn)的軌跡為一條閉合的曲線。顯然,從曲線中心O至曲線上任意點(diǎn)P(對(duì)應(yīng)誤差曲線上某點(diǎn)的方向角為?)的向徑OP就是該方向的位差m?。這個(gè)曲線可以把各方向的位差清楚地圖解出來(lái)。

      在工程測(cè)量中,誤差曲線的用途是廣泛的。根據(jù)這個(gè)圖可以確定坐標(biāo)平差值在各個(gè)方向上的位差。參見文獻(xiàn)[34] P461-462)

      二、誤差曲線的程序設(shè)計(jì)方法

      由于編程語(yǔ)言中沒有現(xiàn)成的語(yǔ)句、命令、函數(shù)或方法來(lái)繪制傾斜任意角度的誤差曲線,因此,下面研究在計(jì)算機(jī)屏幕上繪制傾斜任意角度的誤差曲線的編程方法。

      繪制傾斜任意角度的誤差曲線時(shí),已知數(shù)據(jù)如下: 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸:A(或a)對(duì)應(yīng)誤差曲線的誤差橢圓的短半軸:B(或b)對(duì)應(yīng)誤差曲線的誤差橢圓中心點(diǎn)的測(cè)量坐標(biāo)系坐標(biāo):(XO,YO)對(duì)應(yīng)誤差曲線的誤差橢圓長(zhǎng)半軸在測(cè)量坐標(biāo)系中的坐標(biāo)方位角:T 下面討論問題及編程中所使用的平面坐標(biāo)系均為測(cè)量平面直角坐標(biāo)系,即縱軸向上為X軸正向,橫軸向右為Y軸正向。

      繪制傾斜任意角度的誤差曲線的基本思路是:首先,求出在測(cè)量坐標(biāo)系中坐標(biāo)方位角為T的橢圓長(zhǎng)半軸與橢圓圓周的交點(diǎn)G(該點(diǎn)也是橢圓長(zhǎng)半軸與誤差曲線的交點(diǎn))的坐標(biāo);然后,再求出誤差曲線上一系列點(diǎn)P(i)的坐標(biāo);最后,從G點(diǎn)開始用畫直線方法LINE依次連接相鄰點(diǎn)。

      為了用畫直線方法LINE依次連接相鄰點(diǎn)時(shí)所畫出的直線趨近于誤差曲線,需要將誤差曲線上一系列點(diǎn)P(i)分布的合理,即P(i)與P(i?1)的距離應(yīng)足夠小,且任意相鄰兩點(diǎn)P(i)與P(i?1)和誤差曲線中心(也是誤差橢圓中心)相連的直線的夾角均相等——這是為了使編程計(jì)算有規(guī)律性。

      實(shí)際編程中,如圖7-6所示,在測(cè)量坐標(biāo)系中坐標(biāo)方位角為T的橢圓長(zhǎng)半軸與橢圓圓周的交點(diǎn)G的坐標(biāo),應(yīng)以橢圓中心點(diǎn)坐標(biāo)(Xo,Yo)作為起始坐標(biāo)、以橢圓的長(zhǎng)半軸A為距離、以T為坐標(biāo)方位角、按坐標(biāo)正算的方法計(jì)算G點(diǎn)的坐標(biāo):

      163 ?XG?X0?A?Cos(T)??YG?Y0?A?Sin(T)橢圓長(zhǎng)軸與橢圓圓周的另一個(gè)交點(diǎn)GA的坐標(biāo)為:

      sT??)?XGA?X0?A?Co(?

      Y?Y?A?Sin(T??)0?GA橢圓短軸與橢圓圓周的兩個(gè)交點(diǎn)F、FA的坐標(biāo)分別為:

      ??X?X?B?Cos(T?)0??F2 ???Y?Y?B?Sin(T?)F0?2?3??X?X?B?Cos(T?)FA0??2 ??Y?Y?B?Sin(T?3?)FA0?2?根據(jù)上述坐標(biāo),用畫直線方法LINE可

      圖7-6 傾斜任意角度的誤差曲線

      畫出橢圓的長(zhǎng)軸及短軸,這也是誤差曲線的 長(zhǎng)軸及短軸。

      計(jì)算傾斜任意角度T的誤差曲線上任意點(diǎn)P(i)坐標(biāo)的方法,可采用與繪制誤差橢圓相同的方法,如圖7-6所示。

      首先,求出在測(cè)量坐標(biāo)系中坐標(biāo)方位角為T的橢圓長(zhǎng)半軸與橢圓圓周的交點(diǎn)G的坐標(biāo)。

      然后,再求出誤差曲線上一系列點(diǎn)P(i)到誤差曲線中心的距離。不論誤差曲線是正立豎放,還是傾斜任意角度的,這個(gè)距離值是確定不變的,因此,可按正立豎放的誤差曲線求算該距離值,如圖7-7所示,對(duì)于誤差曲線上的任意一點(diǎn)P(i),有??t。

      D(i)?m??a2?Cos2??b2?Sin2?

      實(shí)際編程中,可取??i?DT。

      圖7-7 豎立正放的誤差曲線 按坐標(biāo)正算可得誤差曲線上任意點(diǎn)P(i)的坐標(biāo):

      ??XP(i)?XO?D(i)?Cos(T?i?DT)

      ?YP(i)?YO?D(i)?Sin(T?i?DT)164 最后,在圖7-6中從G點(diǎn)開始用畫直線方法LINE依次連接相鄰點(diǎn),即可繪出誤差曲線。

      三、誤差曲線編程示例(含屏幕顯示及打印機(jī)打印誤差曲線兩部分)(見圖7-8)

      Private Sub GPHPIC23_Click()Rem ***** 繪制誤差曲線一級(jí)菜單子過程 ***** End Sub

      Private Sub GPHPIC24_Click()Rem ***** 顯示誤差曲線菜單子過程 ***** Dim X As Double Dim Y As Double Dim A As Double Dim B As Double Dim T As String Cls Form2.DrawStyle = 0: ' ***** 設(shè)定繪制單實(shí)線

      Form2.DrawWidth = 1: ' ***** 設(shè)定繪制單實(shí)線的線寬

      Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '繪制一個(gè)紅色矩形作為繪圖區(qū)域。X = 80: '***** 曲線中心測(cè)量縱坐標(biāo) ***** Y = 100: '***** 曲線中心測(cè)量橫坐標(biāo) ***** A = 25.4: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸 ***** B = 9.5: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的短半軸 ***** T = “138 54 12”: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸坐標(biāo)方位角 **** Call GPHP16(X, Y, A, B, T, 1)End Sub

      Private Sub GPHPIC25_Click()Rem ***** 打印機(jī)打印誤差曲線菜單子過程 Dim X As Double Dim Y As Double Dim A As Double Dim B As Double Dim T As String Cls Form2.DrawStyle = 0: ' ***** 設(shè)定繪制單實(shí)線

      Form2.DrawWidth = 1: ' ***** 設(shè)定繪制單實(shí)線的線寬

      Form2.Line(1, 7)-(199, 143), RGB(255, 0, 0), B: '繪制一個(gè)紅色矩形作為繪圖區(qū)域。

      X = 80: '***** 曲線中心測(cè)量縱坐標(biāo) ***** Y = 100: '***** 曲線中心測(cè)量橫坐標(biāo) ***** A = 25.4: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸 ***** B = 9.5: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的短半軸 ***** T = “138 54 12”: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸坐標(biāo)方位角 **** Call GPHP16(X, Y, A, B, T, 2)165 End Sub

      Private Sub GPHP16(ByVal XC As Double, ByVal YC As Double, ByVal A As Double, ByVal B As Double, ByVal T As String, ByVal PP As Integer)Rem ***** 屏幕顯示及打印機(jī)打印誤差曲線子過程 ***** Rem ***** 當(dāng)PP=1時(shí),屏幕顯示誤差曲線 ***** Rem ***** 當(dāng)PP=2時(shí),打印機(jī)打印誤差曲線 ***** Dim N As Integer Dim I As Integer Dim DT As Double Dim TT As Double: '***** 對(duì)應(yīng)誤差曲線的誤差橢圓的長(zhǎng)半軸坐標(biāo)方位角 ****

      N = 400 TT = RAD(T): '***** 程序中T應(yīng)為度、分、秒(字符串)DT = 2 * PI()/ N

      Rem ***** 用點(diǎn)斜式直線方程與豎放橢圓(或豎放誤差曲線)的標(biāo)準(zhǔn)方程聯(lián)立方程組 Rem ***** 解算橢圓中心O(0,0)至橢圓圓周(或豎放誤差曲線)交點(diǎn)距離的方法 Rem ***** 誤差曲線的方程為:m^2=a^2*(Cos(t))^2+b^2*(Sin(t))^2 Dim AT As Double Dim BT As Double Dim XI As Double Dim YI As Double Dim M As Double Dim DI As Double Dim XPI As Double Dim YPI As Double

      AT = A ^ 2 BT = B ^ 2

      If PP = 1 Then Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 0)ElseIf PP = 2 Then Dim XXX As Printer For Each XXX In Printers If XXX.Orientation = vbPRORPortrait Then Set Printer = XXX: '* 設(shè)置為系統(tǒng)默認(rèn)打印機(jī),參見《VB6.0中文版參考詳解》P502 Exit For End If Next

      Printer.ScaleMode = 0: '***** 通常先設(shè)為零

      Printer.ScaleMode = 6: '***** 設(shè)置打印機(jī)坐標(biāo)系的單位是毫米

      166

      Dim ASPP As Single

      ASPP = Printer.ScaleHeight / Printer.ScaleWidth: '*** 設(shè)置打印機(jī)新的繪圖區(qū)坐標(biāo)系縱橫比

      Rem ***** 當(dāng)設(shè)置打印機(jī)坐標(biāo)系的單位是毫米時(shí),ASPP值約為0.72 Printer.ScaleWidth = 200: '*** 設(shè)置打印機(jī)新的繪圖區(qū)坐標(biāo)系寬為200 Printer.ScaleHeight =-Int(Printer.ScaleWidth * ASPP): '*** 設(shè)置打印機(jī)新的繪圖區(qū)坐標(biāo)系高

      Printer.ScaleLeft =-0: '*** 設(shè)置打印機(jī)新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)橫坐標(biāo)值

      Printer.ScaleTop =-Printer.ScaleHeight: '-ScaleHeight: '*** 設(shè)置打印機(jī)新的繪圖區(qū)坐標(biāo)系坐標(biāo)原點(diǎn)縱坐標(biāo)值

      Rem ***** 通過以上的設(shè)定,將打印機(jī)繪圖區(qū)坐標(biāo)系設(shè)為與數(shù)學(xué)坐標(biāo)系相同 Printer.DrawStyle = 0: ' ***** 設(shè)定打印機(jī)打印單實(shí)線

      Printer.DrawWidth = 1: ' ***** 設(shè)定打印機(jī)打印單實(shí)線的線寬

      Printer.PSet(YC + A * Sin(TT), XC + A * Cos(TT)): '*** 打印機(jī)打印 End If

      For I = 1 To N M = Tan(I * DT): '***** 直線的斜率 M = M ^ 2 XI = AT * BT /(BT + AT * M): '***** 正立豎放橢圓圓周i點(diǎn)縱坐標(biāo)的平方,X(i)^2 YI = XI * M: '***** 正立豎放橢圓圓周i點(diǎn)橫坐標(biāo)的平方,Y(i)^2 DI = Sqr(XI + YI): '***** 橢圓中心至橢圓圓周i點(diǎn)的距離D(i)XPI = XC + DI * Cos(TT + I * DT): '***** 斜立橢圓圓周i點(diǎn)的縱坐標(biāo)XP(i)YPI = YC + DI * Sin(TT + I * DT): '***** 斜立橢圓圓周i點(diǎn)的橫坐標(biāo)YP(i)If PP = 1 Then Form2.Line-(YPI, XPI), RGB(0, 0, 0): '***** 繪制斜立誤差橢圓 ElseIf PP = 2 Then Printer.Line-(YPI, XPI): '***** 打印機(jī)打印斜立誤差橢圓 End If Next I

      If PP = 1 Then Form2.PSet(YC + A * Sin(TT), XC + A * Cos(TT)), RGB(0, 0, 255)ElseIf PP = 2 Then Printer.PSet(YC + A * Sin(TT), XC + A * Cos(TT)): '*** 打印機(jī)打印 End If

      For I = 1 To N DI = Sqr(AT *(Cos(I * DT))^ 2 + BT *(Sin(I * DT))^ 2): '***** 誤差曲線中心至曲線上i點(diǎn)的距離D(i)XPI = XC + DI * Cos(TT + I * DT): '***** 斜立誤差曲線上i點(diǎn)的縱坐標(biāo)XP(i)167 YPI = YC + DI * Sin(TT + I * DT): '***** 斜立誤差曲線上i點(diǎn)的橫坐標(biāo)YP(i)If PP = 1 Then Form2.Line-(YPI, XPI), RGB(0, 0, 255): '***** 繪制斜立誤差曲線 ElseIf PP = 2 Then Printer.Line-(YPI, XPI): '***** 打印機(jī)打印斜立誤差曲線 End If Next I

      Rem ***** 繪制橢圓的長(zhǎng)、短軸,用坐標(biāo)正算的方法 ***** Dim X1 As Double Dim Y1 As Double Dim X2 As Double Dim Y2 As Double

      X1 = XC + A * Cos(TT)Y1 = YC + A * Sin(TT)X2 = XC + A * Cos(TT + PI())Y2 = YC + A * Sin(TT + PI())If PP = 1 Then Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)ElseIf PP = 2 Then Printer.Line(Y1, X1)-(Y2, X2): '*** 打印機(jī)打印 End If

      X1 = XC + B * Cos(TT + PI()/ 2)Y1 = YC + B * Sin(TT + PI()/ 2)X2 = XC + B * Cos(TT + 3 * PI()/ 2)Y2 = YC + B * Sin(TT + 3 * PI()/ 2)If PP = 1 Then Line(Y1, X1)-(Y2, X2), RGB(255, 0, 0)ElseIf PP = 2 Then Printer.Line(Y1, X1)-(Y2, X2): '*** 打印機(jī)打印

      Printer.EndDoc: '***** 該方法(EndDoc)意思為“開始打印” End If Rem ***** 以下繪制測(cè)量坐標(biāo)系及方框 ***** Rem ***** 略 ***** End Sub

      圖7-8 誤差橢圓與誤差曲線

      168

      第五篇:VB程序設(shè)計(jì)的常用算法教案

      VB程序設(shè)計(jì)的常用算法教案

      算法(Algrith):計(jì)算機(jī)解題的基本思想方法和步驟。算法的描述:是對(duì)要解決一個(gè)問題或要完成一項(xiàng)任務(wù)所采 取的方法和步驟的描述,包括需要什么數(shù)據(jù)(輸入什么數(shù)據(jù)、輸出什么結(jié)果)、采用什么結(jié)構(gòu)、使用什么語(yǔ)句以及如何 安排這些語(yǔ)句等。通常使用自然語(yǔ)言、結(jié)構(gòu)化流程圖、偽代碼等來(lái)描述算法。

      一、計(jì)數(shù)、求和、求階乘等簡(jiǎn)單算法

      此類問題都要使用循環(huán),要注意根據(jù)問題確定循環(huán)變量的初值、終值或結(jié)束條,更要注意用來(lái)表示計(jì)數(shù)、和、階 乘的變量的初值。

      例:用隨機(jī)函數(shù)產(chǎn)生100個(gè)[0,99]范圍內(nèi)的隨機(jī)整數(shù),統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,6,7,8,9,0的 數(shù)的個(gè)數(shù)并打印出來(lái)。

      本題使用數(shù)組來(lái)處理,用數(shù)組a存放產(chǎn)生的確100個(gè)隨機(jī)整數(shù),數(shù)組x來(lái)存放個(gè)位上的數(shù)字分

      別為1,2,3,4,6,7,8,9,0的數(shù)的個(gè)數(shù)。即個(gè)位是1的個(gè)數(shù)存放在x中,個(gè)位是2的個(gè)數(shù)存放在x中,…… 個(gè)位是0的個(gè)數(shù)存放在x。

      將程序編寫在一個(gè)GetTput過程中,代碼如下: PubliSubGetTput

      DiaAsInteger

      DixAsInteger

      DiiAsInteger,pAsInteger

      '產(chǎn)生100個(gè)[0,99]范圍內(nèi)的隨機(jī)整數(shù),每行印出來(lái)

      Fri=1T100

      a=Int

      Ifa<10Then

      Fr1PrintSpae;a;

      10個(gè)打

      Else

      Fr1PrintSpae;a;

      EndIf

      Ifid10=0ThenFr1Print

      Nexti

      '統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,6,7,8,9,0的數(shù)的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果保存在數(shù)組x,x,x中,將統(tǒng)計(jì)結(jié)果打印出來(lái)

      Fri=1T100

      p=a

      d

      0

      '求個(gè)位上的數(shù)字

      Ifp=0Thenp=10

      x=x+1

      Nexti

      Fr1Print&qut;統(tǒng)計(jì)結(jié)果&qut;

      Fri=1T10

      p=i

      Ifi=10Thenp=0 Fr1Print&qut;個(gè)位數(shù)為&qut;+Str+&qut;&qut;+Str)+&qut;個(gè)&qut;

      Nexti EndSub

      二、求兩個(gè)整數(shù)的最大公約數(shù)、最小公倍數(shù) 分析:求最大公約數(shù)的算法思想:

      對(duì)于已知兩數(shù),n,使得>n;

      除以n得余數(shù)r;

      若r=0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行;

      ←n,n←r,再重復(fù)執(zhí)行。

      例如:求=14,n=6的最大公約數(shù)

      n

      r

      0 =inputBx n=inputBx n=n* If

      r=dn

      Dhile

      =n

      n=r

      r=dn

      Lp

      Print&qut;最大公約數(shù)=&qut;,n [1]

      [2]

      [3]

      [4]

      []

      [6]

      [7]

      下一頁(yè) <

      下載程序設(shè)計(jì)教案VB版第一章、第二章五篇word格式文檔
      下載程序設(shè)計(jì)教案VB版第一章、第二章五篇.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        VB程序設(shè)計(jì)課程設(shè)計(jì)

        VB程序設(shè)計(jì)課程設(shè)計(jì) 1、目的 VB程序設(shè)計(jì)課程設(shè)計(jì)是考察學(xué)生對(duì)VB程序設(shè)計(jì)課程相關(guān)知識(shí)點(diǎn)掌握情況的重要環(huán)節(jié),也是激勵(lì)學(xué)生進(jìn)一步學(xué)習(xí)VB、提高運(yùn)用VB開發(fā)實(shí)際計(jì)算機(jī)程序的能力......

        vb程序設(shè)計(jì)方法

        發(fā)表于《中小學(xué)信息技術(shù)教育》雜志2005年第7期 VB程序設(shè)計(jì)方法——今天我來(lái)做導(dǎo)演!教學(xué)目標(biāo): 1、 知道創(chuàng)建一個(gè)VB程序的基本步驟 2、 了解窗口、事件和消息的含義 3、 培養(yǎng)學(xué)......

        VB選擇結(jié)構(gòu)程序設(shè)計(jì)的教案

        《VB 【教學(xué)內(nèi)容分析】 選擇結(jié)構(gòu)程序設(shè)計(jì)》教案 《程序的選擇結(jié)構(gòu)》是信息技術(shù)普通高中課程實(shí)驗(yàn)教科書選修1《算法與程序設(shè)計(jì)》第二章第三節(jié)的內(nèi)容。主要內(nèi)容是用選擇結(jié)構(gòu)......

        VB程序設(shè)計(jì)(2014大作業(yè))

        《VB程序設(shè)計(jì)》大作業(yè) 一、大作業(yè)的內(nèi)容 本次大作業(yè)要求學(xué)生根據(jù)所學(xué)知識(shí)以及個(gè)人愛好,設(shè)計(jì)開發(fā)一個(gè)VB應(yīng)用小程序。要能體現(xiàn)出: 1.《VB程序設(shè)計(jì)》各種語(yǔ)句的綜合使用能力; 2.《VB......

        VB程序設(shè)計(jì)教學(xué)方法探討(精選五篇)

        VB程序設(shè)計(jì)教學(xué)方法探討 來(lái)源:中國(guó)論文下載中心 [ 09-06-29 08:44:00 ] 作者:朱倩 編輯:studa090420 [摘 要]本文就中職學(xué)校VB課程的教學(xué)方法,以及如何提高學(xué)生程序開發(fā)能力進(jìn)......

        初中VB程序設(shè)計(jì)教學(xué)方法初探

        初中VB程序設(shè)計(jì)教學(xué)方法初探 摘 要:本文從對(duì)教學(xué)內(nèi)容進(jìn)行適當(dāng)?shù)慕Y(jié)構(gòu)調(diào)整以適應(yīng)學(xué)生認(rèn)知規(guī)律、合適的教學(xué)方法是完成教學(xué)目標(biāo)的保障、采用靈活多樣的教學(xué)手法等三個(gè)方面對(duì)初中......

        《VB程序設(shè)計(jì)》課程教學(xué)大綱

        《VB程序設(shè)計(jì)》課程教學(xué)大綱 課程名稱:VB程序設(shè)計(jì) 課程編號(hào):xxxxxx 課程學(xué)分:x學(xué)分 課程學(xué)時(shí):96學(xué)時(shí) 課程安排:一年級(jí)下學(xué)期 課程性質(zhì):專業(yè)必修課 一、教學(xué)目的和任務(wù) 《VB程序設(shè)......

        vb程序設(shè)計(jì)實(shí)驗(yàn)心得(大全)

        vb程序設(shè)計(jì)實(shí)驗(yàn)心得 vb程序設(shè)計(jì)實(shí)驗(yàn)心得一:數(shù)據(jù)庫(kù)VB課程設(shè)計(jì)心得體會(huì) 數(shù)據(jù)庫(kù)課程設(shè)計(jì)大賽的塵囂漸漸遠(yuǎn)去,懷著對(duì)這次大賽的些許不舍,懷著對(duì)當(dāng)初課程設(shè)計(jì)開始時(shí)候的豪情萬(wàn)丈的......