论文部分内容阅读
摘要:汇编语言是国际上广泛流行的计算机低级程序设计语言之一,对于汇编语言知识及能力的考核,除部分客觀题以外,目前尚使用人工阅卷,尤其是程序设计题目的阅卷仍处于人工阶段,因此本人针对这种情况,研究了汇编语言程序设计题的自动评分方法,目的是实现汇编语言课程的完全无纸化考试,减少阅卷工作量,提高评阅过程的公正性和准确性。
关键词:自动阅卷关键指令分析
中图分类号:TP313 文献标识码:A 文章编号:1672-3791(2011)01(a)-0016-01
随着社会信息化程度的不断提高,计算机辅助处理、多媒体技术以及计算机网络等技术的飞速发展和推广应用,考试中使用的传统手工阅卷已经逐渐走向计算机自动评阅。许多高校目前组织C语言、VB、汇编语言、VFP、FoxPro等多种程序设计语言进行考试,常见的客观试题已经由人工阅卷转向自动阅卷,并且能很好地完成,但是对于一些主观性很强的题目,尤其是程序设计题,仍然需要人工阅卷,浪费了大量的人力和物力,急需开发一套主观题的自动阅卷系统。
在编程语言程序设计题目的计算机自动阅卷技术中,要解决的一个主要问题之一是对关键指令或语句的设置,也就是计算机自动识别程序中关键指令的对错。为了提高考生得分的合理性,一般自动阅卷系统除运用程序测试方法外,还运用与此方法相配合的关键指令分析方法。实践证明,在考试中能够运行进而实施测试的程序答案毕竟还是少数,更多的则是无法正常运行,而只能通过关键指令分析法来评判考生对关键知识点的掌握情况,并对其赋予相应的得分,类似于人工阅卷的安步骤得分,使得考生的得分更接近实际。为此,自动阅卷技术引入关键指令分析方法,以提高对程序题评阅的客观公正性。本文主要针对汇编语言程序设计题的自动阅卷技术进行分析与研究,给出的是汇编语言程度设计题的关键指令分析方法。
1关键指令分析的主要思想和算法
1.1 主要思想
关键指令分析的主要思想是:汇编语言的程度设计题的关键是运行正确,得到相应的结果,但是由于程序设计题的特殊性,使得许多程序不可能写出就正确,可能需要大量的调试,而导致考生在考试过程中无法完成,而汇编语言的程序题主要是由指令构成的,每一个题目都有它的设计思想也就是关键的步骤,这些关键步骤在题目中体现在关键指令上,因此对于无法正确运行的程序题可以采用关键指令分析方法来给出一定的分数。关键指令分析方法要求出题者在录入考试题目要求的同时完成将考题答案以及本题目所对应的关键指令信息的录入工作,在考生所提交的答案不能正常运行而无法进行动态测试的时候,则可以采用关键指令分析法,将考生答案中的关键指令信息与关键指令数据表中的关键指令信息进行字符串模式匹配,根据匹配结果来评判考生程序答案中是否包含了考试所要求的关键指令信息。此方法的优点在于可以根据匹配结果中写对的关键指令数看考生对题目的理解程度,不像以前只看运行结果的评判方法,使得考生得到与自己真实水平相关的分数,类似于人工阅卷,但比人工阅卷节省了大量的人力和物力。虽然此技术还不太成熟,但是由于它的优势一定会得到很大的发展。
1.2 实现关键指令分析的算法:要点快速匹配算法
要点快速匹配算法是在对模式匹配的很多典型有效算法进行进一步改进后,专门针对关键指令分析提出的相应算法。本文中将汇编语言的常用的主要指令情况列表如表1。
根据这些关键指令,首先在数据库中建立一个专门的“关键指令数据表(Keystence_info)”,将上述关键指令保存于表中,并将每条关键指令的首字符(firstchar)和字符串长度(string_length)等相应信息保存于该表的相应字段,在进行字符串匹配时只需通过对该表的访问获取相应信息去完成对考生程序答案的关键指令匹配即可,而无需重复计算。另外,在数据库中还要建立一个“要点数据表(Key_info)”包括题号、序号、要点内容、要点得分等元素,将要点分析匹配后得到的信息记录到此表中,以便统计程序设计题的最后得分。
结合以上,对要点快速匹配算法在汇编语言中的实现描述如下(伪代码):
CString Instring,astring;
While(有要点数据)
{按要点数据查询数据表Keystence_info;
first_char=Keystenee_info.flrst_char:
instring=文件第一行代码;
while (!Instring)
{while (!串尾)
{调用KMP算法,在Instring中查找first_char,并用变量index_first
记录其位置索引;//判断首字符前字符及末字符后字符是否为空格
if((Char(Instring,index_first -1= =‘ ’)&&
(Char(Intring,index_first+Keystence_info.string_length)= =‘ ’))
{astring=String(Instring,index_first,Keystence_info.string_length);
调用KMP算法对astring与模式串进行匹配;
if(匹配成功)
将要点得分填入得分表相应字段;
e1se
串指针= index_first+Keystence_info.string_length;
}
}
Inistring=文件下一行代码;
}
取下一要点数据;
}
算法中用到的函数Char(CStringastring,intindex)实现在特定字符串astring中取指定位置index的字符的功能。
通过以上的算法可以实现考生程序设计题的自动阅卷,并且给出合理的分数,使考生不至于出现因为一点错误而导致全部得零分的现象,而且此算法经过验证对一些简单的要求不高的程序设计题完全可以实现自动评阅,但是由于汇编语言程序设计题的灵活性,同一个题目可以有不同的方法和思路来实现,因此使用本方法时有一定的要求,如使用一定的寄存器,使用一定的方法、思路等等,所以本方法对于一些较为复杂的、要求比较灵活的程序设计题的自动评阅功能的完善还有待进一步的研究实现。
关键词:自动阅卷关键指令分析
中图分类号:TP313 文献标识码:A 文章编号:1672-3791(2011)01(a)-0016-01
随着社会信息化程度的不断提高,计算机辅助处理、多媒体技术以及计算机网络等技术的飞速发展和推广应用,考试中使用的传统手工阅卷已经逐渐走向计算机自动评阅。许多高校目前组织C语言、VB、汇编语言、VFP、FoxPro等多种程序设计语言进行考试,常见的客观试题已经由人工阅卷转向自动阅卷,并且能很好地完成,但是对于一些主观性很强的题目,尤其是程序设计题,仍然需要人工阅卷,浪费了大量的人力和物力,急需开发一套主观题的自动阅卷系统。
在编程语言程序设计题目的计算机自动阅卷技术中,要解决的一个主要问题之一是对关键指令或语句的设置,也就是计算机自动识别程序中关键指令的对错。为了提高考生得分的合理性,一般自动阅卷系统除运用程序测试方法外,还运用与此方法相配合的关键指令分析方法。实践证明,在考试中能够运行进而实施测试的程序答案毕竟还是少数,更多的则是无法正常运行,而只能通过关键指令分析法来评判考生对关键知识点的掌握情况,并对其赋予相应的得分,类似于人工阅卷的安步骤得分,使得考生的得分更接近实际。为此,自动阅卷技术引入关键指令分析方法,以提高对程序题评阅的客观公正性。本文主要针对汇编语言程序设计题的自动阅卷技术进行分析与研究,给出的是汇编语言程度设计题的关键指令分析方法。
1关键指令分析的主要思想和算法
1.1 主要思想
关键指令分析的主要思想是:汇编语言的程度设计题的关键是运行正确,得到相应的结果,但是由于程序设计题的特殊性,使得许多程序不可能写出就正确,可能需要大量的调试,而导致考生在考试过程中无法完成,而汇编语言的程序题主要是由指令构成的,每一个题目都有它的设计思想也就是关键的步骤,这些关键步骤在题目中体现在关键指令上,因此对于无法正确运行的程序题可以采用关键指令分析方法来给出一定的分数。关键指令分析方法要求出题者在录入考试题目要求的同时完成将考题答案以及本题目所对应的关键指令信息的录入工作,在考生所提交的答案不能正常运行而无法进行动态测试的时候,则可以采用关键指令分析法,将考生答案中的关键指令信息与关键指令数据表中的关键指令信息进行字符串模式匹配,根据匹配结果来评判考生程序答案中是否包含了考试所要求的关键指令信息。此方法的优点在于可以根据匹配结果中写对的关键指令数看考生对题目的理解程度,不像以前只看运行结果的评判方法,使得考生得到与自己真实水平相关的分数,类似于人工阅卷,但比人工阅卷节省了大量的人力和物力。虽然此技术还不太成熟,但是由于它的优势一定会得到很大的发展。
1.2 实现关键指令分析的算法:要点快速匹配算法
要点快速匹配算法是在对模式匹配的很多典型有效算法进行进一步改进后,专门针对关键指令分析提出的相应算法。本文中将汇编语言的常用的主要指令情况列表如表1。
根据这些关键指令,首先在数据库中建立一个专门的“关键指令数据表(Keystence_info)”,将上述关键指令保存于表中,并将每条关键指令的首字符(firstchar)和字符串长度(string_length)等相应信息保存于该表的相应字段,在进行字符串匹配时只需通过对该表的访问获取相应信息去完成对考生程序答案的关键指令匹配即可,而无需重复计算。另外,在数据库中还要建立一个“要点数据表(Key_info)”包括题号、序号、要点内容、要点得分等元素,将要点分析匹配后得到的信息记录到此表中,以便统计程序设计题的最后得分。
结合以上,对要点快速匹配算法在汇编语言中的实现描述如下(伪代码):
CString Instring,astring;
While(有要点数据)
{按要点数据查询数据表Keystence_info;
first_char=Keystenee_info.flrst_char:
instring=文件第一行代码;
while (!Instring)
{while (!串尾)
{调用KMP算法,在Instring中查找first_char,并用变量index_first
记录其位置索引;//判断首字符前字符及末字符后字符是否为空格
if((Char(Instring,index_first -1= =‘ ’)&&
(Char(Intring,index_first+Keystence_info.string_length)= =‘ ’))
{astring=String(Instring,index_first,Keystence_info.string_length);
调用KMP算法对astring与模式串进行匹配;
if(匹配成功)
将要点得分填入得分表相应字段;
e1se
串指针= index_first+Keystence_info.string_length;
}
}
Inistring=文件下一行代码;
}
取下一要点数据;
}
算法中用到的函数Char(CStringastring,intindex)实现在特定字符串astring中取指定位置index的字符的功能。
通过以上的算法可以实现考生程序设计题的自动阅卷,并且给出合理的分数,使考生不至于出现因为一点错误而导致全部得零分的现象,而且此算法经过验证对一些简单的要求不高的程序设计题完全可以实现自动评阅,但是由于汇编语言程序设计题的灵活性,同一个题目可以有不同的方法和思路来实现,因此使用本方法时有一定的要求,如使用一定的寄存器,使用一定的方法、思路等等,所以本方法对于一些较为复杂的、要求比较灵活的程序设计题的自动评阅功能的完善还有待进一步的研究实现。