版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学课程设计专用纸PAGEPAGEI摘要音频放大器可以用来话音扩音、音乐欣赏、卡拉OK伴唱,其中的电子混响器使声音听起来具有一定深度感和空间立体感。音频放大器可以用来话音扩音、音乐欣赏、卡拉OK伴唱,其中的电子混响器使声音听起来具有一定深度感和空间立体感。音频放大器可以用来话音扩音、音乐欣赏、卡拉OK伴唱,其中的电子混响器使声音听起来具有一定深度感和空间立体感。关键词:
目录1 设计目的与要求 12 电路原理分析与设计 12.1**电路原理简介 12.2**电路分析 22.3**电路原理图 23 Protel99SE绘制图 33.1元件库的调用 33.2放置元件 43.3原理图的布线 54 PCB设计 104.1图形界面设计 104.2程序代码设计 124.3运行结果及分析 17结论 19参考文献 20PAGEPAGE20设计目的与要求很多自然科学和工程技术中的问题的解决最终都归结到线性方程组的求解,高斯消去法是线性方程组解法中很经典的算法,由它改进、变形得到的全选主元消去法,是一种效率很高、较为常用的线性方程组解法。线性方程组的一般形式为Ax=b,其中A是线性方程组的系数矩阵,x是列向量,是方程组的解,b也是列向量,这里假定A是非奇异矩阵。程序测试数据来自徐士良先生编著的《C常用算法程序集》中,所选的方程是:(1)电路原理分析与设计2.1**电路原理简介设有n元线性方程组:(2)将(2)写成矩阵形式,其中:(3)将系数矩阵A和向量b放在一起,形成增广矩阵B:(4)全选主元消去就在这个B矩阵上进行,整个过程分为两个步骤:第一步消去过程。对于k从0开始到n-2结束,进行以下三步:(1)首先,从系数矩阵A的第k行、k列开始的子矩阵中选取绝对值最大的元素作为主元素,例如:(5)然后交换B的第k行与第i1行,第k行与第j1列,这样,这个子矩阵中的具有最大绝对值的元素被交换到第k行、k列的位置。(2)其次,进行归一化计算。计算方法为:(6)(3)最后,进行消去运算:(7)第二步,回代过程。(8)在这里,只是列出简要地给出了全选主元高斯消去法的算法步骤,具体推导及详细过程可参考数值分析方面的有关资料。2.2**电路分析当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。这个过程可用下式描述:2.3**电路原理图采用这种方法时,首先计算出元素的直接哈希地址,如果该存储单元已被其他元素占用,则继续查看地址为的存储单元,如此重复直至找到某个存储单元为空时,将关键字为key的数据元素存放到该单元。增量d可以有不同的取法,并根据其取法有不同的称呼。Protel99SE绘制图3.1元件库的调用类模板就是设计一种类的框架,可以适用不同的数据类型,只是一种类的抽象,因此,利用类模板可以针对不同的数据类型定义出具有共性的一组类。定义形式如下:template<类型名参数名1,类型名参数名2,…>
class类名
{
类声明体;
};与函数模板类似,通过使用类模板可以使得所定义的类中的某些数据成员某些成员函数的参数某些成员函数的返回值都可以是任意的数据类型(包括基本类型和自定义类型)。所以,可以通过类模板将程序所处理的对象的类型参数化,从而使得同一段程序可用于处理多种不同类型的对象,提高了程序的抽象层次和可重用性。由于哈希表中的数据元素可以是char,int,float等多种数据类型,因此可以使用类模板来构造本程序的实现框架。本设计面临的计算问题的关键是矩阵运算。可以定义一个矩阵类Matrix作为基类,然后由矩阵类派生出线性方程组类Linequ。矩阵类Matrix只处理n×n类型的方阵,方阵用一个一维数组来存放,矩阵类Matrix的数据成员包括数组的首地址和n,矩阵类Matrix的功能有设置矩阵的值SetMatrix()和显示矩阵PrintM()等。从问题的需要来看,线性方程组类Linequ的数据除了由矩阵类Matrix继承过来用于存放系数矩阵A的成员外,还应该包括存放解向量x和方程右端向量b的数组首地址。线性方程组类Linequ的主要操作有设置SetLinequ()、显示PrintL()、求解Solve()及输出方程的解showX()。可以通过定义线性方程组类Linequ的新增成员函数来实现这些针对方程组求解的功能。在线性方程组的求解过程中,在线性方程组类Linequ的成员函数Solve中需要访问基类矩阵类Matrix的数据成员,利用公有继承方式派生,同时将Matrix类中的数据成员的访问控制设置为保护类型。这样,经过公有派生之后,基类的保护成员在派生类中依然是保护成员,可以被派生类的成员函数访问。整个类分别使用了insert(t1key,t2data)实现哈希表元素的插入,remove(t1key)实现哈希表元素的删除,query(t1key)实现哈希表元素的查找,display()实现哈希表元素的显示。3.2放置元件//Linequ.h文件,实现类的声明#include<iostream>#include<cmath>usingnamespacestd;classMatrix //基类Matrix声明{public: //外部接口 Matrix(intdims=2); //构造函数 ~Matrix(); //析构函数 voidSetMatrix(double*rmax); //矩阵赋初值 voidPrintM(); //显示矩阵protected: intindex; //方阵的行数 double*MatrixA; //矩阵存放数组首地址};classLinequ:publicMatrix //公有派生类Linequ声明{public: //外部接口 Linequ(intdims=2); //构造函数 ~Linequ(); //析构函数 voidSetLinequ(double*a,double*b); //方程赋值 voidPrintL(); //显示方程 intSolve(); //全选主元高斯消去法求解方程 voidShowX(); //显示方程的解private: //私有数据 double*sums; //方程右端项 double*solu; //方程的解};经过公有派生,Linequ类获得了除构造函数、析构函数之外的Matrix类的全部成员,由于基类的成员是公有和保护类型,因此在派生类中的成员函数中,基类继承来的成员全部可以访问,而对于建立Linequ类对象的外部模块来讲,基类的保护成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类Matrix的数据的有效共享和可靠保护。在程序中,方程的系数矩阵、解以及右端项全部采用了动态内存分配技术,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。3.3原理图的布线template<classt1,classt2>//构造函数的实现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>//插入元素的函数voidhash<t1,t2>::insert(t1key,t2data){intsum=func(key)%7;//派生类Linequ的实现Linequ::Linequ(intdims):Matrix(dims) //派生类Linequ的构造函数{ //使用参数调用基类构造函数 sums=newdouble[dims]; //动态内存分配 solu=newdouble[dims];}Linequ::~Linequ() //派生类Linequ的析构函数{ delete[]sums; //释放内存 delete[]solu;}}else{ln*n=newln;n->key=key;n->data=data;n->next=NULL;array[sum]=n;} }template<classt1,classt2>//查询元素的函数实现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<<"关键字"<<key<<"的data值为:"<<endl;returnp->data;}else{p=p->next;}}elseif(type=="void*"){if((int)p->key==(int)key){cout<<"关键字"<<key<<"的data值为:"<<endl;returnp->data;}else{p=p->next;}}else{if(p->key==key){cout<<"关键字"<<key<<"的data值为:"<<endl;returnp->data;}else{p=p->next;}}}return"您所查询的关键字在该哈希表中不存在!";}template<classt1,classt2> voidhash<t1,t2>::display()//显示哈希表元素的函数实现{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>//整型关键字哈希函数实现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>//指向字符型指针关键字哈希函数实现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)//删除元素的哈希函数实现{intsum=func(key)%7;linknodep=array[sum];if(p!=NULL){if(p->next!=NULL){if(p->key==key){array[sum]=p->next;deletep;cout<<"关键字"<<key<<"已被删除!"<<endl;}else{while(p->next!=NULL&&p->next->key!=key)p=p->next;linknodep2=p->next; p->next=p2->next; deletep2;cout<<"关键字"<<key<<"已被删除!"<<endl;}}else{array[sum]=NULL;deletep;cout<<"关键字"<<key<<"已被删除!"<<endl;}}else{cout<<"对不起!您删除的关键字"<<key<<"在本哈希表中不存在!"<<endl;}}PCB设计MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。4.1图形界面设计首先在VC中建立MFCAppWizard(exe)工程,名称为GassineGU,并在向导的Step1中选择Dialogbased,即建立基于对话框的应用程序,如下图5~6所示。图5建立MFCAppWizard(exe)工程图6建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图7所示。图7方程组求解程序界面设计图7所示的界面中包含了3个StaticText控件,3个Button控件,和2个EditBox控件,控件的基本信息列表如下表1所示。表1控件基本信息控件类别控件ID控件Caption说明StaticTextIDC_STATIC系数矩阵A方程组右端项b解XBottonIDC_BUTTON_Read读入数据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程序代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为24个EditBox控件建立MemberVariables,按Ctrl+w键进入MFCClassWizard界面,选择MemberVariables选项卡,可显示成员变量设置界面,如图8所示。图8成员变量设置界面下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。//Haxibiao.cpp:implementationfile//类#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifhash<char*,char*>h;//将实例化的hash类对象声明为全局的以便以下函数使用///////////////////////////////////////////////////////////////////////////////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对象调用display()函数以显示哈希表元素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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地方个人担保借款合同
- 交通肇事保险赔偿协议书
- 血液形态(学)专项考核试题
- 工-程-预-算-书封面
- 非专利技术转让合同
- 吉林省吉林2024年七年级上学期期中数学试卷【附答案】
- 工程项目招投标的相关习题
- 学案地理(人教版2019)第一章 第一节 课时1 地球在宇宙中的位置
- 安徽省蚌埠市2023-2024学年高二下学期7月期末考试历史
- 工程项目合同管理-综合练习一-题目及答案
- 诗歌教学计划
- 汽车吊吊装计算书(共12页)
- 装饰装修工程技术标
- 低碳生活学生调查报告范文3篇
- 安全生产培训系列课件之安全生产意识篇.ppt
- 银行审计部工作职责
- 劳务分包合同结算单标准格式(共3页)
- 复合地基静载荷试验、动力触探检测完整报告一套
- 起重机吊装方案.doc
- 技术咨询合同上海市科学技术委员会
- GPS生产方式 通过彻底地排除浪费从而降低成本的推进方略剖析
评论
0/150
提交评论