第一次个人编程作业-汉字编程

这个作业属于哪个课程 软件工程(福州大学至诚学院-计算机工程系)
这个作业要求在哪里 第一次个人编程作业
这个作业的目标 记录自己的代码行数,需求分析时间,编码时间;分解需求的思路,分解成多个模块,并阐述为什么这么分,优势在哪,可以附上代码片段;记录不会的知识的学习过程以及修改优化的过程;可以附上资料网站。
作业正文 第一次个人编程作业
其他参考文献

写在前面的话

说实话,我属实有些不太理解这次作业的要求,如果是字面意思来看,就是写一个汉字表达的小算法,根本不需要老师说的花上五天时间来琢磨,甚至几分钟就可以完成。一向追求完美的我,想着不仅仅如此,以下是我用我所会的一点知识写的代码的总结

对不起,我确实理解错题目的意思了,想的太简单,还那么早提交。大错特错了!
今天(20/02/06)我又花了大半天时间,妄图用我所会的那点点C语言知识去完成这道题,我又大错特错了,C语言没有string! C语言没有string! C语言没有string!下午我又花了两个小时尝试把原有的string改成正常的C语言知识输入字符串。我又失败了。
不能怪别的,是我自己水平太低,没有掌握好知识,现在到用的时候才会现在这样子。加上这几天的准备考研的计划全给打乱了,整天脑子里面都是这么去完成这个作业,精神恍惚,有点神经衰竭。想放松,却也玩不安心,心里头总有这件事放不下。

20/02/06(作业完成进度0%)
C语言
20/02/05 14:45:
我尝试着先用C语言这一基础编程语言,写了一段可以完美运行的代码。行数:29行,第一次编译时间: 1.59s。后续编译时间0.3s。耗时50分钟完成。其中有一次循环,有一个带参函数的调用。目前实现的功能为完成题目需求的钱包金额以及输出,还添加了一段2月份的收支情况,可以记录2月份的生活开销与收入。

20/02/05(作业完成进度0%)
后续可能会有所补充,至少再尝试写写Java的,python还不太会。

C++

20/02/07
今天花了一上午的时间向学过c++的同学学习了如何使用C++来写这道题。确实C++可能是最适合来完成这道题的语言了。目前还只是学了几个写这道题的方法,当然在完成这道题后的时间里,我的每日任务就要多一项学习C++了。不为完成作业,也为考研需要,也为自己而学。

代码行数:还在思考如何实现双位数的输入和输出;205行
需求分析时间:2小时还未完成;3小时
编码时间:目前2小时,还未完成;3小时(完成两位数的实现占了一个多小时)

编程要求

请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):

变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”

附加要求:

选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。

C++代码及思路

主函数
主函数部分将可能出现的汉字归类到一起,使用map函数将其一一对应
头文件及用到的变量
接着实现数字与汉字之间的转换,以便于计算加减。
数字转换
中间则使用自定义函数定义空操作以及操作:符合如果的做操作,不符合做空操作。(例如输入的不是指定的“整数”、“增加”、“减少”等字眼则会提示“无此变量”;再或者满足条件的所有运算也都在这里实现)
部分代码
(因为这个部分即主要部分,代码太长无法显示全部,具体代码我可以访问我的GitHub仓库:我的Github仓库

运行结果及样例

样例一:

整数 气温 等于 十
气温 减少 三
气温 增加 二
看看 气温
如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”

输出


你好,世界

样例一运行截图

样例二:

整数 小杨年龄 等于 八
整数 小杨零花钱 等于 二
小杨年龄 增加 一
如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
看看 小杨零花钱

输出

样例二运行截图

具体代码

#include<iostream> 
#include<map>
#include<math.h>
using namespace std;

map<string,int>num;
map<int,string>R_num;
map<string,int>var;
int judge_num;
string op;
string equ = "等于";
string judge;
string op_var;
string op_var1;
string judg_var;
string judg_var1;
string judg_jump;
string op_var_val;

int change_to_num(string a) //一二三四 转化为 1234 
{
	int c;
	int j=0;
	for(int i=a.length()-2;i>=0;i-=2,j++){
		string s3(a,i,2);
		c+=num[s3]*pow(10,j);
	}
	return c;
}

string R_change_to_num(int c) //1234 转化为 一二三四
{
	string a;
	int i = 0;
	int b;
	for(;b>0;i++)
		b = c / pow(10,i);
	for(i=i-2;i>=0;i--){
		b = int(c / pow(10,i)) % 10;
		a += R_num[b];
	}
	return a;
}

void no_operation()
{
	cin>>op;
	if(op=="整数"){
		cin>>op_var;
		cin>>equ;
		cin>>op_var_val;
	}
	else if(op=="看看"){
		cin>>op_var;
	}
	else{
		if(var.find(op) == var.end())
			cout<<"无此变量"; 
		else{
			op_var = op;
			cin >> op;
			if(op == "增加"){
				cin >> op_var1;
			} 
			else if(op == "减少"){
				cin >> op_var1;
			} 
		}
	}
}

void operation()
{
	cin>>op;
	if(op=="整数")
	{
		cin>>op_var;
		cin>>equ;
		cin>>op_var_val;
		var[op_var] = change_to_num(op_var_val);
		//cout<<"变量‘"<<op_var<<"’的值是"<<var[op_var]<<endl;//可以输出值 
	}
	else if(op=="看看")
	{
		cin>>op_var;
			/*去除引号 */ 
		if (!var.count(op_var)) {
				if (op_var[0] == '"' && op_var[op_var.size()-1] == '"') 
					cout << op_var.substr(1,op_var.size()-2) << endl;
				else if (op_var.substr(0,2) == "“" && op_var.substr(op_var.size()-2,2) == "”") 
					cout << op_var.substr(2,op_var.size()-4) << endl; 
					} 
		// 
		else
			cout<<R_change_to_num(var[op_var])<<endl;
	}
	else if(op=="如果")
	{
		cin >> judg_var;
		cin >> judge;
		if(judge=="等于")
		{
			cin >> judg_var1;
			if(var.find(judg_var1) == var.end())
				judge_num = num[judg_var1];
			else
				judge_num = var[judg_var1];
			if(var[judg_var] == judge_num)
			{
				cin>>judg_jump;
				operation();
				cin>>judg_jump;
				no_operation();
			}
			else
			{
				cin>>judg_jump;
				no_operation();
				cin>>judg_jump;
				operation();
			}
		}
		if(judge=="大于")
		{
			cin >> judg_var1;
			if(var.find(judg_var1) == var.end())
				judge_num = num[judg_var1];
			else
				judge_num = var[judg_var1];
			if(var[judg_var] > judge_num)
			{
				cin>>judg_jump;
				operation();
				cin>>judg_jump;
				no_operation();
			}
			else
			{
				cin>>judg_jump;
				no_operation();
				cin>>judg_jump;
				operation();
			}
		}
		else if(judge=="小于")
		{
			cin >> judg_var1;
			if(var.find(judg_var1) == var.end())
				judge_num = num[judg_var1];
			else
				judge_num = var[judg_var1];
			if(var[judg_var] < judge_num)
			{
				cin>>judg_jump;
				operation();
				cin>>judg_jump;
				no_operation();
			}
			else
			{
				cin>>judg_jump;
				no_operation();
				cin>>judg_jump;
				operation();
			}
		}
	}
	
	else
	{
		if(var.find(op) == var.end())
			cout<<"无此变量"; 
		else
		{
			op_var = op;
			cin >> op;
			if(op == "增加")
			{
				cin >> op_var1; 
				if(var.find(op_var1) == var.end())
					var[op_var] = var[op_var]+num[op_var1];
				else
					var[op_var] = var[op_var]+var[op_var1];
				//cout<<R_num[var[op_var]]<<endl;//可以输出值 
			} 
			else if(op == "减少")
			{
				cin >> op_var1; 
				if(var.find(op_var1) == var.end())
					var[op_var] = var[op_var]-num[op_var1];
				else
					var[op_var] = var[op_var]-var[op_var1];
				//cout<<R_num[var[op_var]]<<endl;//可以输出值 
			} 
		}
	}
}

int main()
{
	num["零"]=0,num["一"]=1,num["二"]=2,num["三"]=3,num["四"]=4,num["五"]=5,
	num["六"]=6,num["七"]=7,num["八"]=8,num["九"]=9,num["十"]=10;
	R_num[0]="零",R_num[1]="一",R_num[2]="二",R_num[3]="三",R_num[4]="四",
	R_num[5]="五",R_num[6]="六",R_num[7]="七",R_num[8]="八",R_num[9]="九",R_num[10]="十";
	
	while(true)
	{
		operation();
	}
	return 0;
	
}

作业过程中遇到的困难

讲真的,做这份作业的前两天,我整个人的状态就像我写在前言里的话。但是多少还是有些东西学会的,例如学会了GitHub仓库的创建删除以及GitHub Desktop的使用。当然,最重要的还是第三天请教了其他同学,学会了很多关于C++的知识。这份作业对于我来说,应该是属于我和他共同完成的,因为在这之前,我压根没接触过C++,再天才的人,也没法一天学会并写出这样的代码。在他的提点下,我才一步一步的实现了这段程序。
有的人肯定会说,那你这份作业根本不算是自己完成的,你这是在作弊。我想说的是,你所查阅的资料不也是别人的知识吗?但是,如果你能学到其中的知识,并且转换成自己的知识,这才叫做学习,哪怕只有一点,那也是在进步。从第一次创建博客园开始————装扮博客园,这也是让我们去学习,去学着使用。虽然这些后台的装扮代码是别人的,但是如果你能学会修改其中的一部分,使它成为自己的特色博园,那就是你自己东西。张老师也正面回答了,这门课的精髓就是在一边学习,一边完成。虽然这次我求助了其他同学,我也收获了很多,并且这几天抽空在B站学习C++。这次虽然做的不完美,但是下次一定

参考资料

以下网址为参考过的网址:
[C++map函数的使用方法](https://blog.csdn.net/weixin_43828245/article/details/90214494)
[如何用C++输出汉字](https://bbs.csdn.net/topics/350150464)

我的GitHub

具体代码我可以访问我的GitHub仓库:我的Github仓库

posted @ 2020-02-04 20:30  TieJiang13  阅读(444)  评论(2编辑  收藏  举报