版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
沈陽理工大學課程設(shè)計專用紙PAGEPAGEI摘要音頻放大器可以用來話音擴音、音樂欣賞、卡拉OK伴唱,其中的電子混響器使聲音聽起來具有一定深度感和空間立體感。音頻放大器可以用來話音擴音、音樂欣賞、卡拉OK伴唱,其中的電子混響器使聲音聽起來具有一定深度感和空間立體感。音頻放大器可以用來話音擴音、音樂欣賞、卡拉OK伴唱,其中的電子混響器使聲音聽起來具有一定深度感和空間立體感。關(guān)鍵詞:
目錄1 設(shè)計目的與要求 12 電路原理分析與設(shè)計 12.1**電路原理簡介 12.2**電路分析 22.3**電路原理圖 23 Protel99SE繪制圖 33.1元件庫的調(diào)用 33.2放置元件 43.3原理圖的布線 54 PCB設(shè)計 104.1圖形界面設(shè)計 104.2程序代碼設(shè)計 124.3運行結(jié)果及分析 17結(jié)論 19參考文獻 20PAGEPAGE20設(shè)計目的與要求很多自然科學和工程技術(shù)中的問題的解決最終都歸結(jié)到線性方程組的求解,高斯消去法是線性方程組解法中很經(jīng)典的算法,由它改進、變形得到的全選主元消去法,是一種效率很高、較為常用的線性方程組解法。線性方程組的一般形式為Ax=b,其中A是線性方程組的系數(shù)矩陣,x是列向量,是方程組的解,b也是列向量,這里假定A是非奇異矩陣。程序測試數(shù)據(jù)來自徐士良先生編著的《C常用算法程序集》中,所選的方程是:(1)電路原理分析與設(shè)計2.1**電路原理簡介設(shè)有n元線性方程組:(2)將(2)寫成矩陣形式,其中:(3)將系數(shù)矩陣A和向量b放在一起,形成增廣矩陣B:(4)全選主元消去就在這個B矩陣上進行,整個過程分為兩個步驟:第一步消去過程。對于k從0開始到n-2結(jié)束,進行以下三步:(1)首先,從系數(shù)矩陣A的第k行、k列開始的子矩陣中選取絕對值最大的元素作為主元素,例如:(5)然后交換B的第k行與第i1行,第k行與第j1列,這樣,這個子矩陣中的具有最大絕對值的元素被交換到第k行、k列的位置。(2)其次,進行歸一化計算。計算方法為:(6)(3)最后,進行消去運算:(7)第二步,回代過程。(8)在這里,只是列出簡要地給出了全選主元高斯消去法的算法步驟,具體推導及詳細過程可參考數(shù)值分析方面的有關(guān)資料。2.2**電路分析當發(fā)生地址沖突時,按照某種方法繼續(xù)探測哈希表中的其他存儲單元,直到找到空位置為止。這個過程可用下式描述:2.3**電路原理圖采用這種方法時,首先計算出元素的直接哈希地址,如果該存儲單元已被其他元素占用,則繼續(xù)查看地址為的存儲單元,如此重復直至找到某個存儲單元為空時,將關(guān)鍵字為key的數(shù)據(jù)元素存放到該單元。增量d可以有不同的取法,并根據(jù)其取法有不同的稱呼。Protel99SE繪制圖3.1元件庫的調(diào)用類模板就是設(shè)計一種類的框架,可以適用不同的數(shù)據(jù)類型,只是一種類的抽象,因此,利用類模板可以針對不同的數(shù)據(jù)類型定義出具有共性的一組類。定義形式如下:template<類型名參數(shù)名1,類型名參數(shù)名2,…>
class類名
{
類聲明體;
};與函數(shù)模板類似,通過使用類模板可以使得所定義的類中的某些數(shù)據(jù)成員某些成員函數(shù)的參數(shù)某些成員函數(shù)的返回值都可以是任意的數(shù)據(jù)類型(包括基本類型和自定義類型)。所以,可以通過類模板將程序所處理的對象的類型參數(shù)化,從而使得同一段程序可用于處理多種不同類型的對象,提高了程序的抽象層次和可重用性。由于哈希表中的數(shù)據(jù)元素可以是char,int,float等多種數(shù)據(jù)類型,因此可以使用類模板來構(gòu)造本程序的實現(xiàn)框架。本設(shè)計面臨的計算問題的關(guān)鍵是矩陣運算??梢远x一個矩陣類Matrix作為基類,然后由矩陣類派生出線性方程組類Linequ。矩陣類Matrix只處理n×n類型的方陣,方陣用一個一維數(shù)組來存放,矩陣類Matrix的數(shù)據(jù)成員包括數(shù)組的首地址和n,矩陣類Matrix的功能有設(shè)置矩陣的值SetMatrix()和顯示矩陣PrintM()等。從問題的需要來看,線性方程組類Linequ的數(shù)據(jù)除了由矩陣類Matrix繼承過來用于存放系數(shù)矩陣A的成員外,還應該包括存放解向量x和方程右端向量b的數(shù)組首地址。線性方程組類Linequ的主要操作有設(shè)置SetLinequ()、顯示PrintL()、求解Solve()及輸出方程的解showX()??梢酝ㄟ^定義線性方程組類Linequ的新增成員函數(shù)來實現(xiàn)這些針對方程組求解的功能。在線性方程組的求解過程中,在線性方程組類Linequ的成員函數(shù)Solve中需要訪問基類矩陣類Matrix的數(shù)據(jù)成員,利用公有繼承方式派生,同時將Matrix類中的數(shù)據(jù)成員的訪問控制設(shè)置為保護類型。這樣,經(jīng)過公有派生之后,基類的保護成員在派生類中依然是保護成員,可以被派生類的成員函數(shù)訪問。整個類分別使用了insert(t1key,t2data)實現(xiàn)哈希表元素的插入,remove(t1key)實現(xiàn)哈希表元素的刪除,query(t1key)實現(xiàn)哈希表元素的查找,display()實現(xiàn)哈希表元素的顯示。3.2放置元件//Linequ.h文件,實現(xiàn)類的聲明#include<iostream>#include<cmath>usingnamespacestd;classMatrix //基類Matrix聲明{public: //外部接口 Matrix(intdims=2); //構(gòu)造函數(shù) ~Matrix(); //析構(gòu)函數(shù) voidSetMatrix(double*rmax); //矩陣賦初值 voidPrintM(); //顯示矩陣protected: intindex; //方陣的行數(shù) double*MatrixA; //矩陣存放數(shù)組首地址};classLinequ:publicMatrix //公有派生類Linequ聲明{public: //外部接口 Linequ(intdims=2); //構(gòu)造函數(shù) ~Linequ(); //析構(gòu)函數(shù) voidSetLinequ(double*a,double*b); //方程賦值 voidPrintL(); //顯示方程 intSolve(); //全選主元高斯消去法求解方程 voidShowX(); //顯示方程的解private: //私有數(shù)據(jù) double*sums; //方程右端項 double*solu; //方程的解};經(jīng)過公有派生,Linequ類獲得了除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的Matrix類的全部成員,由于基類的成員是公有和保護類型,因此在派生類中的成員函數(shù)中,基類繼承來的成員全部可以訪問,而對于建立Linequ類對象的外部模塊來講,基類的保護成員是無法訪問的。通過保護訪問類型和公有的繼承方式,實現(xiàn)了基類Matrix的數(shù)據(jù)的有效共享和可靠保護。在程序中,方程的系數(shù)矩陣、解以及右端項全部采用了動態(tài)內(nèi)存分配技術(shù),這些工作都是在基類、派生類的構(gòu)造函數(shù)中完成,它們的清理工作在析構(gòu)函數(shù)中完成。3.3原理圖的布線template<classt1,classt2>//構(gòu)造函數(shù)的實現(xiàn)hash<t1,t2>::hash(){array=newlinknode[7];for(inti=0;i<7;i++){array[i]=NULL;}}template<classt1,classt2>hash<t1,t2>::~hash(){for(inti=0;i<7;i++){if(array[i]!=NULL){linknoden=array[i];while(n!=NULL){linknoden1=n;n=n->next;deleten1;}}}}template<classt1,classt2>//插入元素的函數(shù)voidhash<t1,t2>::insert(t1key,t2data){intsum=func(key)%7;//派生類Linequ的實現(xiàn)Linequ::Linequ(intdims):Matrix(dims) //派生類Linequ的構(gòu)造函數(shù){ //使用參數(shù)調(diào)用基類構(gòu)造函數(shù) sums=newdouble[dims]; //動態(tài)內(nèi)存分配 solu=newdouble[dims];}Linequ::~Linequ() //派生類Linequ的析構(gòu)函數(shù){ delete[]sums; //釋放內(nèi)存 delete[]solu;}}else{ln*n=newln;n->key=key;n->data=data;n->next=NULL;array[sum]=n;} }template<classt1,classt2>//查詢元素的函數(shù)實現(xiàn)t2hash<t1,t2>::query(t1key){intsum=func(key)%7;linknodep=array[sum];while(p){if(type=="char*"){if(stricmp((char*)(int)p->key,(char*)(int)key)==0){cout<<"關(guān)鍵字"<<key<<"的data值為:"<<endl;returnp->data;}else{p=p->next;}}elseif(type=="void*"){if((int)p->key==(int)key){cout<<"關(guān)鍵字"<<key<<"的data值為:"<<endl;returnp->data;}else{p=p->next;}}else{if(p->key==key){cout<<"關(guān)鍵字"<<key<<"的data值為:"<<endl;returnp->data;}else{p=p->next;}}}return"您所查詢的關(guān)鍵字在該哈希表中不存在!";}template<classt1,classt2> voidhash<t1,t2>::display()//顯示哈希表元素的函數(shù)實現(xiàn){for(inti=0;i<7;i++) {if(array[i]!=NULL) {ln*n=array[i];while(n!=NULL) {cout<<"array["<<i<<"]"<<"為"<<n->key<<endl;n=n->next; } }elsecout<<"array["<<i<<"]"<<"為空!"<<endl; }}template<classt1,classt2>//整型關(guān)鍵字哈希函數(shù)實現(xiàn)inthash<t1,t2>::func(inti){type="int";returni;}template<classt1,classt2>//浮點型模板inthash<t1,t2>::func(floati){type="float";ints=i*100;returns;}template<classt1,classt2>//指向字符型指針關(guān)鍵字哈希函數(shù)實現(xiàn)inthash<t1,t2>::func(char*i){type="char*";ints=strlen(i)*i[0];returns;}template<classt1,classt2>//字符型模板inthash<t1,t2>::func(chari){type="char";ints=(int)i;returns;}}template<classt1,classt2>voidhash<t1,t2>::remove(t1key)//刪除元素的哈希函數(shù)實現(xiàn){intsum=func(key)%7;linknodep=array[sum];if(p!=NULL){if(p->next!=NULL){if(p->key==key){array[sum]=p->next;deletep;cout<<"關(guān)鍵字"<<key<<"已被刪除!"<<endl;}else{while(p->next!=NULL&&p->next->key!=key)p=p->next;linknodep2=p->next; p->next=p2->next; deletep2;cout<<"關(guān)鍵字"<<key<<"已被刪除!"<<endl;}}else{array[sum]=NULL;deletep;cout<<"關(guān)鍵字"<<key<<"已被刪除!"<<endl;}}else{cout<<"對不起!您刪除的關(guān)鍵字"<<key<<"在本哈希表中不存在!"<<endl;}}PCB設(shè)計MFC的圖形界面程序設(shè)計可在上述類設(shè)計的基礎(chǔ)上進行改造,MFC的圖形界面程序與DOS界面程序的主要不同點是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實現(xiàn)數(shù)據(jù)輸入輸出,主要通過cin,cout等I/O流實現(xiàn),而MFC的圖形程序界面采用標準Windows窗口和控件實現(xiàn)輸入輸出,因此必須在MFC類的框架下加入上面所設(shè)計的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。4.1圖形界面設(shè)計首先在VC中建立MFCAppWizard(exe)工程,名稱為GassineGU,并在向?qū)У腟tep1中選擇Dialogbased,即建立基于對話框的應用程序,如下圖5~6所示。圖5建立MFCAppWizard(exe)工程圖6建立基于對話框的應用程序?qū)υ捒蛸Y源中的默認對話框利用工具箱改造成如下界面,如圖7所示。圖7方程組求解程序界面設(shè)計圖7所示的界面中包含了3個StaticText控件,3個Button控件,和2個EditBox控件,控件的基本信息列表如下表1所示。表1控件基本信息控件類別控件ID控件Caption說明StaticTextIDC_STATIC系數(shù)矩陣A方程組右端項b解XBottonIDC_BUTTON_Read讀入數(shù)據(jù)IDC_BUTTON_CALC計算求解IDC_BUTTON_Exit退出EditBoxIDC_EDIT_A00~IDC_EDIT_A33矩陣A的16個元素IDC_EDIT_b0~IDC_EDIT_b3向量b的4個元素IDC_EDIT_X0~IDC_EDIT_X3解X的4個元素4.2程序代碼設(shè)計為了能夠?qū)υ捒蚪缑嫔系目丶軌蚺c代碼聯(lián)系起來,需要為24個EditBox控件建立MemberVariables,按Ctrl+w鍵進入MFCClassWizard界面,選擇MemberVariables選項卡,可顯示成員變量設(shè)置界面,如圖8所示。圖8成員變量設(shè)置界面下面是編寫代碼的重要階段,可以借鑒在設(shè)計基于DOS界面的控制臺應用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。//Haxibiao.cpp:implementationfile//類#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifhash<char*,char*>h;//將實例化的hash類對象聲明為全局的以便以下函數(shù)使用///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg();//DialogData //{ //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DEBEGIN_MESSAGE_MAP(CAboutDlg,CDialog) //{{AFX_MSG_MAP(CAboutDlg) //Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CWANGDlgdialogCWANGDlg::CWANGDlg(CWnd*pParent/*=NULL*/) :CDialog(CWANGDlg::IDD,pParent){xGetApp()->LoadIcon(IDR_MAINFRAME);}voidCWANGDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWANGDlg) DDX_Text(pDX,IDC_EDIT1,m_HX); DDX_Text(pDX,IDC_EDIT2,m_key); DDX_Text(pDX,IDC_EDIT3,m_data); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CWANGDlg,CDialog) //{{AFX_MSG_MAP(CWANGDlg) ON_WM_SYSCOMMAND() ON_W///////////////////////////////////////////////////////////////////////////////CWANGDlgmessagehandlersBOOLCWANGDlg::OnInitDialog(){ CDialog::OnInitDialog();h.insert("sds","etew");//初始化哈希表h.insert("n25","45");//初始化哈希表h.insert("4.5765k","2");//初始化哈希表h.insert("$345","6");//初始化哈希表h.insert("43.r","55");//初始化哈希表h.insert("yan","24");//初始化哈希表h.display();//h對象調(diào)用display()函數(shù)以顯示哈希表元素m_HX=h.str; UpdateData(0);//在編輯框處顯示哈希表元素 //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. Menu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCWANGDlg::OnPaint(){ if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); { CDialog::OnPaint(); }}//Thesystemcallsthisto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年健康責任保險合同
- 2025年商業(yè)智能軟件開發(fā)合作協(xié)議
- 2025年買賣雙方權(quán)益確認書
- 個人全權(quán)委托代理合同書樣本版B版
- 2025年度木方、木跳板產(chǎn)品研發(fā)與技術(shù)合作合同4篇
- 9、2025年度人力資源信息管理系統(tǒng)開發(fā)與外包服務(wù)合同3篇
- 2025年銷售總監(jiān)勞動合同范本(含產(chǎn)品知識培訓)3篇
- 2025年城市智慧安防項目設(shè)備采購合同3篇
- 2025年度酒店與旅游教育機構(gòu)聯(lián)合經(jīng)營合同
- 2025年度股票賬戶代理操作與投資業(yè)績評估協(xié)議
- 2024版?zhèn)€人私有房屋購買合同
- 2024爆炸物運輸安全保障協(xié)議版B版
- 《食品與食品》課件
- 讀書分享會《白夜行》
- 光伏工程施工組織設(shè)計
- DB4101-T 121-2024 類家庭社會工作服務(wù)規(guī)范
- 化學纖維的鑒別與測試方法考核試卷
- 2024-2025學年全國中學生天文知識競賽考試題庫(含答案)
- 臨床微生物檢查課件 第2章細菌的生理
- 作品著作權(quán)獨家授權(quán)協(xié)議(部分授權(quán))
- 取水泵站施工組織設(shè)計
評論
0/150
提交評論