文档库 最新最全的文档下载
当前位置:文档库 › 实验报告(分治法大整数乘法字符数组实现)

实验报告(分治法大整数乘法字符数组实现)

实验报告(分治法大整数乘法字符数组实现)
实验报告(分治法大整数乘法字符数组实现)

一、实验目的:

(1)掌握分治法。

(2)学会测试和分析算法的时间性能

二、分组:

三个人一组,自由组合

三、内容:

1. 编写普通大整数乘法

2. 编写基于分治的大整数乘法

3. 编写改进的基于分治的大整数乘法

4.编写一个随机产生数字的算法,分别产生两个10, 100, 1000, 10000, 100000位的数字a 和b,该数字的每一位都是随机产生的

5. 用4所产生的数字来测试1、2和3算法的时间,列出如下表格。

(1)一直增长数字的位数,直到计算机内存溢出,算法无法继续进行下去。

(2)当位数较小时,乘法所需要的时间较短,这时候可以多次循环该算法,用平均时间来代表该算法的运行时间。比如运行算法100次,得到时间是1.5秒,则该算法的执行时间是15毫秒。

6. 画出相应的散点图,其中x轴是矩阵的阶,y轴是所花费的时间,用不同的颜色表示不同的算法所花费的时间

7. 思考(选做):

(1)在你的机器中,乘法是否比加法更费时?从哪里体现出来的?

(2)如果要做更大规模的乘法,比如10亿亿位的两个数的乘法,你有什么方法来解决这个问题?

四、实验要求

1. 在blackboard (http:// https://www.wendangku.net/doc/995622604.html,/) 上进行分组,然后每组提交电子版实验报告。

2. 实验报告样式可从http://192.168.2.3/guide.aspx 表格下载-学生适用-在

校生管理-实践教学-实验:深圳大学学生实验报告)

3. 源代码作为实验报告附件上传。

4. 实验报告正文不要帖源代码+实验指南,而是要完成相应的工作。

5. 实验人数:每组3人,自由组合。实验报告中要指明每个人完成的内容,表格列出每个人的贡献(总体为100%,列出每个成员占的百分比)

6. 在实验完成之后,将进行一次介绍。做好PPT,由教师从每组中随机抽取一名同学来对实验内容进行介绍。

五、实验成绩

实验成绩的给分标准是实验报告50%,PPT汇报50%。每组成员的分数以小组分为基本分,然后按照每个成员的贡献进行浮动。

参考源码来源:https://www.wendangku.net/doc/995622604.html,

printf("%s*%s\n",fir,sec);

begin=clock();

res=call_mult(fir,sec);

end=clock();

printf("普通乘法运算结果:%s 耗时:%d\n",res,end-begin);

begin=clock();

res=call_mult2(fir,sec);

end=clock();

printf("分治乘法运算结果:%s 耗时:%d\n",res,end-begin);

begin=clock();

res=call_mult3(fir,sec);

end=clock();

printf("分治改良运算结果:%s 耗时:%d\n\n",res,end-begin);

整数大数乘法以及小数大数乘法实现

声明:本算法可以实现整数乘以整数,小数乘以小数功能。但是小数只能是小数点前不为0 的小数。比如0.1之类的不适用。 #include #include using namespace std; void multiply(const char*a,const char*b) { int length1=strlen(a); int length2=strlen(b); int*p=new int[length1+length2]; for(int i=0;i=0;i--) { if(p[i]>=10) { p[i-1]+=p[i]/10; p[i]=p[i]%10; } } char*pp=new char[length1+length2+1]; int count=0; while(p[count]==0) { count++; } int i1; for(i1=0;count

void dianmultiply(const char*a,const char*b) { int place1=0; int place2=0; char*newp1=new char[strlen(a)]; char*newp2=new char[strlen(b)]; int k1=0; int k2=0; for(int i=0;i

计组-4位乘法器实验报告

实验4位乘法器实验报告 姓名:X XX 学号:X XX 专业:计算机科学与技术课程名称:计算机组成同组学生姓名:无 实验时间:实验地点:指导老师:XXX 一、实验目的和要求 1.熟练掌握乘法器的工作原理和逻辑功能 二、实验内容和原理 实验内容: 根据课本上例3-7的原理,来实现4位移位乘法器的设计。 具体要求:1. 乘数和被乘数都是4位 2. 生成的乘积是8位的 3. 计算中涉及的所有数都是无符号数 4.需要设计重置功能 5.需要分步计算出结果(4位乘数的运算,需要四步算出结果) 实验原理: 1.乘法器原理图

2.本实验的要求: 1.需要设计按钮和相应开关,来增加乘数和被乘数 2.每按一下M13,给一个时钟,数码管的左边两位显示每一步的乘 积 3.4步计算出最终结果后,LED灯亮,按RESET重新开始计算 三、主要仪器设备 1.Spartan-III开发板1套 2.装有ISE的PC机1台 四、操作方法与实验步骤 实验步骤: 1.创建新的工程和新的源文件 2.编写verilog代码(top模块、display模块、乘法运算模块、去抖动模块以及 UCF引脚) 3.进行编译 4.进行Debug 工作,通过编译。

5.. 生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能 操作方法: TOP: module alu_top(clk, switch, o_seg, o_sel); input wire clk; input wire[4:0] switch; output wire [7:0] o_seg; // 只需七段显示数字,不用小数点 output wire [3:0] o_sel; // 4个数码管的位选 wire[15:0] disp_num; reg [15:0] i_r, i_s; wire [15:0] disp_code; wire o_zf; //zero detector initial begin i_r <= 16'h1122; //0x1122 i_s <= 16'h3344; //0x3344 end alu M1(i_r, i_s, switch[4:2], o_zf, disp_code); display M3(clk, disp_num, o_seg, o_sel); assign disp_num = switch[0]?disp_code:(switch[1] ? i_s : i_r); endmodule

编译原理实验报告语法分析程序的设计

编译原理实验报告语法分析程序的设计 文档编制序号:[KK8UY-LL9IO69-TTO6M3-MTOL89-FTT688]

实验5语法分析程序的设计(2) 一、实验目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中算法优先分析方法。 二、实验内容 设计一个文法的算法优先分析程序,判断特定表达式的正确性。 三、实验要求 1、给出文法如下: G[E] E->T|E+T; T->F|T*F; F->i|(E); +*()i + * ( ) i 21)直接存放,2)为优先关系建立优先函数,这里由学生自己选择一种方式; 1、给出算符优先分析算法如下: k:=1; S[k]:=‘#’; REPEAT 把下一个输入符号读进a中; IF S[k]∈V T THEN j:=k ELSE j:=k-1; WHILE S[j] a DO BEGIN

REPEAT Q:=S[j]; IF S[j-1]∈V T THEN j:=j-1 ELSE j:=j-2 UNTIL S[j] Q 把S[j+1]…S[k]归约为某个N; k:=j+1; S[k]:=N; END OF WHILE; IF S[j] a OR S[j] a THEN BEGIN k:=k+1;S[k]:=a END ELSE ERROR UNTIL a=‘#’ 1、根据给出算法,利用适当的数据结构实现算符优先分析程序; 2、利用算符优先分析程序完成下列功能: 1)手工将测试的表达式写入文本文件,每个表达式写一行,用“;”表示结束; 2)读入文本文件中的表达式; 3)调用实验2中的词法分析程序搜索单词; 4)把单词送入算法优先分析程序,判断表达式是否正确(是否是给出文法的语言),若错误,应给出错误信息; 5)完成上述功能,有余力的同学可以对正确的表达式计算出结果。四、实验环境 PC微机 DOS操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C++ 程序集成环境 五、实验步骤

大整数乘法(分治法)

#include #include #include #include #define DATASIZE 1000 //该函数用以接收用户输入的大整数,返回值为该大整数的数字位数 int InputBigInt(int arr[]) { char ch; int i=0; printf("Input a Big Interger:"); while(1) { scanf("%c",&ch); if(ch=='\n') break; else arr[i++]=ch-'0'; } return i; } //该函数通过在较短的大整数之前填充0的方式,将两个大整数的位数对齐,返回值为较长的那个大整数的位置 int AlignArray(int *a,int len_a,int *b,int len_b) { int len_align=len_a; if(len_a>len_b) { for(int i=len_b-1;i>=0;i--) b[i+(len_a-len_b)]=b[i]; for(int i=0;i=0;i--) a[i+(len_b-len_a)]=a[i]; for(int i=0;i

a[i]=0; len_align=len_b; } return len_align; } //该函数通过删去大整数前面无意义的0来得到其真实的数字位数 int Adjust(int a[],int len) { while(a[0]==0) { int j=1; do{ a[j-1]=a[j]; j++; }while(j=0;i--) { int t=a[i]+b[i]+carry; c[i+1]=t%10; carry=t/10; } c[0]=carry; return length+1; } //两个长度为length的大整数做减法,得到的结果放到数组C中,长度为length int Sub(int a[],int b[],int c[],int length) { int borrow=0; for(int i=length-1;i>=0;i--) {

8位乘法器实验报告

6.2 8位乘法器的设计 1.实验目的 (1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。 (2)熟悉GW48-CK EDA实验开发系统的基本使用方法。 (3)学习VHDL基本逻辑电路的综合设计。 2.实验内容 设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。 3.实验条件 (1)开发设备:Lattice ispEXPERT。 (2)实验设备:GW48-CK EDA实验开发系统。 (3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。 4.实验设计 1)系统的原理框图

2)VHDL源程序 (1)选通与门模块的源程序ANDARITH.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS PORT(ABIN: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH; ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS(ABIN,DIN)IS BEGIN FOR I IN 0 TO 7 LOOP DOUT(I)<=DIN(I)AND ABIN; END LOOP; END PROCESS; END ARCHITECTURE ART; (2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;

java99乘法表实验报告

实验名称:程序调试 一、实验目的 本实验的目的是让学生掌握开发java程序的三个步骤:编写源文件、编译源文件和运行应用程序。 二、实验环境(软件、硬件环境) 一个java应用程序是由若干个类组成的,其中最多能有一个public类。有且只能有一个类含有main方法。Java源程序的扩展名为java。Java源程序的名字必须和public类的类名相同,如果没有public类,只要和其中任一类的类名相同就行。编译java源程序会产生字节码(.class )文件,源程序有几个类就会产生几个class文件。运行时,只运行含有main 方法的class文件。 例如,有一个java源程序有三个类A,B,C,其中A是public类,B含有main方法。那么这个源程序的名字必须是A.java,编译此程序会产生三个字节码文件A.class,B.class,C.class.运行B.class。 三、实验原理 利用java调试程序 四、实验内容及步骤 1. 在控制台中输出九九乘法表 本练习可以使用户了解for语句实现循环功能。 具体步骤和要求如下: 1)打开一个文本编辑器,(如UtraEdit文本编辑器。)建立一个新文件MultiplyList1.java,将该程序保存到D:\myjava中。 2)将程序清单1-1中的程序代码输入到该文件中并保存。 程序清单1-1: //MultiplyList1.java public class MultiplyList1 { public static void main(String[] args) {

String output=""; for(程序段1){ //设置九九乘法表的行row for(程序段2) //设置九九乘法表的列col output+=col+"*"+row+"="+(row*col)+" "; //记录九九乘法表的内容 output+="\n"; } System.out.println(output); //输出九九乘法表 System.exit(0); } } 3)运行结果如下图1-1所示。请将程序清单1-1中的程序段1和程序段2补充完整。 图1-1 运行结果,输出九九乘法表 4)打开命令行窗口。具体方法:开始—所有程序--附件—命令提示符 5)编译源程序。D:\myjava> javac MultiplyList1.java 6)运行程序。D:\myjava> java MultiplyList1 2.用Applet小程序实现九九乘法表。 要求:编写一个Applet小程序MultiplyList.java,将生成的类MultiplyList.class,嵌套在一个HTML如MultiplyList.html中,运行结果如图1-1所示。

北京科技大学编译原理实验报告

编译原理实验报告 学院: 计算机与通信工程学院专业: 计算机科学与技术 班级: 学号: 姓名: 实验成绩:

词法分析 一、实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求 2.1 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 := + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 2.2 各种单词符号对应的种别码: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 3.1 主程序示意图:

3.2词法分析程序流程图: 四、词法分析程序的C++语言程序源代码: #include"stdio.h" #include"stdlib.h" #include"string.h" #define _KEY_WORD_END "waiting for your expanding" typedef struct 开始 变量初始化 是否文件结束? 返回 拼数 Syn=11 返回 拼字符串 是否是关键字? Syn 为对应关键字的单词种别码 Syn=10 给不同的符号相同的 Syn 值 报错 是 否 数字 字母 是 否 运算符, 界符等 其他

大整数乘法问题

大整数乘法问题 一、问题分析 (1)采用分治法的思想,将一个多位的二进制数分成几个位数较少的二进制数进行计算。这样不断地往下分,直到分出的二进制数相对简单,可以直接算出来。 (2)对于这个算法,上课时讲过了时间复杂度为O(n^1.59)。 二、问题解决 (1)具体程序代码(c++) #include #include using namespace std; #define M 100 #define N 100 ifstream infile; ofstream outfile; int Weishu(int u[]); int *add(int *m,int *n); int *Mul(int n,int *u,int *v); int Weishu(int u[]) { int t=0; while(u[t]==1 || u[t]==0){ t++; } return t; } int *Mul(int n,int *u,int *v) { int w[M],x[M],y[M],z[M];

int a[M],b[M],c[M],d[M]; int wy[M],xz[M],wz[M],xy[M]; int *aa,*bb,*cc,*dd; int mid; int i,j; int Ji[M],k=0; if(n==1) { Ji[k]=u[0]*v[0]; k++; return(Ji); } else { mid=(n+1)/2; for(i=0;i

模拟乘法器调幅AM、DSB、SSB实验报告

模拟乘法器调幅(AM、DSB、SSB)实验报告

————————————————————————————————作者:————————————————————————————————日期:

实验十二模拟乘法器调幅(AM、DSB、SSB) 一、实验目的 1.掌握用集成模拟乘法器实现全载波调幅。抑止载波双边带调幅和单边带调幅的方法。 2.研究已调波与调制信号以及载波信号的关系。 3.掌握调幅系数的测量与计算方法。 4.通过实验对比全载波调幅、抑止载波双边带调幅和单边带调幅的波形。 5.了解模拟乘法器(MC1496)的工作原理,掌握调整与测量其特性参数的方法。 二、实验内容 1.调测模拟乘法器MC1496正常工作时的静态值。 2.实现全载波调幅,改变调幅度,观察波形变化并计算调幅度。 3.实现抑止载波的双边带调幅波。 4.实现单边带调幅。 三、实验原理 幅度调制就是载波的振幅(包络)随调制信号的参数变化而变化。本实验中载波是由晶体振荡产生的465KHz高频信号,1KHz的低频信号为调制信号。振幅调制器即为产生调幅信号的装置。 1.集成模拟乘法器的内部结构 集成模拟乘法器是完成两个模拟量(电压或电流)相乘的电子器件。在高频电子线路中,振幅调制、同步检波、混频、倍频、鉴频、鉴相等调制与解调的过程,均可视为两个信号相乘或包含相乘的过程。采用集成模拟乘法器实现上述功能比采用分离器件如二极管和三极管要简单得多,而且性能优越。所以目前无线通信、广播电视等方面应用较多。集成模拟乘法器常见产品有BG314、F1596、MC1495、MC1496、LM1595、LM1596等。 (1)MC1496的内部结构 在本实验中采用集成模拟乘法器MC1496来完成调幅作用。MC1496是四象限模拟乘法器。其内部电路图和引脚图如图12-1所示。其中V1、V2与V3、V4组成双差分放大器,以反极性方 式相连接,而且两组差分对的恒流源V5与V6又组成一对差分电路,因此恒流源的控制电压可 图12-1 MC1496的内部电路及引脚图 正可负,以此实现了四象限工作。V7、V8为差分放大器V5与V6的恒流源。 (2)静态工作点的设定 1)静态偏置电压的设置

编译原理实验报告二

编译原理实验报告 题目构造识别字符串的自动机学院 专业 班级 学号 学生姓名 指导教师 西安思源学院教务处制 二〇一年

实验二构造识别符号串的自动机 一、实验目的 1 掌握形式语言与自动机的概念 2 了解正规集及有穷自动机的关系 3 能构造识别相应符号串的自动机 4 能构造词法分析程序所识别的各类单词的自动机 二、实验环境 Microsoft Visual C++ 6.0 三、实验内容 1 用高级语言编写程序:该程序能接受C++所有的标识符。 2 用高级语言编写程序:该程序能接受C++所有的常数(整数和定点小数)。 3 用高级语言编写程序:该程序能接受C++的所有保留字。 4 用高级语言编写程序:该程序能接受C++的所有界符、运算符。 四、设计说明 void main() { void find_word(); void show_all(); void Input(); Input(); cout<<"运行结果如下"<'||ch[i]=='('||ch[i]==')') { c[t]=ch[i]; t++; k++; j++; } else if(ch[i]==' '||ch[i]=='\t') { b[k]=' ';

模拟乘法器调幅(AM、DSB、SSB)实验报告

实验十二模拟乘法器调幅(AM、DSB、SSB) 一、实验目的 1.掌握用集成模拟乘法器实现全载波调幅。抑止载波双边带调幅和单边带调幅的方法。 2.研究已调波与调制信号以及载波信号的关系。 3.掌握调幅系数的测量与计算方法。 4.通过实验对比全载波调幅、抑止载波双边带调幅和单边带调幅的波形。 5.了解模拟乘法器(MC1496)的工作原理,掌握调整与测量其特性参数的方法。 二、实验内容 1.调测模拟乘法器MC1496正常工作时的静态值。 2.实现全载波调幅,改变调幅度,观察波形变化并计算调幅度。 3.实现抑止载波的双边带调幅波。 4.实现单边带调幅。 三、实验原理 幅度调制就是载波的振幅(包络)随调制信号的参数变化而变化。本实验中载波是由晶体振荡产生的465KHz高频信号,1KHz的低频信号为调制信号。振幅调制器即为产生调幅信号的装置。 1.集成模拟乘法器的内部结构 集成模拟乘法器是完成两个模拟量(电压或电流)相乘的电子器件。在高频电子线路中,振幅调制、同步检波、混频、倍频、鉴频、鉴相等调制与解调的过程,均可视为两个信号相乘或包含相乘的过程。采用集成模拟乘法器实现上述功能比采用分离器件如二极管和三极管要简单得多,而且性能优越。所以目前无线通信、广播电视等方面应用较多。集成模拟乘法器常见产品有BG314、F1596、MC1495、MC1496、LM1595、LM1596等。 (1)MC1496的内部结构 在本实验中采用集成模拟乘法器MC1496来完成调幅作用。MC1496是四象限模拟乘法器。其内部电路图和引脚图如图12-1所示。其中V1、V2与V3、V4组成双差分放大器,以反极性方 式相连接,而且两组差分对的恒流源V5与V6又组成一对差分电路,因此恒流源的控制电压可 图12-1 MC1496的内部电路及引脚图 正可负,以此实现了四象限工作。V7、V8为差分放大器V5与V6的恒流源。 (2)静态工作点的设定 1)静态偏置电压的设置

编译原理词法分析实验报告

词法分析器实验报告 一、实验目的 选择一种编程语言实现简单的词法分析程序,设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 : = + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 各种单词符号对应的种别码: 表各种单词符号对应的种别码 词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根

据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 主程序示意图: 主程序示意图如图3-1所示。其中初始包括以下两个方面: ⑴关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: Char *rwtab[6] = {“begin”, “if”, “then”, “while”, “do”, “end”,}; 图3-1 (2)程序中需要用到的主要变量为syn,token和sum 扫描子程序的算法思想: 首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn 用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。

两个大整数相加实验报告

两个大整数的加法实验报告 实验目的 利用VC算出两个大整数的加法结果,更深入的了解加法与线性列表逆转的算法运用。实验代码 typedef char ElemType typedef struct { ElemType Element [ MaxSize]; int Length; }SeqList; SeqList List; void Add(Sqelist*L_pointer1,SeqList*L_pointer2,Seqlist*L_pointer3) { int i,j,k; char sum; int flag; i=L_pointer1->Length-1; j=L_pointer2->Length-1; k=0; L_pointer3->Length=0; flag=0; while(i=0&&j>=0) { sum=L_pointer1->Element[i]+L_pointer2->Element[j]+flag; if(sum>9) { flag=1;sum=sum%10; else flag=0; L_pointer3->Element[k]=sum; L_pointer3->Length++; i--;j--;k++; } while(i>-1) { sum=L_pointer1->Element[i]+flag; if(sum>9) { flag=1;sum=sum%10;} else flag=0; L_pointer3->Element[k]=sum; L_pointer3->Length++; i--;k++; }

while(j>-1) { sum=L_pointer2->Element[j]+flag; if(sum>9) { flag=1;sum=sum%10; } else; flag=0; L_pointer3->Element[k]=sum; L_pointer3->Length++; j--;k++; } if(flag==1) { L_pointer3->Element[k]=1; L_pointer3->Length++; } Reverse(L_pointer3); } void Reverse(SeqList * L_pointer) { ElemType temp,*p,*q; p=L_pointer->Element; q=L_pointer->Element+L_pointer->Length-1; while(p<=q) { temp=*p; * p=* q; * q=temp; p++;q--; } } void main () { int x,i,loca; char s[80]; SeqList List1,List2,List3; Init_SeqList(&List1); Init_SeqList(&List2); Init_SeqList(&List3); printf("请输入两个长整数,用空格分开:") scanf("%s",s); i=0; while(s[i]!='\0') { Insert_Last(&List1,s[i]-'0'); i++; } scanf("%s",s);

实验三---集成乘法器幅度调制实验

实验三---集成乘法器幅度调制实验

高频实验报告实验名称:集成乘法器幅度调制实验 南京理工大学紫金学院电光系一、实验目的

a) 通过实验了解集成乘法器幅度调制的工作原理,验证普通调幅波(AM ) 和抑制载波双边带调幅波(AM SC DSB -/)的相关理论。 b) 掌握用集成模拟乘法器MC1496实现AM 和DSB-SC 的方法,并研究调制信 号、载波信号与已调波之间的关系。 c) 掌握在示波器上测量与调整调幅波特性的方法。 二、实验基本原理与电路 1.调幅信号的原理 (一) 普通调幅波(AM )(表达式、波形、频谱、功率) (1).普通调幅波(AM )的表达式、波形 设调制信号为单一频率的余弦波: t U u m Ω=ΩΩcos ,载波信号为 : t U u c cm c ωcos = 普通调幅波(AM )的表达式为AM u =t t U c AM ωcos )()cos 1(t m U a cm Ω+=t c ωcos 式中, a m 称为调幅系数或调幅度。 由于调幅系数a m 与调制电压的振幅成正比,即 m U Ω越大, a m 越大,调幅波 幅度变化越大, 一般 a m 小于或等于1。如果 a m >1,调幅波产生失真,这种情况称为过调幅。 未调制状态调制状态 m a Ucm ω0 Ω 图3-1 调幅波的波形 (2). 普通调幅波(AM )的频谱 普通调幅波(AM )的表达式展开得: t U m t U m t U u c cm a c cm a c cm AM )cos(2 1 )cos(21cos Ω-+Ω++ =ωωω 它由三个高频分量组成。将这三个频率分量用图画出,便可得到图

大整数的乘法实验报告

算法设计与分析实验报告 姓名:XXX 班级:XXX 学号:XXX

一、实验名称:大整数的乘法 时间:2012年3月7日,星期三,第四节 地点:12#311 二、实验目的及要求 实现大整数相乘,需要处理很大的整数,它无法在计算机硬件能直接表示的整数范围内进行处理。若用浮点数来表示它,则只能近似的表示它的大小,计算结果中的有效数字也受到限制。如要精确地表示大整数并在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的算术运算。 三、实验环境 Vc++。 四、实验内容 从键盘上输入两个大整数,实现两个大整数相乘,并输出结果。 例如:在键盘上输入两个数a,b。 a=9876543210; b=369852147; 五、算法描述及实验步骤 定义三个数组a[100],b[100],c[199]。 用数组a来存放大整数a,a[0]=9,a[1]=8,a[2]=7,a[3]=6,a[4]=5,a[5]=4,a[6]=3, a[7]=2,a[8]=1,a[9]=0; 用数组b来存放大整数b,b[0]=3,b[1]=6,b[2]=9,b[3]=8,b[4]=5,b[5]=2,b[6]=1 b[7]=4,b[8]=7。 用数组c来存放数组a和b每一位的乘积, c[0]=a[0]*b[0]; c[1]=a[1]*b[0]+a[0]*b[1]; c[2]=a[2]*b[0]+a[1]*b[1]+a[0]*b[2]; …… …… c[17]=a[9]*b[8]; 六、调试过程及实验结果 void make(int a[],int aa,int b[],int bb,int c[]){ int i,j; for(i=0;i

Booth乘法器实验报告

运算器部件实验:Booth乘法器 班级:软件工程 一、实验目的 理解并掌握乘法器的原理。 二、实验原理 Booth算法是一种十分有效的计算有符号数乘法的算法。算法的新型之处在于减法也可用于计算乘积。Booth发现加法和减法可以得到同样的结果。因为在当时移位比加法快得多,所以Booth发现了这个算法,Booth算法的关键在于把1分类为开始、中间、结束三种,如下图所示 当然一串0或者1的时候不操作,所以Booth算法可以归类为以下四种情况: Booth算法根据乘数的相邻2位来决定操作,第一步根据相邻2位的4中情况来进行加或减操作,第二部仍然是将积寄存器右移,算法描述如下: (1)根据当前为和其右边的位,做如下操作: 00: 0的中间,无任何操作; 01: 1的结束,将被乘数加到积的左半部分; 10:1的开始,积的左半部分减去被乘数; 11: 1的中间,无任何操作。 (2)将积寄存器右移1位。 因为Booth算法是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移。同时如果乘数或者被乘数为负数,则其输入为该数的补码,若积为负数,则输出结果同样为该数的补码。

三、实验步骤 (1)打开QuartusII (2)将子板上的JTAG端口和PC机的并行口用下载电缆连接,打开试验台电源。 (3)执行Tools→Programmer命令,将booth_multiplier.sof下载到FPGA 中。 (4)在实验台上通过模式开关选择FPGA-CPU独立调试模式010. (5)将开关CLKSEL拨到0,将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU 所需要的时钟使用正单脉冲时钟。 四、实验现象 五、具体代码实现 端口声明: port ( clk: in std_logic; md : in std_logic_vector(3 downto 0); mr : in std_logic_vector(3 downto 0);

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

武汉理工大学编译原理实验报告

武汉理工大学 学生实验报告书 实验课程名称编译原理课程实验 开课学院计算机科学与技术学院指导老师姓名饶文碧 学生姓名徐强国 学生专业班级软件 1602 2018 —2019 学年第1 学期

实验课程名称:编译原理

依次输入关键字,自定义标识符 BBBJKJL KJKJ4234,整数 3432,特 殊符号和其他符号:. {} []。 二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)输出为:

三、实验小结、建议及体会 通过这次的词法分析实验,我遇到了不少问题。对于输入字符串的直接处理,首先是分类情况的不完整(起初忽略了对关键字的判断),造成输出结果与预想有很大偏差。总结下:作为编译的第一步,词法分析将高级语言一步步分解,然后转化为自己的语言,这是一个严谨有十分有趣的过程。

核心代码: struct word //存储关键字,特殊符号 { int code; char T[max]; }; word important[5]; //结构体变量存储关键字 word num; //结构体变量存储数字 word identifier; //结构体变量存储标识符 word special_symbol[7]; //结构体变量存储特殊符号 int function(word* a, word b, word c, word* d, char* input, int k) { char getword[max]; int j = 0; if (input[j] == ' ') // 判断空格 { k = k + j + 1; function(a, b, c, d, input + j + 1, k); } else if (input[j] == '=' || input[j] == '+' || input[j] == ',' || input[j] == '(' || input[j] == ')') //判断特殊符号 { if (input[j] == '*') { getword[j] = input[j]; j = j + 1; if (input[j] == '*') { } else { } else { } getword[j] = input[j]; cout << '(' << d[3].code << ',' << d[3].T << ')' << endl; j = j - 1; cout << '(' << d[2].code << ',' << d[2].T << ')' << endl; getword[j] = input[j]; for (int i = 0; i < 7; i++) { if (i == 3) continue;

相关文档