第一篇:上機材料
Strlen只能獲取char類型數(shù)組的長度 Char str[20];Cin.getline(str,20);
String str;Getline(cin,str)
Getchar()清除上一個換行符
Fabs()函數(shù)求絕對值
#include
#pragma once
功能函數(shù)寫在主函數(shù)之前時要聲明
靜態(tài)分配&動態(tài)分配
內(nèi)存的靜態(tài)分配和動態(tài)分配的區(qū)別主要是兩個:
一是時間不同。靜態(tài)分配發(fā)生在程序編譯和連接的時候。動態(tài)分配則發(fā)生在程序調(diào)入和執(zhí)行的時候。
二是空間不同。堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由函數(shù)malloc進行分配。不過棧的動態(tài)分配和堆不同,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現(xiàn)。
對于一個進程的內(nèi)存空間而言,可以在邏輯上分成3個部份:代碼區(qū),靜態(tài)數(shù)據(jù)區(qū)和動態(tài)數(shù)據(jù)區(qū)。動態(tài)數(shù)據(jù)區(qū)一般就是“堆?!薄!皸?stack)”和“堆(heap)”是兩種不同的動態(tài)數(shù)據(jù)區(qū),棧是一種線性結(jié)構(gòu),堆是一種鏈式結(jié)構(gòu)。進程的每個線程都有私有的“?!?,所以每個線程雖然代碼一樣,但本地變量的數(shù)據(jù)都是互不干擾。一個堆??梢酝ㄟ^“基地址”和“棧頂”地址來描述。全局變量和靜態(tài)變量分配在靜態(tài)數(shù)據(jù)區(qū),本地變量分配在動態(tài)數(shù)據(jù)區(qū),即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。
一般,用static修飾的變量,全局變量位于靜態(tài)數(shù)據(jù)區(qū)。函數(shù)調(diào)用過程中的參數(shù),返回地址,EBP和局部變量都采用棧的方式存放。
動、靜態(tài)內(nèi)存分配比較可以知道動態(tài)內(nèi)存分配相對于靜態(tài)內(nèi)存分配的特點:
1、不需要預先分配存儲空間;
2、分配的空間可以根據(jù)程序的需要擴大或縮小。
要實現(xiàn)根據(jù)程序的需要動態(tài)分配存儲空間,就必須用到malloc函數(shù).malloc函數(shù)的原型為:void *malloc(unsigned int size)其作用是在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為size的連續(xù)空間。其參數(shù)是一個無符號整形數(shù),返回值是一個指向所分配的連續(xù)存儲域的起始地址的指針。還有一點必須注意的是,當函數(shù)未能成功分配存儲空間(如內(nèi)存不足)就會返回一個NULL指針。所以在調(diào)用該函數(shù)時應該檢測返回值是否為NULL并執(zhí)行相應的操作。
堆&棧
堆:順序隨意 棧:先進后出
一個由c/C++編譯的程序占用的內(nèi)存分為以下幾個部分
1、棧區(qū)(stack)— 由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié) 構(gòu)中的棧。
2、堆區(qū)(heap)— 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收。
注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表
3、全局區(qū)(靜態(tài)區(qū))(static)—,全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在
一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。管理員創(chuàng)建題庫(把題條加入題庫)
-系統(tǒng)根據(jù)管理員輸入的某些條件隨機生成試題Grasp之信息專家模式 信息專家模式(Information Expert)是GRASP模式中解決類的職責分配問題的最基本的模式。
問題:
當我們?yōu)橄到y(tǒng)發(fā)現(xiàn)完對象和職責之后,對象設計和職責分配的基本原則(職責將分配給哪個對象執(zhí)行)是什么?
解決方案:(將職責分配給信息專家,信息專家是指具有履行職責所需信息的類。)
職責的執(zhí)行需要某些信息(information),把職責分配給該信息的擁有者。
換句話說,某項職責的執(zhí)行需要某些資源,只有擁有這些資源的對象才有資格執(zhí)行職責。這有點類似現(xiàn)實世界的“有能者為之”的概念。你有建筑知識,可以去執(zhí)行蓋樓的職責;你有法律知識,可以去裁判案件等等。
滿足了面向?qū)ο笤O計的封裝性的設計,一般情況下都會滿足Information Expert模式。因為Information Expert是對類的屬性(信息),以及對類的屬性的操作的封裝,它符合對象封裝性的概念。優(yōu)點:
-信息的擁有者類同時就是信息的操作者類,可以減少不必要的類之間的關聯(lián)。GRASP之創(chuàng)建者模式
創(chuàng)建者模式(Creator)是GRASP模式中解決類的實例的創(chuàng)建職責問題的模式。問題
類的實例的創(chuàng)建職責,應該分配給什么樣的類?或者說類的實例應該由誰創(chuàng)建? Creator模式所提倡的解決方案
以下條件之一為真的情況,類A的實例的創(chuàng)建職責就分配給類B。1,B包含A 2,B聚集A 3,B記錄A 4,B頻繁使用A 5,B有A初始化數(shù)據(jù)
Creator模式提倡類的實例(對象)創(chuàng)建職責由聚集或包含該對象的對象創(chuàng)建。
注:Creator模式只是一個原則,如果類A,B之間沒有包含或聚集關系,應該先考案是否有“B記錄A”,或者“B有A初始化數(shù)據(jù)”的關系,然后是“B頻繁使用A”的關系。另外,作為代替方案,一般的采用工廠(Factory)創(chuàng)建方案。如果不遵循Creator模式,把類的實例的創(chuàng)建職責交給無關的類,類之間的關系變得復雜化,降低系統(tǒng)的可維護性和可擴展性。
一般來說,應用Creator模式,可以從上之下設計好類之間的包含或聚集關系階層圖,讓每個類負責創(chuàng)建自己包含的類的實例。應用Creator模式的好處有利于類或組件的重用降低耦合性
Creator模式的應用例
為了更清楚地說明Creator模式,我們舉一個GUI的例子:
有一個用戶窗口MainWindow,包含Menu,ToolBar,Dialog等,Dialog上布置有Textbox,Button等元素。
我們應用Creator模式,先為它們設計好具有階層關系的類圖,如下:
因為MyMenu,MyToolBar,MyDialog由MainWindow所包含,MyTextbox,MyButton被MyDialog包含,MainWindow由Main類調(diào)用。
根據(jù)Creator模式所提倡的方法,它們的實例的創(chuàng)建職責的分配應該是: MainWindow的實例由Main創(chuàng)建;
MyMenu,MyToolbar,MyDialog的實例由MainWindow創(chuàng)建; MyTextbox,MyButton的實例由MyDialog創(chuàng)建。
反過來,如果MyMenu,MyToolBar,MyDialog等實例的創(chuàng)建都放在Main類里,那么Main就跟它們產(chǎn)生一種“關聯(lián)”關系,如果MyMenu,MyToolBar,MyDialog等發(fā)生修改,Main也不得不跟著一起修改,也就是說大大增強了Main類跟它們之間的耦合關系;而 Main類本身,也聚集了多余的實例創(chuàng)建功能,降低了Main類的聚合性。
GRASP High Cohesion PatternGRASP之低耦合模式
低耦合模式(Low Coupling)是GRASP模式中為降低類之間的關聯(lián)程度,適應可變性而提出的面向?qū)ο笤O計的原則性模式。高內(nèi)聚(High Cohesion)與低耦合(Low Coupling)模式是GRASP其他模式的根本。問題
怎么做才能降低類之間關聯(lián)程度,能適應需求的變化呢? Low Coupling模式所提倡的解決方案
為類分配職責時,應該盡量降低類之間的關聯(lián)關系(耦合性)。亦即,應該以降低類之間的耦合關系作為職責分配的原則。
所謂耦合,是指多個物體(類)之間的物理或者意思上的關聯(lián)程度。在面向?qū)ο蠓椒ㄖ?,類是最基本的元素,耦合主要指不同類之間相互關聯(lián)的緊密程度。面向?qū)ο罄锏年P聯(lián),主要指一個類對另一個類的調(diào)用,聚合(包含),參數(shù)傳遞等關系。
比如,所謂2個關聯(lián)得非常緊密的類(高耦合),是指其中一個類發(fā)生變化(修改)時,另一個類也不得不跟著發(fā)生變化(修改)。
面向?qū)ο笤O計要求類之間滿足“低耦合”原則,它是衡量一個設計是否優(yōu)良的一個重要標準,因為“低耦合”有助于使得系統(tǒng)中某一部分的變化對其它部分的影響降到最低程度。應用High Cohesion模式的好處GRASP之控制器模式
控制器模式(Controller)是GRASP模式中解決事件處理職責問題的模式。問題
在UI層之外,應該由哪個類來處理(控制)系統(tǒng)操作(事件)呢?或者說,當觸發(fā)一個系統(tǒng)事件時,應該把對事件的處理職責分配給UI層之外的哪個層呢? Controller模式所提倡的解決方案
把系統(tǒng)事件的處理職責分配給Controller(控制器)類。擔當Controller(控制器)類角色的候補類可能為:
-系統(tǒng)全體,設備,子系統(tǒng)等的表現(xiàn)類(Facade Controller)
-系統(tǒng)事件發(fā)生的用例的控制類,通常被命名為Handler,Coordinator,Session等(用例或Session的控制器)。整個系統(tǒng)事件都使用同一個控制器。
Controller模式相當于著名的MVC設計模式的C(Controller)部分。
類似于J2EE核心模式中的Front Controller模式(我們會在其它文章中介紹Front Controller模式)。
Controller模式提倡用一個專門的類來處理所有的系統(tǒng)事件?;蛘哒fController模式把所有系統(tǒng)事件的處理職責分配給一個專門的類集中處理。應用Controller模式的好處
應用Controller模式的系統(tǒng),對系統(tǒng)事件進行集中處理,所以:有利于共通處理(前處理,后處理等)。
-變化的高適應能力。能夠把變化的修改范圍控制在最小范圍(控制器)之內(nèi)。
Controller模式的應用例 MVC模式。
MVC模式
MVC模式Model-View-Controller頭字母的縮寫,中文翻譯為“模型-視圖-控制器”模式(或者模型)。該模式把一個GUI應用劃分為業(yè)務邏輯處理(M),畫面表示(V),控制(C)三部分,并以此為基礎進行設計和開發(fā)。
在設計和開發(fā)應用系統(tǒng)時,往往需要考慮系統(tǒng)的可維護性,可擴展性,可重用性等;而且,一個大規(guī)模的系統(tǒng)開發(fā),往往都是多人分工合作,為了開發(fā)上的效率性考慮,一般都安排不同的專家(開發(fā)人員)負責不同的領域擔當不同的工作。MVC的構(gòu)成要素:
MVC模式有Model,View,Controller三部分構(gòu)成。Model 模型。主要用來負責業(yè)務邏輯的處理,數(shù)據(jù)的保持。Model是MVC模式的核心部分,它也是一個應用需要實現(xiàn)的最主要的部分:進行業(yè)務邏輯的處理。View 視圖。負責數(shù)據(jù)的輸出,畫面的表示。Controller 控制器。負責接收從視圖發(fā)送過來的數(shù)據(jù),同時控制Model與View部分。它的主要任務是控制Model與View,所以被稱為控制器。
MVC模式輸入輸出流程圖: 1,Controller接收用戶輸入
2,Controller調(diào)用Model進行業(yè)務邏輯處理(控制)3,Controller通知/調(diào)用View進行畫面描畫處理(控制)4,View根據(jù)需要適當參照Model的值 5,View進行畫面描畫處理
使用MVC模式,分離模型、視圖與控制器,使得這三部分功能相對獨立,一方面可以讓系統(tǒng)的設計開發(fā)工作分工明確,方便開發(fā)人員的互相合作;另一方面,按照MVC模式劃分的系統(tǒng)的各部分功能保持獨立,有利于組件復用,例如,一個模型可以對應多個顯示視圖,也就是說,同一套業(yè)務邏輯只要改變視圖便可對應不同的用戶界面。
GRASP Polymorphism Pattern避免重復代碼
-避免重復的分歧條件
-易擴展。只要實現(xiàn)了統(tǒng)一的通用接口,便可實現(xiàn)行為的擴展
Polymorphism模式的應用例
上面的例子:物體的移動行為,應用Polymorphism設計模式,它的類圖便是:
如果我們需要擴展“移動”行為,只需簡單地創(chuàng)建一個實現(xiàn)IRunner接口的類。其他應用Polymorphism模式的例
設計模式之Command策略模式 [GoF] Dependency Inversion Principle(DIP)GRASP之純虛構(gòu)模式
純虛構(gòu)模式(Pure Fabrication)是GRASP擴展模式之一,它把非問題領域中的職責分配給人工定義的類。問題
非問題領域中的職責應該分配給誰?或者說,按照信息專家等模式分配職責時,存在某些不恰當?shù)穆氊煏r,應該怎么做?
所謂不恰當?shù)穆氊?,是指難以分配的職責:在保證高內(nèi)聚,低耦合的條件下,某些職責難以分配給現(xiàn)存的任何問題領域里的類。Pure Fabrication模式所提倡的解決方案 Pure Fabrication模式提倡把那些非問題領域的職責分配給那些人工生成的或者容易此類職責的概念類。
Domain Class的概念
我們設計對象的時候應該盡量保持與現(xiàn)實世界里的對象一致。這種與現(xiàn)實世界里的對象保持一致的從業(yè)務分析中抽象出來的類叫做“Domain Class”。它相當于上述問題領域里的類。比如一個簡單的用例:用戶注冊。用戶就是一個“Domain Class”,它是現(xiàn)實世界里的業(yè)務對象。相當于這里的“問題領域里的類”。
用戶注冊需要操作數(shù)據(jù)庫,【數(shù)據(jù)庫操作】是系統(tǒng)功能實現(xiàn)的一個必需功能,它不是現(xiàn)實世界里存在的業(yè)務對象,它是一個非Domain Class。如果把【數(shù)據(jù)庫操作】看作一個行為職責,它就相當于這里所說的“非問題領域里的職責”。一般來說,Domain Class與非Domain Class的功能如果聚集在一個類里,就破壞了“高內(nèi)聚”原則。
應用Pure Fabrication模式的好處
-高內(nèi)聚。不必分配問題領域以外的職責給各Domain類,從而保證各Domain類內(nèi)部功能上的高度聚集性。
-低耦合。問題領域以外的職責被分配給第三方非Domain類,一方面可以降低各Domain類之間的關聯(lián)程度,另一方面可以比較漂亮地整合系統(tǒng)的各方面的職責。
-重用性。各Domain類由于功能上的聚集與關聯(lián)度的降低,可以更容易地得到重用。
Pure Fabrication模式的應用例
以上述“用戶注冊”的用例為例,對于問題領域里的類“用戶(User)”,如果把“數(shù)據(jù)庫操作的職責”分配給“用戶(User)”,那么User類的內(nèi)聚性大大降低。
應用Pure Fabrication模式,應該人工定義一個數(shù)據(jù)庫管理的概念類UserDbMgr,把數(shù)據(jù)庫操作的功能分配給它完成。如圖:
如圖,分離Domain類User與非Domain類UserDbMgr,User類只保持問題領域中的信息。保證了高內(nèi)聚性,和易重用性。
GRASP Indirection Pattern中介者模式[GoF]
GRASP Protected Variations Pattern高內(nèi)聚。具體的功能在各子類中實現(xiàn),各類的內(nèi)部功能具有高度聚集性。
-低耦合。用戶類只跟穩(wěn)定接口通信,減少了跟其它陌生對象的關聯(lián)的機會,降低了類之間的耦合性。
Protected Variations模式的應用例
例:把一段字符串保存到文件,打印機等輸出設備。應用Protected Variations模式的類圖:
GoF的23種模式
1.創(chuàng)建型模式
前面講過,社會化的分工越來越細,自然在軟件設計方面也是如此,因此對象的創(chuàng)建和對象的使用分開也就成為了必然趨勢。因為對象的創(chuàng)建會消耗掉系統(tǒng)的很多資源,所以單獨對對象的創(chuàng)建進行研究,從而能夠高效地創(chuàng)建對象就是創(chuàng)建型模式要探討的問題。這里有6個具體的創(chuàng)建型模式可供研究,它們分別是:
簡單工廠模式(Simple Factory);
工廠方法模式(Factory Method);
抽象工廠模式(Abstract Factory); 創(chuàng)建者模式(Builder);
原型模式(Prototype);
單例模式(Singleton)。
說明:嚴格來說,簡單工廠模式不是GoF總結(jié)出來的23種設計模式之一。2.結(jié)構(gòu)型模式
在解決了對象的創(chuàng)建問題之后,對象的組成以及對象之間的依賴關系就成了開發(fā)人員關注的焦點,因為如何設計對象的結(jié)構(gòu)、繼承和依賴關系會影響到后續(xù)程序的維護性、代碼的健壯性、耦合性等。對象結(jié)構(gòu)的設計很容易體現(xiàn)出設計人員水平的高低,這里有7個具體的結(jié)構(gòu)型模式可供研究,它們分別是:
外觀模式(Facade);
適配器模式(Adapter);
代理模式(Proxy);
裝飾模式(Decorator);
橋模式(Bridge);
組合模式(Composite);
享元模式(Flyweight)。
3.行為型模式
在對象的結(jié)構(gòu)和對象的創(chuàng)建問題都解決了之后,就剩下對象的行為問題了,如果對象的行為設計的好,那么對象的行為就會更清晰,它們之間的協(xié)作效率就會提高,這里有11個具體的行為型模式可供研究,它們分別是:
模板方法模式(Template Method);
觀察者模式(Observer);
狀態(tài)模式(State);
策略模式(Strategy);
職責鏈模式(Chain of Responsibility); 命令模式(Command);
訪問者模式(Visitor);
調(diào)停者模式(Mediator);
備忘錄模式(Memento);
迭代器模式(Iterator);
解釋器模式(Interpreter)。
敏捷開發(fā)以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發(fā)。在敏捷開發(fā)中,軟件項目在構(gòu)建初期被切分成多個子項目,各個子項目的成果都經(jīng)過測試,具備可視、可集成和可運行使用的特征。換言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。
第二篇:上機實驗報告格式
請各位同學按照下列格式寫:否則按照0分記
上機實驗報告格式
Matlab學習第?次上機實驗報告(第?次)
姓名:???班級:???上機時間:??????
1.上機內(nèi)容
2.建模及算法分析
3.程序
4.小結(jié)
5.參考文獻
將文檔發(fā)到我的郵箱里面
learn_matlab@163.com
第三篇:上機實驗報告
一. 題目1. 建立一個學生檔案,內(nèi)容包括學號,姓名,年齡,性別,數(shù)學,物理和英語3門功課成績。要求實現(xiàn)以下功能:1)數(shù)據(jù)輸入;2)查詢某個學生的成績;3)按平均排列輸出;4)統(tǒng)計某門課各分數(shù)段人數(shù);5)刪除某個學生記錄;2. 編程實現(xiàn)對二位數(shù)進行加,減,乘運算,每運行一次程序做10道題,完成后給出成績(每題10分)。二. 設計思想和模塊劃分1.1.先定義所需要的條件,例如,姓名,學號,性別,三門功課的成績,平均分等。2.輸入姓名,學號,性別,年齡,三門功課的成績后,就輸出相應的姓名,學號,性別,年齡,三門功課的成績。3.打印表頭;4.在求出平均分,并打印出平均分。5.在查找學生,并打印出學生的相關資料;并按照平均分的高低排列;6.在統(tǒng)計學生各科成績是否》=60分,如果是就是通過,否就是沒通過,最后打印出最后的結(jié)果。7.刪除學生,選中刪除的學生,如果確定要,那么該學生的一切記錄就變?yōu)?;2.1.隨機調(diào)用函數(shù),產(chǎn)生兩個其值為10到99的隨機整數(shù)分別放在c,d中用作運算時的運算數(shù)。2.隨機調(diào)用函數(shù),產(chǎn)生一個值為1到3 的隨機整數(shù)放入b中,用來選擇不同的運算。根據(jù)b的值選擇不同的運算。當b=1時,去進行c+d的運算練習;當b=2 時,去進行c-d的運算練習;當b=3時,去進行c×d的運算練習。每完成一個算題就給出是否正確的信息。3.根據(jù)答案正確與否統(tǒng)計。正確時,顯示’right’;錯誤時,顯示’wrong’。4.步驟1.2.3.4.重復10次。5.輸出學生成績。三. 運行結(jié)果1.Input the 1 student :num:03name:wfage:18sex:fmath:98phy:75eng:65Input the 2 student :num:06name:scage:17sex:fmath:78phy:45eng:65Input the 3 student :num:09name:ytage:17sex:mmath:69phy:75eng:501.readin 2.finds 3.del 4.tj 5.exit1-----------------------------table----num name age sex math phy eng ave------3 wf 18 f 98.0 75.0 65.0 79.3------9 yt 17 m 69.0 75.0 50.0 64.7-------6 sc 17 f 78.0 45.0 65.0 62.7-------1.readin 2.finds 3.del 4.tj 5.exit2Into number:3---num name age sex math phy eng ave---3 wf 18 f 98.0 75.0 65.0 79.3----1.readin 2.finds 3.del 4.tj 5.exit3Into number:6---num name age sex math phy eng ave---6 sc 17 f 78.0 45.0 65.0 62.6---true? Y/Ny1----------------table------------------num name age sex math phy eng ave----3 wf 18 f 98.0 75.0 65.0 79.3-----9 yt 17 m 69.0 75.0 50.0 64.7-----0 0 0 f 0.0 0.0 0.0 0.0-----1.readin 2.finds 3.del 4.tj 5.exit4 1.input the math 2.input the phy 3.input the eng 1math: pass num is :3 no pass num is :02.32+82=114right!97*15=1455right!99-58=41right!76-66=10right!58+13=71right!37+49=86right!99+52=151right!49*69=5462wrong!73-38=31wrong!86+34=120right!mark is 80四. 主要錯誤改正方法1.在本題的編寫過程中常出現(xiàn)begin 和end 不配對,只要始它們的個數(shù)相同就可以了,就可以了。在程序中常出現(xiàn)的’unknown identifier’沒有定義的錯誤,只要在程序前加上定義,就可以了。還有就是type mismatch’的類型不匹配,只要根據(jù)前后內(nèi)容,重新定義,就可以了。2.在本題編寫中,題目要求是兩個兩位數(shù)運算,如果寫成c:=random(100)在運行過程中,就會出現(xiàn)一位數(shù)運算,只要把它寫成c:=random(90)+10,就可以了。五. 實習小結(jié)1.第一題的程序編寫比較復雜,需要較多的定義,因而在后面的程序部分,就常出現(xiàn)標識符重復,而導致的類型不匹配。還有就是每個部分編好后,上下不能連接,而無法調(diào)用。2.第二題較第一題簡單,和書上的例題類似,所以,比較簡單,但從中也出現(xiàn)一些不問題。以上兩大題中出現(xiàn)的問題,要在同學的幫助下,才能完成??偟膩碚f兩題程序比較困難六. 程序清單1.program twins;const m=3;n=3;typestudent=recordnum:integer;name:string[3];age:integer;sex:char;s:array[1..n] of real;math,eng,phy:real;ave:real;end;sarr=array[1..m] of student;ta=array [1..m] of student;f=string[6];varstu:sarr;ct:ta;k,d:integer;procedure readin(var stu:sarr);const wrong='0<=data<=100 ,again!';var j,i:integer;a:student;beginwriteln;writeln('Input ',m,' num name sex math phy eng',' of student.');for j:=1 to m dobeginwriteln;writeln('Input the ',j,' student :');with a dobeginwrite('num:');readln(num);write('name:');readln(name);write('age:');readln(age);write('sex:');readln(sex);while(sex<>'m')and(sex<>'f')dobeginwrite('sex:');readln(sex)end;for i:=1 to n do begincase i of1:begin write('math:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('math:');readln(s[i]);end;end;2:begin write('phy:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('phy:');readln(s[i]);end;end;3:begin write('eng:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('eng:');readln(s[i]);end;end;end;end;stu[j]:=a;end;writeln;end;end;procedure ave(var stu:sarr);var j,i:integer;k:real;beginfor j:=1 to m dobegink:=0;with stu[j] dobeginfor i:=1 to n do k:=k+s[i];ave:=k/nend;end;end;procedure px(var stu:sarr);var tm:ta;j,i,p:integer;beginfor j:=1 to m dobeginp:=j;for i:=j+1 to m doif stu[i].ave>stu[p].ave then p:=i;tm[1]:=stu[p];stu[p]:=stu[j];stu[j]:=tm[1];end;end;procedure head(ct:ta);var i:integer;beginwrite(' ');for i:=1 to 72 do write('-');writeln;write('',' num':4,' ','name':9,' ','age':8,' ','sex':5,' ','math':6,' ','phy':9,' ','eng':8,' ');writeln('ave':6,' ');write(' ');for i:=1 to 72 do write('-');writeln;with ct[1] dobeginwrite('',num:7,' ',name:8,' ',age:8,' ',sex:5,' ');for i:=1 to n do write(s[i]:7,' ');write(ave:10,' ');writeln;end;write(' ');for i:=1 to 72 do write('-');writeln;end;procedure find(var stu:sarr);var n,i:integer;u:boolean;beginu:=true;while u dobeginwrite('Into number:');readln(n);for i:=1 to m dobeginif stu[i].num=n then beginct[1]:=stu[i];u:=false;d:=iend;end;end;end;procedure del(var stu:sarr);var i:integer;b:char;beginhead(ct);write('true? Y/N');readln(b);if b='y' then begin write('1');with stu[d] dobeginnum:=0;name:='0';age:=0;sex:='f';for i:=1 to n do s[i]:=0;ave:=0end;endelseend;procedure tj(var stu:sarr);var w1,q1,q2,num,j:integer;h1,h2,h3:boolean;beginh1:=false;h2:=false;h3:=false;q1:=0;q2:=0;writeln(' ':30,'1.input the math 2.input the phy 3.input the eng ');readln(w1);case w1 of1:h1:=true;2:h2:=true;3:h3:=true;end;if h1 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].math>=60 thenq1:=q1+1elseq2:=q2+1;writeln('math:');end;if h2 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].phy>=60 thenq1:=q1+1elseq2:=q2+1;writeln('phy:');end;if h3 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].eng>=60 thenq1:=q1+1elseq2:=q2+1;writeln('eng:');end;end;end;end;writeln(' ':5,'pass num is :',q1);writeln(' ':5,'no pass num is :',q2);end;procedure head1(var stu:sarr);var j,i:integer;beginwriteln('----------------table--------------':60);writeln;write(' ');for i:=1 to 72 do write('-');writeln;write('',' num':4,' ','name':9,' ','age':8,' ','sex':5,' ','math':6,' ','phy':9,' ','eng':8,' ');writeln('ave':6,' ');write(' ');for i:=1 to 72 do write('-');writeln;for j:=1 to m do beginwith stu[j] dobeginwrite('',num:7,' ',name:8,' ',age:8,' ',sex:5,' ');for i:=1 to n do write(s[i]:7:1,' ');write(ave:10:1,' ');writeln;end;write(' ');for i:=1 to 72 do write('-');writeln;end;end;beginreadin(stu);ave(stu);k:=0;while k<>5 dobeginwriteln('1.readin 2.finds 3.del 4.tj 5.exit');read(k);readln;while(k<>1)and(k<>2)and(k<>3)and(k<>4)and(k<>5)dobeginwriteln(' mistake,please again');read(k)end;case k of1: begin px(stu);head1(stu)end;2: begin find(stu);head(ct)end;3: begin find(stu);del(stu);px(stu);head1(stu)end;4: begin tj(stu);end;5: writeln('exit!');end;end;end..2.program shadow;var a,b,c,d,e:integer;right:boolean;procedure s1;beginwriteln('right!');right:=trueend;procedure s2;beginwriteln('wrong!');right:=falseend;procedure s3(x,y:integer);var h:integer;beginwrite(x,'+',y,'=');readln(h);if h=x+y then s1else s2 end;procedure s4(x,y:integer);var h,w:integer;beginif x 華中科技大學文華學院 信息論上機實驗報告 專業(yè)年級:10級通信工程** 學號:1001******** 姓名:** 指導教師:*** 2012年 04月30日 目錄 等長編碼.........................2 1.1 求信源的熵...................2 1.2 求等長碼碼長.................2 1.3 求等長長等編碼...............3 1.4 等長編碼全部源代碼...........3 1.5MATLAB仿真及其截圖..........5 2霍夫曼編碼.......................6 2.1 霍夫曼編碼源代碼.............6 2.2MATLAB仿真及其截圖..........9 3游程編碼.........................9 3.1 游程編碼源代碼...............9 3.2 MATLAB仿真及其截圖..........11 4 學習心得........................12 5 參考書籍........................14 for i=1:1: 4;s=i;t=lc;for j=1:1:lc;if s>power(2,t)/2;A(i,lc-t+1)=1;s=s-power(2,t)/2;else A(i,lc-t+1)=0;end t=t-1;end end 1.4全部源代碼 s=[0.25,0.25,0.25,0.25];len=size(s,2);if sum(s)~=1 error('s is not a complete set');end h=0;for i=1:1:len h=h-s(i)*log(s(i))/log(2); 結(jié)果:h= 2、lc= 2、A=00 01 10 11 1.5 MATLAB仿真及其截圖 2、霍夫曼編碼 2.1霍夫曼編碼源代碼 T(t-1)=r;T(t)=0;T=fliplr(sort(T));t=t-1;end B;%輸出編碼表 END1=sym('[0,1]');%給最后一列的元素編碼 END=END1;t=3;d=1;for j=n-2:-1:1%從倒數(shù)第二列開始依次對各列元素編碼 for i=1:t-2 if i>1 & B(i,j)==B(i-1,j)d=d+1;else d=1;end B(B(n,j+1),j+1)=-1;temp=B(:,j+1); x=find(temp==B(i,j));END(i)=END1(x(d)); 2.2MATLAB仿真及其截圖 3、游程編碼 3.1、游程編碼源代碼 I=checkerboard(10,2);[m,n]=size(I);J=[];for i=1:m 壓縮圖像大小: Name Size Bytes Class J 1x400 3200 double array 圖像壓縮比:4 3.2 MATLAB仿真及其截圖 就直接向他們求教,雖然有些時候他們也不一定能解答出來,但最少也能給我一些提示。最后有時候也靠自己,慢慢的想,慢慢的翻資料一遍一遍的輸入,校正,最后就做出來了。雖然有些題目我也不知道自己的對不對,但是通過自己動手把它做出結(jié)果了我就覺得有收獲了。 Matlab的課比較少,課堂上學到的東西也不是特別的多,但是通過實驗,我自學了許多東西,也完成了學習任務,同時也鍛煉了自己的個人能力 2012/5/3 314- 數(shù)據(jù)庫上機心得體會 數(shù)據(jù)庫的課程結(jié)束了,通過對數(shù)據(jù)庫的學習也初步掌握其各方面的知識,數(shù)據(jù)庫的功能是強大的,面對目前的信息化社會,在整理、查詢、分析數(shù)據(jù)方面是一款強有力的工具。 學習的目的在于將知識能合理順利的運用,將書本知識化為自己所用,是一個不知到知道,了解完善應用的過程,尤其是計算機方面的課程更是如此,必要的上機練習是必不可少的。之前的計算機語言、匯編語言等,都是在上機練習中得到順利掌握。面對這學期的數(shù)據(jù)庫也是如此的過程,在開始對理論知識的學習,然后進行上機練習,目的在于讓我們更好的掌握其知識,熟悉數(shù)據(jù)庫編程語言等。 當然上機可也不是輕松是課程,在課前還是應該做些相應的準備。首先在理論知識的學習中必須先打好基礎,經(jīng)過預習、聽課、復習、作業(yè)四個環(huán)節(jié)的學習,對于這門課的理論知識有了一定了解,才便于我們的上機課程,理論與上機的結(jié)合這樣才有助于我們更好的掌握知識。 在數(shù)據(jù)庫上機中主要是用到的SQL(Structured Query Language)結(jié)構(gòu)化查詢語言,它是一種數(shù)據(jù)庫查詢和程序設計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關系數(shù)據(jù)庫系統(tǒng)。同時也是數(shù)據(jù)庫腳本文件的擴展名??梢詭臀覀冏龅矫嫦驍?shù)據(jù)庫執(zhí)行查詢、取回數(shù)據(jù)、插入新的記錄、更新數(shù)據(jù)庫中的數(shù)據(jù)、刪除記錄、創(chuàng)建新數(shù)據(jù)庫、新表和視圖、設置表、存儲過程和視圖的權(quán)限,功能非常強大。 學習數(shù)據(jù)庫的內(nèi)容是從數(shù)據(jù)庫、數(shù)據(jù)表的創(chuàng)建和修改開始的,表是建立關系數(shù)據(jù)庫的基本結(jié)構(gòu),用來存儲數(shù)據(jù)具有已定義的屬性,在表的操作過程中,有查看表信息、查看表屬性、修改表中的數(shù)據(jù)、刪除表中的數(shù)據(jù)及修改表和刪除表的操作。從課程中中讓我更明白一些知識,表是數(shù)據(jù)最重要的一個數(shù)據(jù)對象,表的創(chuàng)建好壞直接關系到數(shù)數(shù)據(jù)庫的成敗,表的內(nèi)容是越具體越好,但是也不能太繁瑣,以后在實際應用中多使用表,對表的規(guī)劃和理解就會越深刻。在編程方面是需要我們對于編程有邏輯思維能力及一定的編程技巧。在數(shù)據(jù)庫中插入表、表中的信息等都需要注意,不然很容易出錯。 通過上機練習讓我比較容易的掌握理論知識的難點,以及一些平時不注意的問題,在上機練習的過程中需要對每個細節(jié)都要留心,這樣才不至于出錯,這就加強了我們對平時不注意的問題得到回應,從而加深了細節(jié)問題的處理方式。在上機的學習之后更加了解了表是數(shù)據(jù)最重要的一個數(shù)據(jù)對象,表的創(chuàng)建好壞直接關系到數(shù)數(shù)據(jù)庫的成敗,表的內(nèi)容應該如何設置比較好一些,需要具體,但是避免繁瑣,對表的概念和應用有了更深的理解。 上機的學習中也了解到數(shù)據(jù)庫的視圖和查詢。查詢可以通過SQL語言進行完成,這樣加深了查詢語句的基本結(jié)構(gòu),讓我們能更好的掌握其中語句,方便于我們后面的學習和應用;在視圖的操作中,也了解到了視圖是常見的數(shù)據(jù)庫對象,是提供查看和存取數(shù)據(jù)的另一種途徑,對查詢執(zhí)行的其中一些操作,可以使用視圖來完成。視圖的功能也是強大的,使用視圖不僅可以簡化數(shù)據(jù)操作,還可以提高數(shù)據(jù)庫的安全性,不僅可以檢索數(shù)據(jù),也可以通過視圖向基表中添加、修改和刪除數(shù)據(jù)。 在學習過程中也遇到了不少問題,積極詢問老師,和同學共同商討,查詢資料把問題得以解決,培養(yǎng)了解決問題的能力,查閱資料是很好的手段,在今后的學習過程中應該繼續(xù)發(fā)揚這些能力。數(shù)據(jù)庫的學習是在學習與探索中度過的,短暫的課程時間的學習是結(jié)束了,但其中學到了許多知識,也有諸多的問題需要今后去解決,學習一門課程,學到的是如何學會,而不是隨隨便便的學完,在今后還要自己強化各方面的知識,真正學以致用。通過這次的學習,我了解了數(shù)據(jù)庫的概念與重要性,還有今后的發(fā)展方向,明白數(shù)據(jù)庫的應用是廣泛的,不可小覷,在今后應該再進行加強學習。第四篇:信息論上機實驗報告
第五篇:數(shù)據(jù)庫上機心得體會