大整数加法实验报告

大整数加法实验报告
大整数加法实验报告

实验报告

题目:大整数加法

班级:计算机111班姓名:XXX 学号:11136103 完成日期:2012.04.12

一、目的与要求

1、线性表的链式存储结构及其基本运算、实现方法和技术的训练。

2、单链表的简单应用训练

3、熟悉标准模版库STL中的链表相关的知识

二、需求分析

1、本实验要求实现线性表的链式储存及其相应操作,而这也是解决大整数加法

的基础。

2、对于给出的两个大整数,若要对其进行加法(或减法运算),可以先将两个大

整数用线性表的链式储存起来,再对其进行运算。

三、概要设计

1、线性表的抽象数据类型定义

ADT List {

数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 }

数据关系:R1={ | ai-1, ai∈D, i=2,...,n }

{设线性表为(a1,a2,…,ai,…,an),称i为ai在线性表

中的位序。}

基本操作:

InitList(&L)

操作结果:构造一个空的线性表L。

DestroyList(&L)

初始条件:线性表L已存在。

操作结果:销毁线性表L。

ClearList(&L)

初始条件:线性表L已存在。

操作结果:将线性表L重置为空表。

PriorElem(L,cur_e,&pre_e) (求元素前驱)

初始条件:线性表L 已存在。

操作结果:若cur_e 是L的元素,但不是第一个,则用pre_e 返回它的前驱,否则操作失败,pre_e无定义。

NextElem( L, cur_e, &next_e ) (求元素后继)

初始条件:线性表 L 已存在。

操作结果:若 cur_e 是 L 的元素,但不是最后一个,则用 next_e 返回它的后继,否则操作失败,next_e无定义。

LocateElem( L, e, compare( ) ) (定位函数)

初始条件:线性表 L 已存在,e 为给定值,compare( )是元素判定函数。

操作结果:返回 L 中第 1 个与 e 满足关系 compare( )的元素的位序。若元素不存在,返回0。

GetElem( L, i, &e ) (求线性表中某个元素)

初始条件:线性表 L 已存在,且1≤i≤LengthList(L)

操作结果:用 e 返回 L 中第 i 个元素的值。

PutElem( &L, i, e ) (改变数据元素的值)

初始条件:线性表 L 已存在,且1≤i≤LengthList(L) 。

操作结果:L 中第 i 个元素赋值同 e 的值。

} ADT List

2、主程序的处理流程

int main(){

线性表初始化;

读入大整数序列 n;

if(!(cin>>n)) break;;

进行加(减)运算;

输出结果;

return 0;

}

四、详细设计

1线性表的实现(链式结构)

struct LNode{ //定义节点

int data;

LNode *next;

};

struct LinkList //单链表的基本操作

{

LNode *head,*tail;

void Init(); //初始化

void Clear(); //链表清空

void Create(int n); //创建链表

int Locate(int e); //查找元素 e 在链表中的位子

bool InsertBefore(int i,int e); //在位子 i 之前插入元素 e bool Delete(int i); //删除 i 位子的元素

void Traverse(); //遍历输出

bool Empty(); //判断单链表是否为空

};

void LinkList::Init(){

head=new LNode;

head->next=NULL;

}

void LinkList::Create(int n){

tail=head;

for(int i=0;i

{

LNode *p=new LNode;

cin>>p->data;

p->next =NULL;

tail->next =p;

tail=p;

}

}

int LinkList::Locate(int e){

int i=1;

LNode *p=head->next;

while(p!=NULL) {

if(p->data==e) break;

else {

p=p->next;

i++;

}

}

if(p==NULL) return 0;

else return i;

}

bool LinkList::Delete(int i){

LNode *p=head;

while(i>1&&p->next!=NULL){

p=p->next ;

i--;

}

if(i<1||p->next ==NULL) return false;

LNode *q=p->next;

p->next =p->next->next;

delete q;

}

bool LinkList::InsertBefore(int i,int e){

LNode *p=head;

while(i>1 && p->next!=NULL) {

p=p->next;

i--;

}

if(p->next ==NULL || i<1) return false;

LNode *q=new LNode;

q->data=e;

q->next=p->next;

p->next=q;

return true;

}

void LinkList::Traverse(){

LNode *p=head->next;

while(p!=NULL){

cout<data ;

if(p->next !=NULL) cout<<" ";

p=p->next ;

}

cout<

}

2、利用单链表储存大整数(大整数的位数不限)

Void() //将大整数保存在 lt 中

{

string s;

cin>>s;

LinkList lt;

lt.Init();

for(int j=s.size()-1;j>=0;j--)

{

lt.InsertBefore(1,s[j]-'0');

}

}

bool run(){

LinkList lst;

int n,cnt=0;

if(!(cin>>n)) return false;

lst.Init();

lst.Create(n);

LNode *p=lst.head;

lst.Traverse ();

lst.InsertBefore(1,5);

lst.Traverse ();

lst.Delete(3);

lst.Traverse ();

cout<

return true;

}

3、利用单链表实现两个大整数的相加、相减运算(减法运算可选做)

LinkList BigAdd(LinkList lt1,LinkList lt2) //it1,it2为单链表储存的大整数

{

LinkList lt;

lt.Init();

LNode *p1=lt1.head->next;

LNode *p2=lt2.head->next;

int carry=0;

while(p2!=NULL){

int k=p1->data+p2->data+carry;

p1->data=k%10;

carry=k/10;

p1=p1->next; p2=p2->next;

}

if(p1!=NULL)p1->data+=carry;

else if(carry>0){

LNode *n=new LNode;

n->data=carry;

n->next=p1->next; p1->next=n;

}

p1=lt1.head->next;

p2=lt.head;

while(p1!=NULL){

lt.InsertBefore(1,p1->data);

p1=p1->next;

}

return lt;

}

Void run(){

string s,t;

cin>>s>>t;

LinkList lt1,lt2;

lt1.Init();

lt2.Init();

if(s.size()

for(int j=0;j

lt1.InsertBefore(1,s[j]-'0');

lt2.InsertBefore(1,t[j]-'0');

}

for(int i=t.size();i

lt.Traverse();

}

4、用STL之stack完成上面的任务。

#include

struct LNode{int data;};

list Lt;

list BigAdd(list lt1,list lt2){

list lt;

list::iterator it1,it2;

it1=lt1.begin();

it2=lt2.begin();

int carry=0;

while(it2!=lt2.end()){

int k=it1->data+carry+it2->data;

it1->data=k%10; carry=k/10;

it1++; it2++;

}

if(it1!=lt1.end()) it1->data+=carry;

else if(carry>0){

LNode n;

n.data=carry;

lt1.push_front(n);

}

it1=lt1.begin();

while(it1!=lt1.end()){

lt.push_front(*it1); it1++;

}

return lt;

}

void Traverselist(){

list::iterator it=Lt.begin();

while(it!=Lt.end()){

cout<data; it++;

}

cout<

}

bool run()

{

string s,t;

cin>>s>>t;

list lt1,lt2;

if(s

LNode t1,t2;

for(int j=0;j

t1.data=s[j]-'0'; t2.data=t[j]-'0';

lt1.push_front(t1); lt2.push_front(t2); }

for(int i=t.size();i

t1.data=s[i]-'0'; lt1.push_front(t1); }

Lt=BigAdd(lt1,lt2);

Traverselist();

return true;

}

5、尝试完成HLoj 1020。

#include

#include

#include

using namespace std;

const int MaxLen = 1000;

const int DIGIT = 4;

const int MOD = 10000;

typedef int BigInt[MaxLen];

void give(BigInt a, BigInt& b)

{

int i = 0;

while(i<=a[0])

{

b[i] = a[i];

i++;

}

}

void give(int a, BigInt& b){

b[1] = a%MOD;

a /= MOD;

int pos=2;

while(a>0)

{

b[pos++] = a%MOD;

a /= MOD;

}

b[0]=pos-1;

}

void BigAdd(BigInt a, BigInt b, BigInt& c) {

int i,carry=0;

for (i=1; i<=a[0] || i<=b[0] || carry>0; i++)

{

if(i<=a[0]) carry += a[i];

if(i<=b[0]) carry += b[i];

c[i] = carry%MOD;

carry /= MOD;

}

c[0] = i-1;

}

void output(const BigInt a){

printf("%d",a[a[0]]);

for (int i=a[0]-1; i>0; i--)

{

for(int j=MOD/10; j>0; j/=10)

{

printf("%d",a[i]/j%10);

}

}

}

BigInt F[1001];

int main()

{

int T;

cin>>T;

give(1,F[1]);

give(1,F[2]);

for(int i=3; i<1001; i++)

{

BigAdd(F[i-1],F[i-2],F[i]);

}

for(int t=0; t

{

int n;

cin>>n;

output(F[n]);

cout<

}

return 0;

}

五、调试分析

⑴时间复杂度:(3n)(n为最大大整数的长度)

⑵经验和体会:大整数的加法或减法可以通过用不同的储存结构对其进行存储再运算得到(可以推广到其他问题)

五、测试结果

测试通过

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

声明:本算法可以实现整数乘以整数,小数乘以小数功能。但是小数只能是小数点前不为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

大整数乘法(分治法)

#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--) {

土地利用规划实验指导书

《土地利用规划》课程实验指导书 环境与地理科学系 2009 年 9 月 10 日

实验一土地需求量预测 一、实验目的 1.了解土地需求量预测的必要性和意义; 2.掌握不同的土地需求量预测方法,明确不同方法的实用性; 3.能够借助传统手工方式或计算机计算方式熟练使用不同的预测方法。 二、实验原理 预测是土地利用管理的重要手段,是了解和协调时期和区域土地利用供给量与需求量之间的关系的重要内容。土地需求量受一定时期国民经济、社会发展、土地质量和区位条件等的影响。耕地需求量预测是土地利用规划预测中最基本的内容。 三、实验过程 1.确定预测目的; 2.检验土地需求量预测案例提供的资料; 3.利用传统手工方式或者计算机软件实施预测过程:分别采用趋势预测法和回归分析法对案例(见附件1)进行预测。其中,手工计算方式严格按照预测方法的原理进行逐步计算;计算机计算可以采用EXCEL数据分析工具或者SPSS软件等; 4.比较传统手工和计算机两种计算方式的优缺点; 5.分析预测误差。 四、注意事项 数据输入时要仔细,分析过程中做到谨慎认真。 五、上交资料 提交实验报告,内容书写要规范。

附件1: 例1. 根据某县市1970-1999年30年耕地面积资料(表-1),采用趋势预测法计算出预测方程并绘制趋势线,同时计算出2000年的耕地面积,最后对预测误差进行分析。 表-1 ××县1970-1999年耕地面积

例2.未来耕地面积受多种因素的制约,如人口、单产、总产、基建投资等,并随着上述因素的变化而变化,在它们之间存在着因果关系。下表提供了某县市1970-1999年30年人口、粮食总产量和耕地面积的资料(表-2),由此采用回归分析法预测2000年的耕地面积,并列出回归分析方程,最后分析预测误差。 表-2 ××县1970-1999年人口、粮食总产量和耕地面积

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;

土地利用规划-耕地需求量预测 实验报告

贵州大学实验报告 实验 4 :耕地需求量预测 学院:农学院 专业:农业资源与环境 班级: 姓名: 学号: 指导教师:周焱 时间: 2014 年 06 月 11 日

第一部分实验目的 通过本实验的学习,使学生掌握耕地需求量预测的具体过程。 第二部分实验原理 本实验以兴义市,根据兴义市自然、社会经济条件和发展趋势,预测2010年和2020年兴义市耕地保有量和基本农田保护面积。 第三部分实验步骤 1、搜集兴义市自然经济条件等相关资料; 2、根据人口历史资料和兴义市相关发展规划,对2010年和2020年人口规模进行预测; 3、根据人口预测和相关粮食标准对耕地保有量和基本农田保护面积进行预测; 第四部分报告正文 根据表1中1997年——2005年年平均人口自然增长率,得出年平均人口增长率为0.82%,年平均人口机械增长率为0.38%,以2004年作为参考依据,预测出2010年与2020年的人口规模: P t = P o ×(1+K+P)(t-to)+(c-d) 式中:P t ——规划年人口数 P t0 ——基期年人口数 t-t ——预测年期 K——人口自然增长率 c——规划期内迁入人数 d——规划期内迁出人数 P t2010 = P t2004 ×(1+K+P)(t-to)+(c-d) =73.42×(1+0.82%+0.38%) 6+4.3 =83.17 (万人) P t2020 = P t2004 ×(1+K+P)(t-to) =73.42×(1+0.82%+0.38%) 16+4.3 = 93.16(万人) 根据年平均增长率法计算出年均粮食单产,其中r为2000年——2005年的年平均增长率的平均值1.03%: a n = a o ×(1+r)n

计组-加法器实验报告

半加器、全加器、串行进位加法器以及超前进位加法器 一、实验原理 1.一位半加器 A和B异或产生和Sum,与产生进位C 2.一位全加器 将一位半加器集成封装为halfadder元件,使用两个半加器构成一位的全加器 3.4位串行进位加法器 将一位全加器集成封装为Fulladder元件,使用四个构成串行进位加法器

4.超前进位加法器(4位) ⑴AddBlock 产生并行进位链中的ti(即Cthis)和di(即Cpass),以及本位结果Sum ⑵进位链(Cmaker) 四位一组并行进位链,假设与或非门的级延迟时间为1.5ty,与非门的延迟时间为1ty,在di和ti产生之后,只需2.5ty就可产生所有全部进位

⑶超前进位加法器 将以上二者结合起来即可完成,A和B各位作为各个AddBlock的输入,低一位的进位Ci-1作为本位AddBlock的C-1的输入。各个AddBlock输出的C_this和C_pass作为对应的Cmaker的thisi和passi的输入。

二、实验器材 QuartusII仿真软件,实验箱 三、实验结果 1.串行进位加法器结果 2.超前进位加法器结果

四、实验结果分析 1.实验仿真结果显示串行加法器比超前进位加法器快,部分原因应该是电路结构优化 不到位。另外由于计算的位数比较少,超前进位加法链结构较复杂,所以优势没体现出来,反倒运作的更慢一点。当位数增加的时候,超前进位加法器会比串行的更快。 2.波形稳定之前出现上下波动,应该与“竞争冒险”出现的情况类似,门的延迟和路径 的不同导致了信号变化时到达的时间有先有后,因此在最终结果形成前出现了脉冲尖峰和低谷;另外也可能部分原因由于电路结构优化的不到位所致

大整数乘法问题

大整数乘法问题 一、问题分析 (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)静态偏置电压的设置

FPGA一位全加器设计实验报告

题目:1位全加器的设计 一.实验目的 1.熟悉QUARTUSII软件的使用; 2.熟悉实验硬件平台的使用; 3.掌握利用层次结构描述法设计电路。 二.实验原理 由于一位全加器可由两个一位半加器与一个或门构成,首先设计半加器电路,将其打包为半加器模块;然后在顶层调用半加器模块组成全加器电路;最后将全加器电路编译下载到实验箱,其中ain,bin,cin信号可采用实 验箱上SW0,SW1,SW2键作为输入,并将输 入的信号连接到红色LED管 LEDR0,LEDR1,LEDR2上便于观察,sum,cout 信号采用绿色发光二极管LEDG0,LEDG1来 显示。 三.实验步骤 1.在QUARTUSII软件下创建一工程,工程名为full_adder,芯片名为EP2C35F672C6; 2.新建Verilog语言文件,输入如下半加器Verilog语言源程序; module half_adder(a,b,s,co); input a,b; output s,co; wire s,co; assign co=a & b; assign s=a ^ b; Endmodule 3.保存半加器程序为,进行功能仿真、时序仿真,验证设计的正确性。 其初始值、功能仿真波形和时序仿真波形分别如下所示

4.选择菜单File→Create/Update→Create Symbol Files for current file,创建半加器模块; 5.新建一原理图文件,在原理图中调用半加器、或门模块和输入,输出引脚,按照图1所示连接电路。并将输入ain,bin,cin连接到FPGA的输出端,便于观察。完成后另保存full_adder。 电路图如下 6.对设计进行全编译,锁定引脚,然后分别进行功能与时序仿真,验证全加器的逻辑功能。其初始值、功能仿真波形和时序仿真波形分别如下所示

模拟乘法器调幅(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位加法器 【目的与要求】 1. 掌握1位全加器的设计 2. 学会1位加法器的扩展 【实验内容】 1. 设计1位全加器 2. 将1位全加器扩展为4位全加器 3. 使4位的全加器能做加减法运算 【操作步骤】 1. 1位全加器的设计 (1)写出1位全加器的真值表 (2)根据真值表写出表达式并化简 (3)画出逻辑电路 (4)用quartusII进行功能仿真,检验逻辑电路是否正确,将仿真波形截图并粘贴于此 (5)如果电路设计正确,将该电路进行封装以用于下一个环节 2. 将1位全加器扩展为4位全加器 (1)用1位全加器扩展为4位的全加器,画出电路图

(2)分别用两个4位补码的正数和负数验证加法器的正确性(注意这两 个数之和必须在4位补码的数的范围内,这两个数包括符号在内共4位),用quartusII进行功能仿真并对仿真结果进行截图。 3. 将4位的全加器改进为可进行4位加法和减法的运算器 (1)在4位加法器的基础上,对电路进行修改,使该电路不仅能进行加 法运算而且还能进行减法运算。画出该电路 (2)分别用两个4位补码的正数和负数验证该电路的正确性(注意两个 数之和必须在4位补码的数的范围内),用quartusII进行功能仿真并对仿真结果进行截图。 【附录】 篇二:加法器的基本原理实验报告 一、实验目的 1、了解加法器的基本原理。掌握组合逻辑电路在Quartus Ⅱ中的图形输入方法及文本输入方法。 2、学习和掌握半加器、全加器的工作和设计原理 3、熟悉EDA工具Quartus II和Modelsim的使用,能够熟练运用Vrilog HDL语言在Quartus II下进行工程开发、调试和仿真。

两个大整数相加实验报告

两个大整数的加法实验报告 实验目的 利用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 Ω-+Ω++ =ωωω 它由三个高频分量组成。将这三个频率分量用图画出,便可得到图

土地资源调查与评价实验一

实验一土地要素分析 1208140515 土资122班 张舵 一、实验目的 根据研究区域基础数据资料,分析地形、植被、土壤、土地利用方式等土地构成要素的空间演替的规律。 二、实验数据 1.北京市海淀区数字高程模型(DEM) 2.北京市海淀区土壤类型图(土壤.*) 3.北京市海淀区土地利用现状图(简化)(HDDLTB.*) 4.北京市海淀区“凤凰岭-稻香湖”样区条带遥感影像(Sat_DXH31.tif)

三、实验过程 1.将DEM由Raster转化为TIN 打开ArcMap10.2,点击加载实验数据,在Arc Toolbox中选择3D Analyst Tools→Conversion→From Raster→Raster to TIN(图1),输入栅格为DEM图层(图2),将数字高程模型(DEM)由栅格格式(Raster)转化为不规则三角网格式(TIN)(图3)。 图 1 Arc Toolbox工具栏 图 2 Raster to TIN窗口

图 3不规则三角网格式(TIN)的数字高程图 2.选择断面 将遥感影像图层置于所有图层顶端,在研究样区条带内,点击,选择一条东西向、横跨研究样区的断面,并用红线加粗显示(图4) 图4 断面位置示意图 断面在栅格中的具体位置如下图(图5) 图5断面栅格位置图 3.断面地形分析 (1)点击生成断面高程变化图,结合遥感影像进行地形判断。 (2)在Arc Toolbox中选择Spatial Analyst Tools→Surface→Contour,

把生成的TIN图作为输入图层,等值线高差为50米,生成等值线图,进行等值线分析。(图6) 图6等值线分析 4.地貌类型分析 在Arc Toolbox中选择Spatial Analyst Tools→Surface→Slope,把生成的TIN图作为输入图层,生成坡度图,与高程变化图、等值线图对照,分析地貌类型及其部位。 5.土壤类型和属性 在土壤类型图的图层属性中选择符号系统,值字段为土类,添加所有值,并将卵石滩值移除后确定(图7) 图7 土类图层属性表

加法器的基本原理实验报告

一、实验目的 1、了解加法器的基本原理。掌握组合逻辑电路在Quartus Ⅱ中的图形输入方法及文本输入方法。 2、学习和掌握半加器、全加器的工作和设计原理 3、熟悉EDA工具Quartus II和Modelsim的使用,能够熟练运用Vrilog HDL语言在Quartus II下进 行工程开发、调试和仿真。 4、掌握半加器设计方法 5、掌握全加器的工作原理和使用方法 二、实验内容 1、建立一个Project。 2、图形输入设计:要求用VHDL结构描述的方法设计一个半加器 3、进行编译,修改错误。 4、建立一个波形文件。(根据真值表) 5、对该VHDL程序进行功能仿真和时序仿真Simulation 三、实验步骤 1、启动QuartusⅡ 2、建立新工程NEW PROJECT 3、设定项目保存路径\项目名称\顶层实体名称 4、建立新文件Blok Diagram/Schematic File 5、保存文件FILE /SA VE 6、原理图设计输入 元件符号放置通过EDIT_>SYMBOL 插入元件或点击图标 元件复制 元件移动 元件转动 元件删除 管脚命名PIN_NAME 元件之间连线(直接连接,引线连接) 7、保存原理图 8 、编译:顶层文件设置,PROJECT_>Set as Top_Level 开始编译processing_>Start Compilation 编译有两种:全编译包括分析与综合(Analysis&Synthesis)、适配(Fitter)、编程(assembler)时序分析(Classical Timing Analysis)4个环节,而这4个环节各自对应相应菜单命令,可单独发布执行也可以分步执行

大整数的乘法实验报告

算法设计与分析实验报告 姓名: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);

实验报告

五尧乡生态乡镇建设规划 目录 1.总论 1.1任务的由来 (2) 1.2编制的依据 (2) 1.3规划指导思想 (2) 1.4规划原则 (2) 1.5规划年限 (3) 1.6规划目标 (3) 2.五尧乡基本状况 (4) 2.1五尧乡自然地理状况 (4) 2.2五尧乡社会经济状况 (4) 3.城镇规划 (4) 4.生态环境规划 (5) 4.1生态资源状况 (5) 4.2环境质量现状 (6) 4.3生态环境问题 (6) 4.4生态环境保护规划 (7) 5.效益分析 (9) 5.1生态效益 (9) 5.2经济效益 (9) 5.3社会效益 (9) 6.规划实施的保障措施 (9) 6.1政策法规保障体系 (10) 6.2组织机构与管理保障体系 (10) 6.3文化教育和社会监督体系 (11) 6.4资金筹措与投资保障体系 (11) 6.5实施手段与技术保障体系 (12) 6.6决策支持信息系统体系 (12)

1.总论 1.1任务的由来 随着经济的迅速发展,以及城市的逐渐扩张,我国进入了一个中国城市化和城市高速发展的关键时期。而小城镇的发展在我国城市化进程中,正在发挥着越来越重要的作用。自1998 年党的十五届三中全会确定了“小城镇,大战略”的方针后,党的十六大又进一步把“加快城镇化进程,全面建设小康社会,走中国特色的城镇化道路”作为战略目标。“建立和谐社会,达到全社会的和谐发展”,是党的十六大报告提出的一个新的重要思想。党的十六届四中全会明确提出构建社会主义和谐社会的新命题,进一步深化和拓展了“社会更加和谐”这一思想。加快统筹城乡发展的步伐,解决“三农”问题,切实保护广大农民的利益是构建社会主义和谐社会的一个重要方面,而加快发展小城镇则是统筹城乡、解决“三农问题”、构建和谐社会的关键之一。积极有序地发展小城镇,不仅是加快城市化进程的需要,而且已成为我国国家发展战略的重要组成部分。 1.2编制的依据 城市规划5个阶段,如果按编制规划的话可以说是:纲要、总体规划(城镇体系规划)、分区规划,修建性详细规划,控制性详细规划。 编制这5个阶段的规划的依据个不一样。当然首先都是以国家颁布实施的法律法规、方针政策为依据,城镇总体规划主要有: ⑴《中华人民共和国城乡规划法》 ⑵《中共中央国务院关于促进小城镇健康发展的若干意见》 ⑶《全国生态环境保护纲要》 ⑷《国民经济和社会发展纲要》 ⑸《国家环境保护“十二五”规划》 ⑹《河北省建制镇总体规划编制导则》 ⑺《保定市志》 ⑻《保定市城市总体规划(2008—2020年)》 ⑼《保定市土地利用总体规划(2010-2020)》 ⑽《五尧乡国民经济统计资料及城建资料》 ⑾《五尧乡各类专业部门提供的规划基础资料》 1.3规划指导思想 本规划以生态化、集约化、市场化为理念,坚持突出五尧乡特色的原则,城乡经济和空间布局一体化发展的原则,土地使用集约化原则,规划弹性灵活的原则和建设精品化的原则。充分发挥城镇规划对城镇发展建设的战略性、前瞻性、综合性指导作用。 贯彻可持续发展战略,坚持环境与发展综合决策,努力解决小城镇建设与发展中的生态环境问题;坚持以人为本,以创造良好的人居环境为中心,加强城镇生态环境综合整治,努力改善城镇生态环境质量,实现经济发展与环境保护“双赢”。 1.4规划原则 ⑴区域协同发展的原则 融入区域环境,实现持续发展。五尧乡的发展必须在区域的框架内明确自身定位,发挥自身优势,实现快速发展。从广域范围内分析五尧乡的发展,增强规划的区域观念和整体竞争力,积极融入保定市新一轮发展之中,谋求以大区域为背景的城镇整体发展。

加法器及差分放大器项目实验报告

加法器及差分放大器项目实验报告 一、项目内容和要求 (一)、加法器 1、任务目的: (1)掌握运算放大器线性电路的设计方法; (2)理解运算放大器的工作原理; (3)掌握应用仿真软件对运算放大器进行仿真分析的方法。 2、任务内容: 2.1 设计一个反相加法器电路,技术指标如下: (1)电路指标 运算关系:)25(21i i O U U U +-=。 输入阻抗Ω≥Ω≥K R K R i i 5,521。 (2)设计条件 电源电压Ec=±5V ; 负载阻抗Ω=K R L 1.5 (3)测试项目 A :输入信号V U V U i i 5.0,5.021±=±=,测试4种组合下的输出电压; B :输入信号V KHz U V U i i 1.0,1,5.021为正弦波±=信号,测试两种输入组合情况下的输出电 压波形。 C :输入信号V U i 01=,改变2i U 的幅度,测量该加法器的动态范围。 D :输入信号V U i 01=,V U i 1,2为正弦波,改变正弦波的频率,从1kHz 逐渐增加,步长为 2kHz ,测量该加法器的幅频特性。 2.2 设计一个同相加法器电路,技术指标如下: (1)电路指标 运算关系:21i i O U U U +=。 (2)设计条件 电源电压Ec=±5V ; 负载阻抗Ω=K R L 1.5 (3)测试项目 A :输入信号V U V U i i 1,121±=±=,测试4种组合下的输出电压; B :输入信号V KHz U V U i i 1,1,121为正弦波±=信号,测试两种输入组合情况下的输出电压 波形。 (二)、差分放大器 1、任务目的: (1)掌握运算放大器线性电路的设计方法; (2)理解运算放大器的工作原理; (3)掌握应用仿真软件对运算放大器进行仿真分析的方法。 2、任务内容 2.1 设计一个基本运放差分放大器电路,技术指标如下: (1)电路指标 运算关系:)(521i i O U U U --=。 输入阻抗Ω≥Ω≥K R K R i i 5,521。 (2)设计条件

相关文档
最新文档