后缀表达式及计算器

栈实现简单计算器(后缀表达式) 目录 一、后缀表达式举例 二、需求 三、字符串扫描法 思路分析 代码实现 四、遍历ArrayList法 思路分析 代码实现 一、后缀表达式举例 A:a+b的后缀表达式为ab+; B:(a+b)*c-(a+b)/e的后缀表达式为ab+c*ab+e/-; 二、需求 A:输入一个后缀表达式,并用栈计算结果; B:支持小括号和... 阅读详情
#include<stdio.h>
#include<stdlib.h>

#define MAX 100
typedef char datatype ;
//栈结构体
typedef struct 
{
	datatype a[MAX] ;
	int size ;

}sequence_stack ;

void init(sequence_stack *) ;
int empty(sequence_stack *) ;
datatype read(sequence_stack *) ;
void pop(sequence_stack *) ;
void push(sequence_stack *,datatype) ;
int is_operation(char ch) ;
int priority(char ch) ;
//中缀表达式转后缀表达式的函数
void postfix(char* ,char*) ;
double read_number(char *dest ,int *i) ;
double answer(char *dest) ;
void match(char *src) ;

/*
------------------------------
初始化函数
------------------------------
*/
void init(sequence_stack *s)
{
	if (!s){return;}
	s->size = 0 ;
}


/*
------------------------------
判断是否为空栈
------------------------------
*/
int empty(sequence_stack *s)
{
	if (!s){return 0;}
	return s->size ? 0:1 ;
}
/*
------------------------------
读取栈顶元素
------------------------------
*/
datatype read(sequence_stack *s)
{
	if(empty(s))
	{
		printf("read函数错误, 为空栈!!") ;
		exit(1) ;
	}
	return s->a[s->size-1] ;
}

void pop(sequence_stack *s)
{
	if(empty(s))
	{
		printf("pop函数错误, 为空栈!!") ;
		exit(1) ;
	}
	s->size-- ;
}

void push(sequence_stack *s ,datatype d)
{
	if(s->size==MAX)
	{
		printf("push函数错误, 栈已满!!") ;
		exit(1) ;
	}
	s->a[s->size++] = d  ;
}
/*
------------------------------
判断字符是否是操作符
------------------------------
*/
int is_operation(char ch)
{
	int f = 0 ;
	switch(ch)
	{
	case '+':
	case '-':
	case '*':
	case '/':
		f =1 ;
		break ;
	default:
		f =0 ;
		break ;
	}
	return f ;
}


/*
------------------------------
获得优先级
------------------------------
*/
int priority(char ch)
{
	int f =-1 ;
	switch(ch)
	{

	case '#':
		f = -1 ;
		break ;
	case '(':
	case ')':
		f = 0 ;
		break ;
	case '+':
	case '-':
		f = 1;
		break ;
	case '*':
	case '/':
		f =2 ;
		break ;
	default:
		break;
	}
	return f ;

}
/*
-----------------------------
中缀表达式转后缀表达式
src存储的是中缀表达式
dest存储的是后缀表达式
分为4个部分:
1.遇到数字字符怎么处理
	将数字读出
2.遇到运算字符的处理
	用while读取栈顶,栈顶元素>=运算符 ,就出栈,直到退出循环,最后将运算符压入栈中
3.遇到(的处理
	将(压入栈中即
4.遇到)的处理
	运算字符不用判断优先级全部出栈,直到遇到(与它配对
-----------------------------
*/
void postfix(char *src,char *dest)
{
	//创建栈结构体
	sequence_stack opt ;
	sequence_stack *p = &opt ;
	int i =0 ;
	int j =0 ;
	//一定要初始化栈
	init(p) ;
	push(p,'#') ;
	while(src[i]!='#')
	{
		
		if(src[i]>='0'&&src[i]<='9')
		{
			while( (src[i]>='0'&&src[i]<='9')||src[i]=='.' )
				dest[j++] = src[i++] ;
		}
		else if(is_operation(src[i]))
		{
			dest[j++] = ' ' ;
			while(priority(src[i]) <= priority( read(p) ))
			{
				dest[j++] = read(p) ;
				pop(p) ;
			}
			push(p,src[i]) ;
			i++ ;		
		}
		else if(src[i]=='(')
			push(p,src[i++]) ;
		else if(src[i]==')')
		{
			while(read(p)!='(')
			{
				dest[j++] = read(p) ;
				pop(p) ;
			}
			if(read(p)=='(')
				pop(p) ;
			i++ ;
		}
	
	}
	while(empty(p)!=1)
	{
		dest[j++] = read(p) ;
		pop(p) ;
	}
	dest[j] ='\0' ;

}
/*
-------------------------------
从后缀表达式中读取数据
-------------------------------
*/
double read_number(char *dest ,int *i)
{
	double x = 0 ;
	int num =0  ;
	int j ;
	while(dest[*i]<'0'||dest[*i]>'9') (*i)++;
	while(dest[*i]>='0'&&dest[*i]<='9')
	{
		x = x*10+(dest[*i]-'0') ;
		(*i)++ ;
	}
	
	if(dest[*i]=='.')
	{
		(*i)++ ;
		while(dest[*i]>='0'&&dest[*i]<='9')
		{
			num++ ;
			x = x*10+(dest[*i]-'0') ;
			(*i)++ ;
		}
	}
	for(j=0 ;j<num ;j++)
		x=x/10 ;

	return x ;
}


/*
---------------------------
根据后缀表达式计算结果
---------------------------
*/
double answer(char *dest)
{
	double xs[50] ;
	int len = 0 ;
	int i = 0 ;
	while(dest[i]!='#')
	{
		if(dest[i]>='0'&&dest[i]<='9')
			xs[len++] = read_number(dest,&i) ;
		else if(is_operation(dest[i]))
		{
			switch(dest[i])
			{

			case '+':
				xs[len-2] = xs[len-2]+xs[len-1] ;
				len-- ;
				i++ ;
				break ;
			case '-':
				xs[len-2] = xs[len-2]-xs[len-1] ;
				len-- ;
				i++ ;
				break ;
			case '*':
				xs[len-2] = xs[len-2]*xs[len-1] ;
				len-- ;
				i++ ;
				break ;
			case '/':
				xs[len-2] = xs[len-2]/xs[len-1] ;
				len-- ;
				i++ ;
				break ;

			}
		
		}
		else i++ ;
					
	}
	return xs[len-1] ;
	
}

/*
----------------------------
匹配表达式是否正确
----------------------------
*/
void match(char *src)
{
	int i =0 ;
	sequence_stack stack ;
	sequence_stack *p = &stack ;
	init(p) ;

	while(src[i]!='#')
	{
		//如果表达式中的不是下列字符
		if( (is_operation(src[i])!=1&&src[i]!='('&&src[i]!=')' &&src[i]!='.') && ( src[i]<'0'||src[i]>'9') )
		{
			printf("输入错误!!") ;
				exit(1) ;
		}
		switch(src[i])
		{
		case '(':
			push(p,src[i]) ;
			break ;
		case ')':
			if(is_operation(src[i-1])||src[i-1]=='(')
			{
				printf("括号输入有误!") ;
				exit(1) ;
			}
			if(read(p)=='(')
				pop(p) ;
			else
			{
				printf("括号输入有误!") ;
				exit(1) ;
			}
			
			break ;
		case '+':
		case '-':
		case '*':
		case '/':
			if(src[i-1]=='('||is_operation(src[i-1]))
			{
				printf("运算符输入问题!");
				exit(1) ;
			}
			break ;
		default:break ;
		}//switch

		i++ ;
	}
	

}

int main()
{
	char src[MAX] ;//中缀表达式
	char dest[MAX] ;//后缀表达式
	char ch ;
	int i =0 ;
	double n =0 ;
	while((ch=getchar())!='\n')
	{
		src[i++] = ch ;
	}
	src[i++] = '#' ;
	src[i] ='\0' ;
	printf("中缀表达式: %s\n",src) ;

	match(src) ;

	postfix(src,dest) ;
	printf("后缀表达式: %s\n",dest) ;

	n = answer(dest) ;
	printf("answer = %.2f\n",n) ;
	
	getchar() ;
	return 0 ;
}

掌握后缀表达式:打造栈基础的高效计算器 后缀表达式是编程中一种常见的表达式形式,它与我们日常生活中使用的数学表达式——中缀表达式——有所不同。在中缀表达式中,运算符位于其操作数的中间,例如3 + 4;而在后缀表达式中,运算符则位于操作数之后,如3 4 +。后缀表达式的这种写法有时也被称为逆波兰表示法(Reverse Polish Notation, RPN)。后缀表达式的优点在于,它不需要使用括号来标识操作的优先级,运算符的执行顺序完全由它们在表达式中的顺序来决定。 阅读详情

相关推荐

后缀表达式实现的计算器

源代码 博文链接:https://sylinx.iteye.com/blog/215322

中缀转后缀计算

中缀表达式(10+20/2*3)/2+8,其转换成后缀表达式则为10 20 2 / 3 * + 2 / 8 + 转换过程需要用到栈,具体过程如下: 1)当遇到操作数,我们就直接将其输出。 2)当遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。 3)当遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。 注意,左括号只弹出并不输出。 package Stack; import ListInterfcae_list.ArrayList; /* 中缀转后缀 */ public

zbx479的博客 459

后缀表达式计算器

课程设计题目实现一个简单的后缀表达式计算器。假定表达式里的基本数值为实数,可用的运算符包括+,-,*,/,^,其中的 ^ 表示求幂运算。

专题——前、中、后缀表达式的计算

前言 不同表达式的计算 正文 首先还是需要知道一下关于中缀转前后缀的方法 具体参考转换方法 以 (5+2+1✖3)/5 为例 后缀:52+13*+5/ 前缀:/++52*135 其中,中缀和后缀表达式的计算是重点,前缀和后缀计算类似,具体参见代码 代码 #include <stdio.h> #include <string.h> double cal_suffix(char *str); double cal_preffix(char *str); double Cal_fix( c

无由页的博客 568

SpringBoot整合海康SDK实战:从设备初始化到PS流录像转MP4全流程(附避坑指南)

本文详细介绍了SpringBoot整合海康SDK的完整实战流程,涵盖设备初始化、通道管理、录像检索与下载。针对海康设备生成的PS流录像文件无法直接播放的痛点,重点解析了如何利用FFmpeg高效、无损地将其转换为通用的MP4格式,并提供了关键的避坑指南和性能优化建议。

chair的专栏 764

数据标注的下一代SOP,可能不是Word,而是一段Prompt

再给几个反例:“这个只是正常纹理,不算。真正用于数据生产的Prompt,可能至少包含:任务定义、正例、反例、边界案例、优先级、输出格式、验收逻辑。一个项目100个人,如果100个人对这句话有100种理解,最后返工的就不是一个框,而可能是几十万帧数据。一个项目启动以后,项目经理先研究SOP,培训组长,组长再培训标注员,最后几百个人按照同一套规则干活。实际上一个成熟的项目经理,最重要的能力之一,就是:把客户的业务语言翻译成生产规则。真正让项目难交付的,从来不是80%的普通数据,而是那20%的长尾数据。

AI数据标注猿 296

计算器(表达式计算-后缀表达式实现)

计算器(表达式计算-后缀表达式实现) 【问题描述】 从标准输入中读入一个整数算术运算表达式,如24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 )= ,计算表达式结果,并输出。 要求: 1、表达式运算符只有+、-、*、/,表达式末尾的=字符表示表达式输入结束,表达式中可能会出现空格; 2、表达式中会出现圆括号,括号可能嵌套,不会出现错误的表达式; 3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。 4、要求采用逆波兰表达式来实现表达式计算。

谛凌的博客 2万+

RDMA学习笔记-IB五层网络协议和报文结构

Reference InfiniBand Architecture Specification Volume 1, Release 1.3 文章目录IBA 网络协议分层1.链路层1.1 LRH1.2 ICRC1.3 VCRC2.网络层(GRH)3.传输层3.1 BTH3.2 extended transport header4. 报文结构4.1 send request4.2 RDMA Write request4.3 RDMA Read request4.4 ACK4.5 Atomic operatio

u014114310的博客 9468

基于中缀表达式和后缀表达式的计算器

栈与计算器

qq_48743973的博客 370

【一】PCIe基础知识

Linux PCIe基础知识

他山之石 可以攻玉 4万+

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2039

写一个计算器【后缀表达式】(C++)

闲来无事,用后缀表达式写了个计算器。。。支持加(+)、减(-)、乘(*)、除(/)、乘方(^)

ytk888的博客 1715

bash: huggingface-cli: command not found... 解决方案

本文主要介绍了bash: huggingface-cli: command not found… 解决方案,希望能对使用大模型的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

C++后缀表达式计算器

C++后缀表达式计算器

coolsunxu的博客 3049

【11】科曼医疗——科曼医疗 嵌入式--面试,校招,面试问答记录

科曼医疗嵌入式校招面试记录:3位面试官分别考察应用层技术、底层技术和HR面。技术问题涵盖C++特性(多态、虚函数、指针与引用区别)、内存管理(malloc与new对比)、嵌入式基础(51最小系统、IIC/SPI协议)及项目经验(智能黑板擦专利项目)。同时考察了Linux使用经验、STM32开发及嵌入式操作系统认知。最后环节应聘者询问了开发环境及面试流程。面试内容全面覆盖嵌入式开发核心知识点。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1251

SPI协议详解(图文并茂+超详细)

先说串口 因为之前写过一篇UART,通用串行异步通讯协议,UART的相关资料 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。 如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步; 双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。 传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。相应的协议如下图所示; 如果您注意到

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 33万+

顺序栈计算器 中缀转后缀表达式

《数据结构(用面向对象方法与c++语言描述)第2版》书中虽有介绍计算后缀表达式的方法和中缀转后缀的方法,但这两个函数却是分离的,并未介绍输入一个中缀表达式,由类内部自动转化为后缀表达式并运算的方法。本篇简略介绍后缀表达式运算及实现上述流程。

weixin_60344133的博客 1957

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

前缀、中缀、后缀表达式及逆波兰计算器实现

文章目录1.前缀表达式(波兰表达式)1.1 介绍1.2 前缀表达式的计算机求值2.中缀表达式3.后缀表达式(逆波兰表达式)3.1 介绍3.2 后缀表达式的计算机求值4.逆波兰计算器5.中缀表达式转换为后缀表达式5.1 思路分析5.2 代码实现6.完整版逆波兰计算器 1.前缀表达式(波兰表达式) 1.1 介绍 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。 举例说明:(3+4)*5-6 对应的前缀表达式就是 - * + 3 4 5 6 1.2 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字

张大安的博客 1391

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

3.2 使用栈结构实现后缀表达式计算器

3.2 使用栈结构实现后缀表达式计算器后缀表达式后缀表达式求值思路后缀表达式计算器实现 后缀表达式 定义:后缀表达式中,运算符位于操作数(前一个和后一个)之后。 示例:算术表达式(3+4)x5-6对应的后缀表达式为3 4 + 5 x 6 -。 后缀表达式求值思路 思路 从左到右扫描后缀表达式,遇到数字时,将数字压入栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,然后将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。 解释 当一个算术表达式由中缀表达式形式(1+

dxt_snow的博客 1119

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

栈--简单计算器(后缀表达式)

JAVA实现后缀表达式–>简单计算器(栈) 预备知识: 前缀表达式 中缀表达式 后缀表达式 比如 5 * 2 + 3 前缀表达式 : + * 5 2 3 中缀表达式:5 * 2 + 3 后缀表达式:5 2 * 3 + 计算机中,使用后缀表达式更容易进行计算: 思想:遇到数字就入栈,遇到运算符就pop出两个数进行运算然后将结果入栈。最后留下一个栈顶元素即为结果。 可见,实现后缀表达式计算出并不困难。 这里的难点是怎么把我们常用的中缀表达式转换成后缀表达式: 这里先说中缀表达式的思想: 初始化两

CONSOLE___的博客 592

前缀、中缀、后缀表达式以及逆波兰计算器

前缀、中缀、后缀表达式 前缀表达式 波兰表达式 前缀表达式的运算符位于操作数之前 就比如(3+4)x5-6对应的前缀表达式就是 - X + 3 4 5 6 前缀表达式在计算机中的计算机求值 从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈项元素和次项元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果 例如: (3+4)X5-6对应的前缀表达式就是 一 X +3456针对前缀表达式求值步骤如下: 1)从右

萌新Java工程师 2425

C语言使用栈结构实现后缀表达式计算器

使用栈结构实现后缀表达式计算器 头文件 stack.h #ifndef STACK_H #define STACK_H #include <stdio.h> #include <stdlib.h> #define SUCCESS 1000 #define FAILURE 1001 typedef struct { int data; struct Node *next; }Node; typedef struct { Node *top; i

weixin_51649465的博客 960

c++使用栈完成计算器加减乘除,基于后缀表达式,括号匹配等

自己写的模板栈//定义链表节点//栈模板//带头结点链表实现栈操作//pop get_top empty返回值均为bool类型// push无类型限制//动态分配内存记得释放public:stack();~stack();private://默认构造函数//判空操作//出栈操作if (!delete p;else//查询栈顶元素操作if (!else//入栈操作//析构函数释放内存while ( p!= NULL)

s103424的博客 1233

栈和栈的应用(后缀表达式的转化和简单计算器)

文章目录栈的特点栈的常用方法 栈的特点 栈(Stack)是一种线性存储结构,栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。限定只能在栈顶进行插入和删除操作。 栈的常用方法 ...

weixin_45756488的博客 683
上一篇: 字符串倒序
下一篇: 函数指针
elimuzi
博客等级 码龄10年 56粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值