第一篇:上機材料
Strlen只能獲取char類型數組的長度 Char str[20];Cin.getline(str,20);
String str;Getline(cin,str)
Getchar()清除上一個換行符
Fabs()函數求絕對值
#include
#pragma once
功能函數寫在主函數之前時要聲明
靜態分配&動態分配
內存的靜態分配和動態分配的區別主要是兩個:
一是時間不同。靜態分配發生在程序編譯和連接的時候。動態分配則發生在程序調入和執行的時候。
二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由函數malloc進行分配。不過棧的動態分配和堆不同,他的動態分配是由編譯器進行釋放,無需我們手工實現。
對于一個進程的內存空間而言,可以在邏輯上分成3個部份:代碼區,靜態數據區和動態數據區。動態數據區一般就是“堆棧”。“棧(stack)”和“堆(heap)”是兩種不同的動態數據區,棧是一種線性結構,堆是一種鏈式結構。進程的每個線程都有私有的“棧”,所以每個線程雖然代碼一樣,但本地變量的數據都是互不干擾。一個堆棧可以通過“基地址”和“棧頂”地址來描述。全局變量和靜態變量分配在靜態數據區,本地變量分配在動態數據區,即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。
一般,用static修飾的變量,全局變量位于靜態數據區。函數調用過程中的參數,返回地址,EBP和局部變量都采用棧的方式存放。
動、靜態內存分配比較可以知道動態內存分配相對于靜態內存分配的特點:
1、不需要預先分配存儲空間;
2、分配的空間可以根據程序的需要擴大或縮小。
要實現根據程序的需要動態分配存儲空間,就必須用到malloc函數.malloc函數的原型為:void *malloc(unsigned int size)其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL并執行相應的操作。
堆&棧
堆:順序隨意 棧:先進后出
一個由c/C++編譯的程序占用的內存分為以下幾個部分
1、棧區(stack)— 由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結 構中的棧。
2、堆區(heap)— 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。
注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表
3、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在
一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。管理員創建題庫(把題條加入題庫)
-系統根據管理員輸入的某些條件隨機生成試題Grasp之信息專家模式 信息專家模式(Information Expert)是GRASP模式中解決類的職責分配問題的最基本的模式。
問題:
當我們為系統發現完對象和職責之后,對象設計和職責分配的基本原則(職責將分配給哪個對象執行)是什么?
解決方案:(將職責分配給信息專家,信息專家是指具有履行職責所需信息的類。)
職責的執行需要某些信息(information),把職責分配給該信息的擁有者。
換句話說,某項職責的執行需要某些資源,只有擁有這些資源的對象才有資格執行職責。這有點類似現實世界的“有能者為之”的概念。你有建筑知識,可以去執行蓋樓的職責;你有法律知識,可以去裁判案件等等。
滿足了面向對象設計的封裝性的設計,一般情況下都會滿足Information Expert模式。因為Information Expert是對類的屬性(信息),以及對類的屬性的操作的封裝,它符合對象封裝性的概念。優點:
-信息的擁有者類同時就是信息的操作者類,可以減少不必要的類之間的關聯。GRASP之創建者模式
創建者模式(Creator)是GRASP模式中解決類的實例的創建職責問題的模式。問題
類的實例的創建職責,應該分配給什么樣的類?或者說類的實例應該由誰創建? Creator模式所提倡的解決方案
以下條件之一為真的情況,類A的實例的創建職責就分配給類B。1,B包含A 2,B聚集A 3,B記錄A 4,B頻繁使用A 5,B有A初始化數據
Creator模式提倡類的實例(對象)創建職責由聚集或包含該對象的對象創建。
注:Creator模式只是一個原則,如果類A,B之間沒有包含或聚集關系,應該先考案是否有“B記錄A”,或者“B有A初始化數據”的關系,然后是“B頻繁使用A”的關系。另外,作為代替方案,一般的采用工廠(Factory)創建方案。如果不遵循Creator模式,把類的實例的創建職責交給無關的類,類之間的關系變得復雜化,降低系統的可維護性和可擴展性。
一般來說,應用Creator模式,可以從上之下設計好類之間的包含或聚集關系階層圖,讓每個類負責創建自己包含的類的實例。應用Creator模式的好處有利于類或組件的重用降低耦合性
Creator模式的應用例
為了更清楚地說明Creator模式,我們舉一個GUI的例子:
有一個用戶窗口MainWindow,包含Menu,ToolBar,Dialog等,Dialog上布置有Textbox,Button等元素。
我們應用Creator模式,先為它們設計好具有階層關系的類圖,如下:
因為MyMenu,MyToolBar,MyDialog由MainWindow所包含,MyTextbox,MyButton被MyDialog包含,MainWindow由Main類調用。
根據Creator模式所提倡的方法,它們的實例的創建職責的分配應該是: MainWindow的實例由Main創建;
MyMenu,MyToolbar,MyDialog的實例由MainWindow創建; MyTextbox,MyButton的實例由MyDialog創建。
反過來,如果MyMenu,MyToolBar,MyDialog等實例的創建都放在Main類里,那么Main就跟它們產生一種“關聯”關系,如果MyMenu,MyToolBar,MyDialog等發生修改,Main也不得不跟著一起修改,也就是說大大增強了Main類跟它們之間的耦合關系;而 Main類本身,也聚集了多余的實例創建功能,降低了Main類的聚合性。
GRASP High Cohesion PatternGRASP之低耦合模式
低耦合模式(Low Coupling)是GRASP模式中為降低類之間的關聯程度,適應可變性而提出的面向對象設計的原則性模式。高內聚(High Cohesion)與低耦合(Low Coupling)模式是GRASP其他模式的根本。問題
怎么做才能降低類之間關聯程度,能適應需求的變化呢? Low Coupling模式所提倡的解決方案
為類分配職責時,應該盡量降低類之間的關聯關系(耦合性)。亦即,應該以降低類之間的耦合關系作為職責分配的原則。
所謂耦合,是指多個物體(類)之間的物理或者意思上的關聯程度。在面向對象方法中,類是最基本的元素,耦合主要指不同類之間相互關聯的緊密程度。面向對象里的關聯,主要指一個類對另一個類的調用,聚合(包含),參數傳遞等關系。
比如,所謂2個關聯得非常緊密的類(高耦合),是指其中一個類發生變化(修改)時,另一個類也不得不跟著發生變化(修改)。
面向對象設計要求類之間滿足“低耦合”原則,它是衡量一個設計是否優良的一個重要標準,因為“低耦合”有助于使得系統中某一部分的變化對其它部分的影響降到最低程度。應用High Cohesion模式的好處GRASP之控制器模式
控制器模式(Controller)是GRASP模式中解決事件處理職責問題的模式。問題
在UI層之外,應該由哪個類來處理(控制)系統操作(事件)呢?或者說,當觸發一個系統事件時,應該把對事件的處理職責分配給UI層之外的哪個層呢? Controller模式所提倡的解決方案
把系統事件的處理職責分配給Controller(控制器)類。擔當Controller(控制器)類角色的候補類可能為:
-系統全體,設備,子系統等的表現類(Facade Controller)
-系統事件發生的用例的控制類,通常被命名為Handler,Coordinator,Session等(用例或Session的控制器)。整個系統事件都使用同一個控制器。
Controller模式相當于著名的MVC設計模式的C(Controller)部分。
類似于J2EE核心模式中的Front Controller模式(我們會在其它文章中介紹Front Controller模式)。
Controller模式提倡用一個專門的類來處理所有的系統事件。或者說Controller模式把所有系統事件的處理職責分配給一個專門的類集中處理。應用Controller模式的好處
應用Controller模式的系統,對系統事件進行集中處理,所以:有利于共通處理(前處理,后處理等)。
-變化的高適應能力。能夠把變化的修改范圍控制在最小范圍(控制器)之內。
Controller模式的應用例 MVC模式。
MVC模式
MVC模式Model-View-Controller頭字母的縮寫,中文翻譯為“模型-視圖-控制器”模式(或者模型)。該模式把一個GUI應用劃分為業務邏輯處理(M),畫面表示(V),控制(C)三部分,并以此為基礎進行設計和開發。
在設計和開發應用系統時,往往需要考慮系統的可維護性,可擴展性,可重用性等;而且,一個大規模的系統開發,往往都是多人分工合作,為了開發上的效率性考慮,一般都安排不同的專家(開發人員)負責不同的領域擔當不同的工作。MVC的構成要素:
MVC模式有Model,View,Controller三部分構成。Model 模型。主要用來負責業務邏輯的處理,數據的保持。Model是MVC模式的核心部分,它也是一個應用需要實現的最主要的部分:進行業務邏輯的處理。View 視圖。負責數據的輸出,畫面的表示。Controller 控制器。負責接收從視圖發送過來的數據,同時控制Model與View部分。它的主要任務是控制Model與View,所以被稱為控制器。
MVC模式輸入輸出流程圖: 1,Controller接收用戶輸入
2,Controller調用Model進行業務邏輯處理(控制)3,Controller通知/調用View進行畫面描畫處理(控制)4,View根據需要適當參照Model的值 5,View進行畫面描畫處理
使用MVC模式,分離模型、視圖與控制器,使得這三部分功能相對獨立,一方面可以讓系統的設計開發工作分工明確,方便開發人員的互相合作;另一方面,按照MVC模式劃分的系統的各部分功能保持獨立,有利于組件復用,例如,一個模型可以對應多個顯示視圖,也就是說,同一套業務邏輯只要改變視圖便可對應不同的用戶界面。
GRASP Polymorphism Pattern避免重復代碼
-避免重復的分歧條件
-易擴展。只要實現了統一的通用接口,便可實現行為的擴展
Polymorphism模式的應用例
上面的例子:物體的移動行為,應用Polymorphism設計模式,它的類圖便是:
如果我們需要擴展“移動”行為,只需簡單地創建一個實現IRunner接口的類。其他應用Polymorphism模式的例
設計模式之Command策略模式 [GoF] Dependency Inversion Principle(DIP)GRASP之純虛構模式
純虛構模式(Pure Fabrication)是GRASP擴展模式之一,它把非問題領域中的職責分配給人工定義的類。問題
非問題領域中的職責應該分配給誰?或者說,按照信息專家等模式分配職責時,存在某些不恰當的職責時,應該怎么做?
所謂不恰當的職責,是指難以分配的職責:在保證高內聚,低耦合的條件下,某些職責難以分配給現存的任何問題領域里的類。Pure Fabrication模式所提倡的解決方案 Pure Fabrication模式提倡把那些非問題領域的職責分配給那些人工生成的或者容易此類職責的概念類。
Domain Class的概念
我們設計對象的時候應該盡量保持與現實世界里的對象一致。這種與現實世界里的對象保持一致的從業務分析中抽象出來的類叫做“Domain Class”。它相當于上述問題領域里的類。比如一個簡單的用例:用戶注冊。用戶就是一個“Domain Class”,它是現實世界里的業務對象。相當于這里的“問題領域里的類”。
用戶注冊需要操作數據庫,【數據庫操作】是系統功能實現的一個必需功能,它不是現實世界里存在的業務對象,它是一個非Domain Class。如果把【數據庫操作】看作一個行為職責,它就相當于這里所說的“非問題領域里的職責”。一般來說,Domain Class與非Domain Class的功能如果聚集在一個類里,就破壞了“高內聚”原則。
應用Pure Fabrication模式的好處
-高內聚。不必分配問題領域以外的職責給各Domain類,從而保證各Domain類內部功能上的高度聚集性。
-低耦合。問題領域以外的職責被分配給第三方非Domain類,一方面可以降低各Domain類之間的關聯程度,另一方面可以比較漂亮地整合系統的各方面的職責。
-重用性。各Domain類由于功能上的聚集與關聯度的降低,可以更容易地得到重用。
Pure Fabrication模式的應用例
以上述“用戶注冊”的用例為例,對于問題領域里的類“用戶(User)”,如果把“數據庫操作的職責”分配給“用戶(User)”,那么User類的內聚性大大降低。
應用Pure Fabrication模式,應該人工定義一個數據庫管理的概念類UserDbMgr,把數據庫操作的功能分配給它完成。如圖:
如圖,分離Domain類User與非Domain類UserDbMgr,User類只保持問題領域中的信息。保證了高內聚性,和易重用性。
GRASP Indirection Pattern中介者模式[GoF]
GRASP Protected Variations Pattern高內聚。具體的功能在各子類中實現,各類的內部功能具有高度聚集性。
-低耦合。用戶類只跟穩定接口通信,減少了跟其它陌生對象的關聯的機會,降低了類之間的耦合性。
Protected Variations模式的應用例
例:把一段字符串保存到文件,打印機等輸出設備。應用Protected Variations模式的類圖:
GoF的23種模式
1.創建型模式
前面講過,社會化的分工越來越細,自然在軟件設計方面也是如此,因此對象的創建和對象的使用分開也就成為了必然趨勢。因為對象的創建會消耗掉系統的很多資源,所以單獨對對象的創建進行研究,從而能夠高效地創建對象就是創建型模式要探討的問題。這里有6個具體的創建型模式可供研究,它們分別是:
簡單工廠模式(Simple Factory);
工廠方法模式(Factory Method);
抽象工廠模式(Abstract Factory); 創建者模式(Builder);
原型模式(Prototype);
單例模式(Singleton)。
說明:嚴格來說,簡單工廠模式不是GoF總結出來的23種設計模式之一。2.結構型模式
在解決了對象的創建問題之后,對象的組成以及對象之間的依賴關系就成了開發人員關注的焦點,因為如何設計對象的結構、繼承和依賴關系會影響到后續程序的維護性、代碼的健壯性、耦合性等。對象結構的設計很容易體現出設計人員水平的高低,這里有7個具體的結構型模式可供研究,它們分別是:
外觀模式(Facade);
適配器模式(Adapter);
代理模式(Proxy);
裝飾模式(Decorator);
橋模式(Bridge);
組合模式(Composite);
享元模式(Flyweight)。
3.行為型模式
在對象的結構和對象的創建問題都解決了之后,就剩下對象的行為問題了,如果對象的行為設計的好,那么對象的行為就會更清晰,它們之間的協作效率就會提高,這里有11個具體的行為型模式可供研究,它們分別是:
模板方法模式(Template Method);
觀察者模式(Observer);
狀態模式(State);
策略模式(Strategy);
職責鏈模式(Chain of Responsibility); 命令模式(Command);
訪問者模式(Visitor);
調停者模式(Mediator);
備忘錄模式(Memento);
迭代器模式(Iterator);
解釋器模式(Interpreter)。
敏捷開發以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發。在敏捷開發中,軟件項目在構建初期被切分成多個子項目,各個子項目的成果都經過測試,具備可視、可集成和可運行使用的特征。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態。
第二篇:上機實驗報告格式
請各位同學按照下列格式寫:否則按照0分記
上機實驗報告格式
Matlab學習第?次上機實驗報告(第?次)
姓名:???班級:???上機時間:??????
1.上機內容
2.建模及算法分析
3.程序
4.小結
5.參考文獻
將文檔發到我的郵箱里面
learn_matlab@163.com
第三篇:上機實驗報告
一. 題目1. 建立一個學生檔案,內容包括學號,姓名,年齡,性別,數學,物理和英語3門功課成績。要求實現以下功能:1)數據輸入;2)查詢某個學生的成績;3)按平均排列輸出;4)統計某門課各分數段人數;5)刪除某個學生記錄;2. 編程實現對二位數進行加,減,乘運算,每運行一次程序做10道題,完成后給出成績(每題10分)。二. 設計思想和模塊劃分1.1.先定義所需要的條件,例如,姓名,學號,性別,三門功課的成績,平均分等。2.輸入姓名,學號,性別,年齡,三門功課的成績后,就輸出相應的姓名,學號,性別,年齡,三門功課的成績。3.打印表頭;4.在求出平均分,并打印出平均分。5.在查找學生,并打印出學生的相關資料;并按照平均分的高低排列;6.在統計學生各科成績是否》=60分,如果是就是通過,否就是沒通過,最后打印出最后的結果。7.刪除學生,選中刪除的學生,如果確定要,那么該學生的一切記錄就變為0;2.1.隨機調用函數,產生兩個其值為10到99的隨機整數分別放在c,d中用作運算時的運算數。2.隨機調用函數,產生一個值為1到3 的隨機整數放入b中,用來選擇不同的運算。根據b的值選擇不同的運算。當b=1時,去進行c+d的運算練習;當b=2 時,去進行c-d的運算練習;當b=3時,去進行c×d的運算練習。每完成一個算題就給出是否正確的信息。3.根據答案正確與否統計。正確時,顯示’right’;錯誤時,顯示’wrong’。4.步驟1.2.3.4.重復10次。5.輸出學生成績。三. 運行結果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.在本題的編寫過程中常出現begin 和end 不配對,只要始它們的個數相同就可以了,就可以了。在程序中常出現的’unknown identifier’沒有定義的錯誤,只要在程序前加上定義,就可以了。還有就是type mismatch’的類型不匹配,只要根據前后內容,重新定義,就可以了。2.在本題編寫中,題目要求是兩個兩位數運算,如果寫成c:=random(100)在運行過程中,就會出現一位數運算,只要把它寫成c:=random(90)+10,就可以了。五. 實習小結1.第一題的程序編寫比較復雜,需要較多的定義,因而在后面的程序部分,就常出現標識符重復,而導致的類型不匹配。還有就是每個部分編好后,上下不能連接,而無法調用。2.第二題較第一題簡單,和書上的例題類似,所以,比較簡單,但從中也出現一些不問題。以上兩大題中出現的問題,要在同學的幫助下,才能完成。總的來說兩題程序比較困難六. 程序清單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 華中科技大學文華學院 信息論上機實驗報告 專業年級: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); 結果: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%從倒數第二列開始依次對各列元素編碼 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仿真及其截圖 就直接向他們求教,雖然有些時候他們也不一定能解答出來,但最少也能給我一些提示。最后有時候也靠自己,慢慢的想,慢慢的翻資料一遍一遍的輸入,校正,最后就做出來了。雖然有些題目我也不知道自己的對不對,但是通過自己動手把它做出結果了我就覺得有收獲了。 Matlab的課比較少,課堂上學到的東西也不是特別的多,但是通過實驗,我自學了許多東西,也完成了學習任務,同時也鍛煉了自己的個人能力 2012/5/3 314- 數據庫上機心得體會 數據庫的課程結束了,通過對數據庫的學習也初步掌握其各方面的知識,數據庫的功能是強大的,面對目前的信息化社會,在整理、查詢、分析數據方面是一款強有力的工具。 學習的目的在于將知識能合理順利的運用,將書本知識化為自己所用,是一個不知到知道,了解完善應用的過程,尤其是計算機方面的課程更是如此,必要的上機練習是必不可少的。之前的計算機語言、匯編語言等,都是在上機練習中得到順利掌握。面對這學期的數據庫也是如此的過程,在開始對理論知識的學習,然后進行上機練習,目的在于讓我們更好的掌握其知識,熟悉數據庫編程語言等。 當然上機可也不是輕松是課程,在課前還是應該做些相應的準備。首先在理論知識的學習中必須先打好基礎,經過預習、聽課、復習、作業四個環節的學習,對于這門課的理論知識有了一定了解,才便于我們的上機課程,理論與上機的結合這樣才有助于我們更好的掌握知識。 在數據庫上機中主要是用到的SQL(Structured Query Language)結構化查詢語言,它是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。同時也是數據庫腳本文件的擴展名。可以幫我們做到面向數據庫執行查詢、取回數據、插入新的記錄、更新數據庫中的數據、刪除記錄、創建新數據庫、新表和視圖、設置表、存儲過程和視圖的權限,功能非常強大。 學習數據庫的內容是從數據庫、數據表的創建和修改開始的,表是建立關系數據庫的基本結構,用來存儲數據具有已定義的屬性,在表的操作過程中,有查看表信息、查看表屬性、修改表中的數據、刪除表中的數據及修改表和刪除表的操作。從課程中中讓我更明白一些知識,表是數據最重要的一個數據對象,表的創建好壞直接關系到數數據庫的成敗,表的內容是越具體越好,但是也不能太繁瑣,以后在實際應用中多使用表,對表的規劃和理解就會越深刻。在編程方面是需要我們對于編程有邏輯思維能力及一定的編程技巧。在數據庫中插入表、表中的信息等都需要注意,不然很容易出錯。 通過上機練習讓我比較容易的掌握理論知識的難點,以及一些平時不注意的問題,在上機練習的過程中需要對每個細節都要留心,這樣才不至于出錯,這就加強了我們對平時不注意的問題得到回應,從而加深了細節問題的處理方式。在上機的學習之后更加了解了表是數據最重要的一個數據對象,表的創建好壞直接關系到數數據庫的成敗,表的內容應該如何設置比較好一些,需要具體,但是避免繁瑣,對表的概念和應用有了更深的理解。 上機的學習中也了解到數據庫的視圖和查詢。查詢可以通過SQL語言進行完成,這樣加深了查詢語句的基本結構,讓我們能更好的掌握其中語句,方便于我們后面的學習和應用;在視圖的操作中,也了解到了視圖是常見的數據庫對象,是提供查看和存取數據的另一種途徑,對查詢執行的其中一些操作,可以使用視圖來完成。視圖的功能也是強大的,使用視圖不僅可以簡化數據操作,還可以提高數據庫的安全性,不僅可以檢索數據,也可以通過視圖向基表中添加、修改和刪除數據。 在學習過程中也遇到了不少問題,積極詢問老師,和同學共同商討,查詢資料把問題得以解決,培養了解決問題的能力,查閱資料是很好的手段,在今后的學習過程中應該繼續發揚這些能力。數據庫的學習是在學習與探索中度過的,短暫的課程時間的學習是結束了,但其中學到了許多知識,也有諸多的問題需要今后去解決,學習一門課程,學到的是如何學會,而不是隨隨便便的學完,在今后還要自己強化各方面的知識,真正學以致用。通過這次的學習,我了解了數據庫的概念與重要性,還有今后的發展方向,明白數據庫的應用是廣泛的,不可小覷,在今后應該再進行加強學習。第四篇:信息論上機實驗報告
第五篇:數據庫上機心得體會