zoukankan      html  css  js  c++  java
  • 第一次个人编程作业-汉字编程

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

    写在前面的话

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

    对不起,我确实理解错题目的意思了,想的太简单,还那么早提交。大错特错了!
    今天(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仓库

  • 相关阅读:
    面向中后台复杂场景的低代码实践思路
    树莓派使用raspivid实时预览视频
    grep rn无法匹配文件中的字符串
    C++有关std::sort和std::bind那些事
    C++有关unordered_map::erase的奇怪bug
    ssh与tar的奇妙组合
    git指定仓库使用特定用户名提交
    在win7下搭建php+apache+mysql环境
    神乎其神的技艺
    好书推荐——《启动大脑》
  • 原文地址:https://www.cnblogs.com/TieJiang13/p/12261001.html
Copyright © 2011-2022 走看看