单词计数器

单词计数器
单词计数器

第七周作业

查找排序算法

设计一个单词计数器

·统计一个文件重出现过哪些单词以及它们出现的频次

·把统计结果按单词词典顺序和频次由小到大顺序两种方式进行记录

数据结构描述:

定义结构体类型In, 记录单词及其出现次数。

struct In {

int count;

char str[20];

}voc[N];

第一种算法查找方法比较原始,用O(N^2)的复杂度进行查找。

如果对算法进行改进,则可使用二叉搜索树进行查找。

定义树节点,存放element,左右指针分别指向左右孩子。

typedef struct TreeNode *SearchTree;

struct TreeNode

{

ElementType Element;

SearchTree Left;

SearchTree Right;

};

算法描述及程序:

1、对于是否为单词的判断。

一般情况下,输入的文章中不只有单词,还会包括标点符号等信息,在单词中也可能出现连字符或者乱码,因此单词计数的前提是判断读入的字符串是否为一个单词。

算法实现为对于字符串,遍历其每个字符,如果在非末位出现了符号且不为连字符,则该字符串不是单词。其中使用了C语言函数库里面的函数ispunct来判断特殊符号。

int Isword(char*string)

{

int i,length;

length=strlen(string);

for(i=0;i

{

if(ispunct(string[i])&&i!=length-1&&string[i]!='-')

//如果在非末位出现了符号且不为连字符,则该字符串不是单词

return0;

elsecontinue;

}

if(ispunct(string[length-1]))//如果在末位出现了符号,则删除该符号

string[length-1]='\0';

return1;

}

2、查找方式。

在附录中的程序中,查找方式较为原始,采用直接遍历的方法,复杂度为O(N^2)。对此可以进行改进,在每读一个单词时,按照compare函数中规定的比较方式,将其插入二叉搜索树种,则其查找的时间复杂度变为O(logN)。该算法的另一优点是在按照词典顺序输出时,不需要再进行一次排序,而可以直接通过中序遍历方式输出。

进行插入的伪代码如下:

SearchTree Insert(ElementType X,SearchTree T)

{

if(T==NULL)

{

T=(SearchTree)malloc(sizeof(TreeNode));//Create and return a one-node tree

if(T==NULL)

printf("Out of space!!!\n");

else

{

T->Element=X;

T->Left=NULL;

T->Right=NULL;

}

}

else

if(compare(X,T->Element))

T->Left=Insert(X,T->Left);

else

if(compare(X,T->Element))

T->Right=Insert(X,T->Right);//Else X is in the tree already;we'll do nothing

return T;

}

进行中序输出的伪代码如下:

void inorder(SearchTree T)

{

if(T)

{

inorder(T->Left);

printf("%d",T->Element);

inorder(T->Right);

}

}

3、输出排序方式。

当所有单词被读入后,数组voc中存放了所有单词及其出现次数。

在第一种算法当中,因为数组的存放是无序的,因此在输出时无论按照字典顺序还是频次顺序都要进行排序,这里我们选用实际应用中最快的一种排序方法——快速排序并调用C 语言函数库中的函数。

需要注意的是在按照字典顺序输出时,我们需要对连字符进行处理,即通过在比较时扩大连字符的ASCII码使其大于所有字母。具体代码实现如下:

int compare(char*word1,char*word2)

{

int i,length1,length2;

length1=strlen(word1);

length2=strlen(word2);

for(i=0;i

{

if(word1[i]!='-'&&word2[i]!='-')

{if(word1[i]==word2[i])

continue;

else

return(word2[i]-word2[i]);

}

else{

if(word1[i]=='-')//如果遇到连字符,则提升连字符的ASCII码,使其比字母大

return(-word2[i]+'-'+200);

if(word2[i]=='-')

return(-'-'-200+word2[i]);

}

}

}

如果使用第二种算法即通过二叉搜索树建立我们的单词存储结构,则在按照词典顺序输出时就不需要再次进行排序,可以直接按照中序遍历的顺序输出。

然而在输出频次顺序的时候比较困难,可以通过调整二叉树或者使用堆排等方式实现。运行结果:

输入:

abdff! abc-def abc-z abcde abc-def abc%dfk abdff! abcde abcde

输出:

abcde 3

abdff 2

abc-def 2

abc-z 1

abc-z 1

abdff 2

abc-def 2

abcde 3

附:源代码(C语言)

#include

#include

#include

#include

#define N 100

char temp[20];

int num;

struct In{

int count;

char str[20];

}voc[N];

int Isword(char*string)

{

int i,length;

length=strlen(string);

for(i=0;i

{

if(ispunct(string[i])&&i!=length-1&&string[i]!='-')//如果在非末位出现了符号且不为连字符,则该字符串不是单词

return0;

elsecontinue;

}

if(ispunct(string[length-1]))//如果在末位出现了符号,则删除该符号

string[length-1]='\0';

return1;

}

int compare(char*word1,char*word2)

{

int i,length1,length2;

length1=strlen(word1);

for(i=0;i

{

if(word1[i]!='-'&&word2[i]!='-')

{if(word1[i]==word2[i])

continue;

else

return(word2[i]-word1[i]);

}

else{

if(word1[i]=='-')//如果遇到连字符,则提升连字符的ASCII码,使其比字母大

return(-word2[i]+'-'+200);

if(word2[i]=='-')

return(-'-'-200+word1[i]);

}

}

}

int cmp1(constvoid*a,constvoid*b)//按照单词词典顺序输出的比较

{

struct In*tempa=(struct In*)a,*tempb=(struct In*)b;

return compare(tempa->str,tempb->str);

}

int cmp2(constvoid*a,constvoid*b)//按频次由小到大比较

{

struct In*tempa=(struct In*)a,*tempb=(struct In*)b;

return tempa->count-tempb->count;

}

int main(){

FILE*fp;

int i,check;

if((fp=fopen("test.txt","r"))==NULL){

printf("open file error");

return1;

}

while(!feof(fp)){

if(fscanf(fp,"%s",temp)==EOF)break;

check=Isword(temp);

if(check){//将单词存入数组voc[]

for(i=0;i

if(strcmp(voc[i].str,temp)==0){

voc[i].count++;

break;

}

}

if(i>=num){

strcpy(voc[num++].str,temp);

}

}

else

continue;

}

qsort(voc,num,sizeof(voc[0]),cmp1);//使用快速排序进行排序,然后输出

for(i=0;i

printf("%s %d\n",voc[i].str,voc[i].count+1);

}

printf("\n");

qsort(voc,num,sizeof(voc[0]),cmp2);

for(i=0;i

printf("%s %d\n",voc[i].str,voc[i].count+1);

}

return0;

}

高速计数器模式定义与控制字节

A-1)高速计数器模式 A-2)高速计数器控制字节 SM157SM147.SM137.SM57.SM47SM37.SM157SM147.SM137.SM57.SM47SM37.SM157SM147.SM137.SM57.SM47SM37.SM157SM147.SM137.SM57.SM47SM37.SM157SM147.SM137.SM57.SM47SM37.正交计数器的计数速率选项:SM147. SM57.SM47SM37.起始现用水平控制位:SM57.SM47复原现用水平控制位:SM147.SM57.SM47SM37.启用HSC :0 = 禁用HSC1 = 启用HSC .7 7 7 7 .7 7 向HSC 写入新当前值:0 = 无更新1 = 更新当前值.6666.66向HSC 写入新预设值:0 = 无更新1 = 更新预设值.5555.55向HSC 写入计数方向:0 = 无更新1 = 更新方向.4444.44计数方向控制位:0 = 向下计数1 = 向上计数.3333.330=4x 计数速率1=1x 计数速率 22.220=起始现用水平高1=起始现用水平低 1.1 0=复原现用水平高1=复原现用水平低 0.00 说明 HSC5 HSC4HSC3 HSC2HSC1HSC0 A-3)高速计数器的当前值和预设值的地址 52SMD12SMD5SMD4新预48SMD18SMD4SMD3新当载入SMD162 SMD142SMD622设值 SMD158SMD138SMD588前值HSC5 HSC4HSC3HSC2HSC1HSC0数值

A-4)高速计数器的状态位 当前值大于预设值状态位:SM156.SM146.SM136.当前值等于预设值状态位:SM156.SM146.SM136.当前计数方向状态位:SM156.SM146.SM136.SM156.SM146.SM136.SM156.SM146.SM136.SM156.SM146.SM136.SM156.SM146.SM136.SM156.SM146.SM136.0 = 小于或等于;1 = 大于 7 7 7 SM56.7 SM46.7 SM36.7 0 = 不相等;1 = 等于 666SM56.6SM46.6SM36.60 = 向下计数;1 = 向上计数 555SM56.5SM46.5SM36.5未使用 444SM56.4SM46.4SM36.4未使用333SM56.3SM46.3SM36.3未使用222SM56.2SM46.2SM36.2未使用111SM56.1SM46.1SM36.1未使用000SM56.0SM46.0SM36.0说明HSC5HSC4HSC3HSC2HSC1HSC0 B-1)高速脉冲输出的对应特殊寄存器 手动模式频率寄存器 SMB182 SMB172 线性轮廓结果寄存器SMB181SMB171线性轮廓状态字节SMB180SMB170轮廓表起始位置,用距离V0的字节偏移量表示(仅用于多段PTO 操作)SMW178SMW168进行中的段数(仅用于多段PTO 操作) SMB176SMB166PTO 脉冲计值(范围:1至4294967295)SMD82SMD72PWM 脉宽值(范围:0至65535)SMW80SMW70PTO/PWM 周期值(范围:2至65535)SMW78SMW68其他PTO/PWM 寄存器 Q0.1Q0.0 B-2)高速脉冲控制字节 1 = 启用PTO/PWM 0 = 禁用PTO/PWM ; PTO/PWM 启用 SM77.7 SM67.7 1 = 选择PWM 0= 选择PTO;PTO/PWM 模式选择SM77.6SM67.6 1 = 多段操作0 = 单段操作;PTO 操作:SM77.5SM67.5 1 = 同步更新0 = 异步更新;PWM 更新方法:SM77.4SM67.4 1 = 1ms/tick 0 = 1 μS /tick ;PTO/PWM 选择SM77.3SM67.3 1 = 更新脉冲计数0 = 无更新;PTO 更新脉冲计值SM77.2SM67. 2 1 = 更新脉宽0 = 无更新;PWM 更新脉宽时间值SM77.1SM67.1 1 = 更新周期0 = 无更新;PTO/PWM 更新周期值SM77.0SM67.0控制位Q0.1Q0.0

各种材料计算公式

各种材料计算公式 地砖 规格:1000*1000、800*800、600*600、500*500、400*400、300*300、200*200、100*100 粗略计算法:用砖数量=房间面积/一块地砖的面积*1.1 精确计算法:用砖数量=(房间面积/砖长)*(房间宽度/砖宽)*1.1 例:房间长5米,宽3米,砖规格400X400 用砖数量 =(15米/0.4米)*(3米/0.4米)*1.1=104块 实木地板 常用规格:900*90、750*90、600*90 粗略计算法:使用地板块数=房间面积/一块地板的面积*1.08 精确计算法:使用地板块数=(房间长度/地板长度)*(房间宽度/地板宽度)*1.08 例:长5米,宽3米,地板规格750*90 用板数量=(5米/0.75米)*(3米/0.09米)*1.08=239块 注:实木地板在铺装中通常有8%的损耗 复合地板 常见规格:1.2米*0.19米 粗略计算法:地板块数=房间面积/一块地板面积*1.05 精确计算法:地板块数=(房间长度/地板长度)*(房间宽度/地板宽度)*1.05 例:长5米,宽3米 用板数量=(5米/1.2米)*(3米/0.19米)*1.05米约=70块 注:通常有3%--5%的损耗按面积算千万不要忽视! 涂料 规格:5升、15升 家装常用5升,5升涂料刷面积为35平方米(涂2面) 计算方法:墙面面积=(长+宽)*2*层高

顶面面积=长*宽、地面面积=长*宽 总使用桶数=(墙面面积+顶面积+地面面积)/35平方米 例:长5米,宽3米 墙面积=(5米+3米)*2*2.85平方米=45.6平方米 顶面面积=5米*3米=15平方米 地面面积=5米*3米=15平方米 涂料量=(45.6+15+15)平方米/35平方米=75.6平方米/35平方米=2桶 注:以上只是理论上涂刷量,因在施工中要加入适量清水,所以以上用量只是最低涂刷量 墙纸 规格:每卷长10米,宽0.53米 计算方法:墙纸总面积=地面面积*3 (地面积=长*宽) 墙纸的卷数=墙纸总面积/(0.53米*10米) 常见墙纸规格为每卷长10m,宽0.53m。 粗略计算方法:墙纸的总面积=地面面积×3,墙纸的卷数=墙纸的总面积÷(0.53×10)精确的计算方法:使用的分量数=墙纸总长度÷房间实际高度, 使用单位的总量数=房间的周长÷墙纸的宽度, 使用墙纸的卷数=使用单位的总量数÷使用单位的分量数 因为墙纸规格固定,因此在计算它的用量时,要注意墙纸的实际使用长度,通常要以房间的实际高度减去踢脚板以及顶线的高度。 另外房间的门、窗面积也要在使用的分量中减去。这种计算方法适用于素色或细碎花的墙纸。墙纸的拼贴要考虑对花,图案越大,损耗越大,因此要比实际用量多买10%左右。 隔墙、吊顶 常用的隔墙吊顶有哪些? 隔墙:玻璃(多与铝合金型材塑钢型材组成固定隔断、推拉隔断)石膏板、轻质砖、玻璃砖(价格高)木材、各种板材。常用柜子、鱼缸、屏风

简单计算器的设计与实现

C/C++程序设计课程设计设计说明书 简单计算器的设计与实现 学生姓名 学号 班级 成绩 指导老师 计算机科学与技术系 2010年11月22日

C/C++程序设计课程设计评阅书

课程设计任务书 2010—2011学年第一学期 专业:计算机科学与技术学号:姓名: 课程设计名称: C/C++程序设计课程设计 设计题目:简单计算器的设计与实现 完成期限:自2010 年 11月 15 日至 2010 年 11 月 26 日共2 周 设计内容及要求: 要求用C/C++语言设计一个简易的计算器程序,对输入的数据进行加、减、乘、除、开平方等操作。 设计要求及功能如下: 1.阐述设计思想,画出流程图; 2.实现功能: (1)对输入的数据进行加法运算; (2)对输入的数据进行减法运算; (3)对输入的数据进行乘法运算; (4)对输入的数据进行除法运算; (5)对输入的数据进行开平方根运算。 最终设计成果形式为: 1.编写好的程序; 2.撰写课程设计说明书一份,打印并装订成册。 指导教师(签字):教研室主任(签字): 批准日期:年月日

摘要 设计了一个简单的计算器程序,该计算器具有简单的四则混合运算以及复杂的数学表达式的功能。该计算器采用VC++作为软件开发环境,采用算数表达式处理算法来实现加、减。乘、除四则混合运算。操作简单,界面清晰,易于用户使用,容易被他们所接受的。 关键词:计算器;VC++;数学表达式

目录 1课题描述 (1) 2问题分析和任务制定 (2) 3详细设计 (3) 3.1头文件设计 (3) 3.2简单计算器的设计与实现函数设计 (3) 4 程序调试与测试 (8) 4.1主界面测试 (8) 4.2基本功能的测试 (8) 5结果分析 (12) 总结 (13) 参考文献 (14)

材料重量计算

材料重量计算 2011-09-08 15:50:44作者:来源:建设人材机网

圆钢重量(公斤)=0.00617 X直径X直径X长度 方钢重量(公斤)=0.00785 X边宽X边宽X长度 六角钢重量(公斤)=0.0068 X对边宽X对边宽X长度 八角钢重量(公斤)=0.0065 X对边宽X对边宽X长度 螺纹钢重量(公斤)=0.00617 X计算直径X计算直径X长度 角钢重量(公斤) =0.00785 X(■边边宽-边厚)X边厚X长度 扁钢重量(公斤)=0.00785 X厚度X边宽X长度 钢管重量(公斤)=0.02466 X壁厚X(-壁厚)X 长度 六方体体积的计算 公式①S20.866 x H/m/k即卩对边X对边x 0.866 X高或厚度 各种钢管(材)重量换算公式 钢管的重量=0.25 XnX (外径平方平方)X L X钢铁比重其中:n = 3.14 L= 钢管长度钢铁比重取7.8 所以,钢管的重量=0.25 x 3.14 x (外径-内平径方平方)X L X 7.8如果尺寸单位取米(M),则计算的重量结果为公斤(Kg) 钢的密度为:7.85g/cm3 (注意:单位换算) 钢材理论重量计算

钢材理论重量计算的计量单位为公斤(kg )。其基本公式为: W (重量,kg )=F(断面积mm2)x L(长度,m) Xp (密度,g/cm3)x 1/1000 各种钢材理论重量计算公式如下: 名称(单位) 计算公式 符号意义 计算举例 圆钢盘条(kg/m) W= 0.006165 X dX d d = 直径mm 直径100 mm 的圆钢,求每m 重量。每m 重量= 0.006165 X 1002=61.65kg 螺纹钢( kg/m ) W= 0.00617 X dX d d= 断面直径mm 断面直径为12 mm 的螺纹钢,求每m 重量。每m 重量=0.00617 X 12 2=0.89kg 方钢( kg/m ) W= 0.00785 X a X a a= 边宽mm 边宽20 mm的方钢,求每m重量。每m 重量=0.00785 x 202=3.14kg

STN32--定时器计数器(向上计数模式基本配置)

实验一:TIMER-1:定时器上溢,查询溢出后取反LED. 故频率计算:f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ; 定时器的基本设置: 1、设置预分频数,得到CK_CNT, TIM_TimeBaseStructure.TIM_Prescaler = 7199; CK_CNT 的计数频率=72M/(7199+1)=10K ; 2、设置自动重装载寄存器,当计数值达到这个寄存器锁存数值时,溢出产生事件 TIM_TimeBaseStructure.TIM_Period = 9999; 10K/(9999+1)=1HZ ,也就是1S 溢出一次; 3、设置计数模式 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 从0计数到ARR 产生溢出事件; 4、 设置时间分割值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; 5、 初始化定时器2 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 6、清楚标志 TIM_ClearFlag(TIM2, TIM_FLAG_Update); 7、打开定时器 TIM_Cmd(TIM2, ENABLE); 8、在主函数中查询TIM_FLAG_Update 标志置位了就清除标志: if(TIM_GetFlagStatus (TIM2,TIM_FLAG_Update )!=RESET) { TIM_ClearFlag (TIM2,TIM_FLAG_Update); if( GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8)==0) GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET); else GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET); } 时钟预分频 CK_PSC 加减计数器 CK_CNT 达到ARR 的值产生事件

51单片机的简单计算器设计和仿真

基于单片机的简易计算器设计与仿真

设计题目:基于单片机的简易计算器设计与仿真 一、设计实验条件: 地点:自动化系实验室 实验设备:PC机(装有Keil;Protues;Word ;Visio ) 二、设计任务: 本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示围时,计算器会在LCD上提示overflow;当除数为0时,计算器会在LCD上提示error。 设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 三、设计时间与设计时间安排:

1、设计时间:6月27日~7月8日 2、设计时间安排: 熟悉课题、收集资料:3天(6月27日~6月29日) 具体设计(含上机实验):6天(6月30日~7月5日) 编写课程设计说明书:2天(7月6日~7月7日) 答辩:1天(7月8日) 四、设计说明书的容: 1、前言:(自己写,组员之间不能相同,写完后将红字删除,排版时注意对齐) 本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。 2、设计题目与设计任务: 现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减、乘、除四则运算;(4)对错误的控制及提示。 针对上述功能,计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD显示模块;(3)算术运算模块;(4)错误处理及提示模块。 3、主体设计部分: (1)、系统模块图:

(工作分析)计数器工作原理的模式化分析

(工作分析)计数器工作原理的模式化分析

计数器工作原理的模式化分析 时序逻辑电路是《脉冲和数字电路》这门课程的重要组成部分,计数器是时序逻辑电路基础知识的实际应用,其应用领域非常广泛。计数器原理是技工学校电工电子专业学生必须重点掌握的内容,也是本课程的考核重点,更是设计计数器或其他电子器件的基础。 但近年来技校学生的文化理论基础和理解能力普遍较差,按照课件体系讲授计数器这个章节的知识,超过70%的学生听不懂。 我先后为四届学生讲授过这门课,于教学实践中摸索出壹套分析计数器的方法——模式化分析,即把分析步骤模式化,引导学生按部就班地分析计数器。用这种方法分析,我只要以其中壹种计数器(如异步二进制计数器)为例讲解,学生便能够自行分析其他计数器。 教学实践证明,用这种方法讲授计数器知识,学生比较感兴趣,觉得条理清晰,易于理解,掌握起来比较轻松。这种方法仍有壹个好处,不管是同步计数器仍是异步计数器,不管是二进制计数器仍是十进制计数器,不管是简单的计数器仍是复杂的计数器,只要套用这种方法,计数器工作原理迎刃而解。即使是平时基础很差的学生,只要记住几个步骤,依葫芦画瓢,也能把计数器原理分析出个大概来。 一、明确计数器概念 分析计数器当然要先清楚什么是计数器啦。书上的概念是:

计数器是数字系统中能累计输入脉冲个数的数字电路。我告诉学生,计数器就是这样壹种电子设备:把它放于教室门口,每个进入教室的同学均于壹个按钮上按壹下,它就能告诉你壹共有多少位同学进入教室。其中,每个同学按壹下按钮就是给这个设备壹个输入信号,N个同学就给了N个信号,这N个信号就构成计数器的输入CP脉冲,计数器要统计的就是这个CP脉冲系列的个数。当然,如果没有接译码器,计数器的输出端显示的是二进制数而非十进制数,比如有9位同学进入教室,它不显示“9”,而是显示“1001”。 随后,我简要介绍了计数器的构成和分类,且强调,计数器工作前必须先复位,即每个触发器的输出端均置零。 二、回顾基础知识 分析计数器要用到触发器的关联知识,其中JK触发器最常用,偶尔用到T触发器和D触发器。因此,介绍完计数器概念后,我不急于教学生分析其原理,而是先提问JK、T、D触发器的关联知识,包括触发器的逻辑符号、特性方程、特性表等。 由于计数器的控制单元由逻辑门电路构成,分析前仍要简要回顾壹下和、或、非等常用逻辑门电路的关联知识。另外,用模式化方法分析计数器仍要用到逻辑代数的运算方法、逻辑函数的化简方法等关联知识。 三、画出解题模板 准备工作做完了,下面进入核心部分——列出分析计数器的

简单计算器设计

计算机程序训练任务书简单计算器设计 学院:材料科学与工程学院 专业:材料成型及控制工程 班级:07050103 学号:0705010318 姓名:郭炯

目录 一.训练目的 二.设计内容和要求 三.设计思路 四.该程序功能分析 五.系统用到的数据类型及函数六.基本算法 七.程序流程图及屏幕运行截图八.参考文献 九.设计心得 十.源程序代码

计算机程序训练设计报告 一.训练目的: 计算机程序设计训练是学习完《计算机程序设计》课程后进行的一次全面的综合性上机实验。其目的在于为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。 二.设计内容和要求: 用C语言作为工具制作一个简单的windows计算器,根据课程设计1周时间的安排选择适当大小的设计课题,根据题目的基本需求,画出流程图,编写程序,并写出详细的设计说明书。最后上机调试通过,并进行验收,交上机报告和程序的原代码。 设计题目设计一个简单计算器 具体内容在功能上功能尽量模拟windows操作系统中的计算器,系统界面 不做强制要求。 三.设计思路 大体框架是用两个while语句来实现相应的计算,用goto 语句来实现多次进入while语句进行相应的计算,第一个while语句用于新的两个数来进行计算,第二个while语句是用上一次储存的计算结果来与另外的数进行相应的运算。 每个while语句嵌套switch语句来实现加减乘除以及三角函数等运算。 每种运算都是调用自定义的函数来实现相应运算的。 四.该程序功能分析: 该程序主要功能是计算简单运算,以及简单的三角函数的计算,优点是一次运算结束后会提醒是否将运算的结果储存下来,如果储存则与另外的数继续进行下一次运算,如果不储存,则会执行新的运算,如果不计算了即可跳出界面。同时计算开方。 五.系统用到的数据类型及其函数: 1.整型变量num 用于判断需要进行什么运算。 整型变量l 用于决定进入哪个while循环语句。 实型变量a,b,x,t a,b,x用于放置需要计算的数,t用于放置每次运算的结果。

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

计数器工作原理的模式化分析

计数器工作原理的模式化分析 时序逻辑电路是《脉冲与数字电路》这门课程的重要组成部分,计数器是时序逻辑电路基础知识的实际应用,其应用领域非常广泛。计数器原理是技工学校电工电子专业学生必须重点掌握的内容,也是本课程的考核重点,更是设计计数器或其他电子器件的基础。 但近年来技校学生的文化理论基础和理解能力普遍较差,按照教材体系讲授计数器这个章节的知识,超过70%的学生听不懂。 我先后为四届学生讲授过这门课,在教学实践中摸索出一套分析计数器的方法——模式化分析,即把分析步骤模式化,引导学生按部就班地分析计数器。用这种方法分析,我只要以其中一种计数器(如异步二进制计数器)为例讲解,学生便可以自行分析其他计数器。 教学实践证明,用这种方法讲授计数器知识,学生比较感兴趣,觉得条理清晰,易于理解,掌握起来比较轻松。这种方法还有一个好处,不管是同步计数器还是异步计数器,不管是二进制计数器还是十进制计数器,不管是简单的计数器还是复杂的计数器,只要套用这种方法,计数器工作原理迎刃而解。即使是平时基础很差的学生,只要记住几个步骤,依葫芦画瓢,也能把计数器原理分析出个大概来。 一、明确计数器概念 分析计数器当然要先清楚什么是计数器啦。书上的概念是:计数器是数字系统中能累计输入脉冲个数的数字电路。我告诉学生,计数器就是这

样一种电子设备:把它放在教室门口,每个进入教室的同学都在一个按钮上按一下,它就能告诉你一共有多少位同学进入教室。其中,每个同学按一下按钮就是给这个设备一个输入信号,N个同学就给了N个信号,这N 个信号就构成计数器的输入CP脉冲,计数器要统计的就是这个CP脉冲系列的个数。当然,如果没有接译码器,计数器的输出端显示的是二进制数而非十进制数,比如有9位同学进入教室,它不显示“9”,而是显示“1001”。 随后,我简要介绍了计数器的构成和分类,并强调,计数器工作前必须先复位,即每个触发器的输出端均置零。 二、回顾基础知识 分析计数器要用到触发器的相关知识,其中JK触发器最常用,偶尔用到T触发器和D触发器。因此,介绍完计数器概念后,我不急于教学生分析其原理,而是先提问JK、T、D触发器的相关知识,包括触发器的逻辑符号、特性方程、特性表等。 由于计数器的控制单元由逻辑门电路构成,分析前还要简要回顾一下与、或、非等常用逻辑门电路的相关知识。另外,用模式化方法分析计数器还要用到逻辑代数的运算方法、逻辑函数的化简方法等相关知识。 三、画出解题模板 准备工作做完了,下面进入核心部分——列出分析计数器的9个步骤: 1.驱动方程(即触发器输入端的表达式,注意要化成最简式) 2.特性方程(即触发器的特性方程,计数器有几个触发器就写出几个 特性方程) 3.状态方程(把1代入2后得到的方程,注意要化成最简式)

基于AT89C51的简单计算器设计

设计题目:基于单片机的简易计算器设计与仿真 一、设计实验条件: 地点: 实验设备:PC机(装有Keil;Protues;Word ;Visio ) 二、设计任务: 本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示overflow;当除数为0时,计算器会在LCD上提示error。 设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 三、设计时间与设计时间安排: 1、设计时间:6月27日~7月8日 2、设计时间安排: 熟悉课题、收集资料:3天(6月27日~6月29日)

具体设计(含上机实验):6天(6月30日~7月5日) 编写课程设计说明书:2天(7月6日~7月7日) 答辩:1天(7月8日) 四、设计说明书的内容: 1、前言:(自己写,组员之间不能相同,写完后将红字删除,排版时注意对齐) 本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。 2、设计题目与设计任务: 现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减、乘、除四则运算;(4)对错误的控制及提示。 针对上述功能,计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD显示模块;(3)算术运算模块;(4)错误处理及提示模块。3、主体设计部分: (1)、系统模块图:

单片机课程设计报告(简易计算器)

单片机实训报告 ———简易计算器 姓名*** 学号*** 专业*** 学校*** 指导教师 *** 实训时间2014.06.23-2014.06.29

目录 中文摘要............................................................1 关键词.............................................................1 1 实训任务.........................................................1 1.1 主要功能设计................................................1 1.2 任务目的....................................................1 2 整体设计方案.....................................................1 2.1 方案论证....................................................1 2.2 系统框图....................................................2 3 控制软件设计....................................................2 3.1 程序时序总图...............................................2 3.2 液晶显示软件设计............................................3 3.3 键盘输入软件设计...........................................5 3.4 计算函数设置...............................................7 4 软件调试........................................................8 个人小结...........................................................8参考文献...........................................................9附录...............................................................9

高速计数器详细解说

s7-200高速计数器详细解说 1.高速计数器指令 普通计数器受CPU扫描速度的影响,是按照顺序扫描的方式进行工作。在没个扫描周期中,对计数脉冲只能进行一次累加;对于脉冲信号的频率比PLC的扫描频率高时,如果仍采用普通计数器进行累加,必然会丢失很对输入脉冲信号。在PLC中,对比扫描频率高的输入信号的计数可也使用高速计数器指令来实现。 在S7-200的CPU22X中,高速计数器数量及其地址编号表如下 CPU类型CPU221 CPU222 CPU224 CPU226 高速计数器数量 4 6 高速计数器编号HC0,HC3~HC5 HC0~HC5 1.高速计数器指令 高速计数器的指令包括:定义高速计数器指令HDEF 和执行高速计数指令HSC,如表HDEF HSC (1)定义高速计数器指令HDEF HDE指令功能是为某个要使用的高速计数器选定一种工作模式。每个高速计数器在使用前,都要用HDEF指令来定义工作模式,并且只能用一次。它有两个输入端:HSC为要使用的高速计数器编号,数据类型为字节型,数据范围为0~5的常数,分别对应HC0~ HC5;MOCE为高速计数的工作模式,数据类型为字节型,数据范围为0~11的常数,分别对应12种工作模式。当准许输入使能EN有效时,为指定的高速计数器HSC定义工作模式MODE。 (2)执行高速计数指令HSC HSC指令功能功能是根据与高速计数器相关的特殊继电器确定在控制方式和工作状态,使高速计数器的设置生效,按照指令的工作模式的工作模式执行计数操作。它有一个数据输入端N:N为高速计数器的编号,数据类型的字型,数据范围为0~5的常数,分别对应高速计数器HC0~HC5.当准许输入EN使能有效时,启动N号高速计数器工作。 2.高速计数器的输入端 高速计数器的输入端不像普通输入端那样有用户定义,而是由系统指定的输入点输入信号,每个高速计数器对它所支持的脉冲输入端,方向控制,复位和启动都有专用的输入点,通过比较或中断完成预定的操作。每个高速计数器专用的输入点如表 高速计数器的输入点

各计算材料软件的优势.

不同计算材料软件的模块与优势 理工院13级物理学徐飞鸿学号13345028 日期:2015年10月29日 Materials Studio: Materials Studio是ACCELRYS公司专门为材料科学领域研究者所涉及的一款可运行在PC上的模拟软件。它可以帮助你解决当今化学、材料工业中的一系列重要问题。支持Windows98、NT、Unix以及Linux等多种操作平台的Materia ls Studio使化学及材料科学的研究者们能更方便的建立三维分子模型,深入的分析有机、无机晶体、无定形材料以及聚合物。 多种先进算法的综合运用使Material Studio成为一个强有力的模拟工具。它可以进行性质预测、聚合物建模还是X射线衍射模拟,操作简单,并且得到的数据切实可靠。灵活方便的Client-Server结构还是的计算机可以在网络中任何一台装有NT、Linux或Unix操作系统的计算机上进行,从而最大限度的运用了网络资源。 ACCELRYS的软件使任何的研究者都能达到和世界一流工业研究部门相一致的材料模拟的能力。模拟的内容囊括了催化剂、聚合物、固体化学、结晶学、晶粉衍射以及材料特性等材料科学研究领域的主要课题。 模块简介: Materials Studio采用了大家非常熟悉的Microsoft标准用户界面,允许用户通过各种控制面板直接对计算参数和计算结果进行设置和分析。目前,Mat erials Studio软件包括如下功能模块: Materials Visualizer: 提供了搭建分子、晶体及高分子材料结构模型所需要的所有工具,可以操作、观察及分析结构模型,处理图表、表格或文本等形式的数据,并提供软件的基本环境和分析工具以及支持Materials Studio的其他产品。是Materials Studio 产品系列的核心模块。 Discover:

MFC简单计算器设计正文

实用计算器程序1.基本功能描述 计算器是人们日常生活中非常实用的计算工具。预期设计目标与实际计算器为标准,Windows10系统提供的计算器为范例进行设计。 实用计算器要实现单目运算和双目运算。单目运算主要包括阶乘、正弦、余弦; 双目运算主要包括加、减、乘、除、乘幂等。计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。实际过程中要能够对不同的数据灵活判 断执行。同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。 用户的修改包括清屏和退格。程序设计的重点和难点在于:第一,能够对于不同的操 作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的 运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。 编程环境采用VisualStudio2017提供的MFC建立对话框应用程序,设计界面要简 单大方,并提供程序所有功能的接口。 2.设计思路 表1操作符优先级设计 优先级操作符 1 阶乘、正弦、余弦 2 乘幂 3 乘、除 4 加、减 对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。由于算法设计为四层优先级, 且单目运算的优先级最高。当按下相应单目运算符,首先将当前数据数组的最后一个 存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。如果没有按 下等号键,则继续执行循环。在按下等号按钮之后,按照先乘幂、再乘除、后加减的 运算顺序执行运算,将最后结果保存并显示。(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。 图1程序流程图 3.软件设计 设计步骤 1)创建基于对话框的程序 利用AppWizard建立应用程序框架,创建一个基于对话框的MFC工程,命名为“fengwanjincalculator”,如图2所示。在图3显示的应用程序类型中选择基于对话框。创建成功后,系统自动生成相应程序文件。 图2创建MFC工程图 图3应用程序类型选择图

微机原理课程设计简易计算器

二○一一~二○一二学年第一学期 信息科学与工程学院 自动化系 课程设计计划书 课程名称:微机原理及应用课程设计班级:自动化0901 姓名:王立 学号:200904134032 指导教师:孟志华 二○一一年十二月六日

一、课题名称 简易计算器设计 二、课题目的 利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。 三、需求分析 (1)能够实现99以内的加减乘法运算,并显示在2位LED上。 (2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。 四、方案选择 方案一: 该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。

方案二: 该方案则是将LED 显示电路和键盘扫描电路分别接在两 个不同的8255上,扫描和显示时,选中不同的8255 。 方案三: 该方案则只用一片8255驱动LED 显示和键盘扫描电路。 方案评估: 方案一:LED 显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃! 方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃! 方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!) 综上所述:采用方案三!

钢结构材料重量计算

材料重量计算

圆钢重量(公斤)=0.00617×直径×直径×长度 方钢重量(公斤)=0.00785×边宽×边宽×长度 六角钢重量(公斤)=0.0068×对边宽×对边宽×长度 八角钢重量(公斤)=0.0065×对边宽×对边宽×长度 螺纹钢重量(公斤)=0.00617×计算直径×计算直径×长度 角钢重量(公斤)=0.00785×(边宽+边宽-边厚)×边厚×长度 扁钢重量(公斤)=0.00785×厚度×边宽×长度 钢管重量(公斤)=0.02466×壁厚×(外径-壁厚)×长度 六方体体积的计算 公式①s20.866×H/m/k 即对边×对边×0.866×高或厚度 各种钢管(材)重量换算公式 钢管的重量=0.25×π×(外径平方-内径平方)×L×钢铁比重其中:π = 3.14 L=钢管长度钢铁比重取7.8 所以,钢管的重量=0.25×3.14×(外径平方-内径平方)×L×7.8 * 如果尺寸单位取米(M),则计算的重量结果为公斤(Kg) 钢的密度为: 7.85g/cm3 (注意:单位换算) 钢材理论重量计算 钢材理论重量计算的计量单位为公斤( kg )。其基本公式为: W(重量,kg )=F(断面积mm2)×L(长度,m)×ρ(密度,g/cm3)×1/1000 各种钢材理论重量计算公式如下: 名称(单位) 计算公式 符号意义 计算举例 圆钢盘条(kg/m) W= 0.006165 ×d×d d = 直径mm 直径100 mm 的圆钢,求每m 重量。每m 重量= 0.006165 ×1002=61.65kg 螺纹钢(kg/m) W= 0.00617 ×d×d

d= 断面直径mm 断面直径为12 mm 的螺纹钢,求每m 重量。每m 重量=0.00617 ×12 2=0.89kg 方钢(kg/m) W= 0.00785 ×a ×a a= 边宽mm 边宽20 mm 的方钢,求每m 重量。每m 重量= 0.00785 ×202=3.14kg 扁钢 (kg/m) W= 0.00785 ×b ×d b= 边宽mm d= 厚mm 边宽40 mm ,厚5mm 的扁钢,求每m 重量。每m 重量= 0.00785 ×40 ×5= 1.57kg 六角钢 (kg/m) W= 0.006798 ×s×s s= 对边距离mm 对边距离50 mm 的六角钢,求每m 重量。每m 重量= 0.006798 ×502=17kg 八角钢 (kg/m) W= 0.0065 ×s ×s s= 对边距离mm 对边距离80 mm 的八角钢,求每m 重量。每m 重量= 0.0065 ×802=41.62kg 等边角钢 (kg/m) = 0.00785 ×[d (2b – d )+0.215 (R2 – 2r 2 )] b= 边宽 d= 边厚 R= 内弧半径 r= 端弧半径 求20 mm ×4mm 等边角钢的每m 重量。从冶金产品目录中查出4mm ×20 mm 等边角钢的R 为3.5 ,r 为1.2 ,则每m 重量= 0.00785 ×[4 ×(2 ×20 –4 )+0.215 ×(3.52 – 2 ×1.2 2 )]=1.15kg

简易计算器课程设计

科研训练论文 题目:基于单片机的计算器的设计 目录 一、概述 (3) 1.1设计要求及任务: (3) 1.2设计原理: (3) 二、系统总体方案及硬件设计 (3) 2.1计算器总体思想 (3) 2.2硬件的选择与连接 (4) 2.2.1硬件选择 (4) 2.2.2接口设计 (5) 三、软件设计 (7)

3.2系统流程总图 (8) 3.3显示程序设计 (8) 3.4键盘识别程序设计 (9) 3.4.1原理与分析 (9) 3.4.2流程图 (10) 四、设计体会与总结 (11) 五、参考文献 (11) 附录 基于单片机的计算器的设计 摘要:本设计是一个实现加减乘除的计算器,它的硬件主要由四部分构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4键盘,它可以实现一位数的加减乘除运算。 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 关键词:LED接口;键盘接口;8255A;汇编语言

一、概述 1.1设计要求及任务: (1)设计4*4的键盘,其中10个数字键0~9,其余六个键“+”、“—”、“*”、“/”、“=”、和“C”键; (2)设计两位LED接口电路; (3)实现1位数的简单运算 1.2设计原理: (1)LED显示器接口技术 LED动态显示接口技术 (2)键盘显示技术 逐行(逐列扫描法) 二、系统总体方案及硬件设计 2.1计算器总体思想 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 执行过程:开机显示零,等待键入数值,当键入数字,经通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

相关文档
最新文档