【问题标题】:Matlab code checkerMatlab代码检查器
【发布时间】:2015-07-01 05:36:50
【问题描述】:

我正在为学生做一个程序。他们可以在matlab程序中加载他们的matlab代码,程序应该执行学生的代码并检查输出是否正确,如果不正确,程序必须指出错误的行代码。所以我认为这是一种元编程。现在我正在尝试使用 eval() 函数将输入文本作为代码执行,但我不知道这是否是个好主意。此外,我在维护工作区中的变量时遇到问题,因为当我从一种方法更改为另一种方法时,工作区变量会被重置,所以我正在考虑解决这个问题,将工作区保存并加载到文件中,但也许你可以提出其他更好的想法。

现在,我们已经预定义了学生必须解决的练习,程序的输出总是一张或几张图像,因为这是图像处理课。这里有一个代码示例:

X=double(LENNA_G);
Y=medfilt2(X,[7 7]);
ps=psnr(Y,X,255);
disp(sprintf('%f[dB]',ps));

subplot(1,3,1);
imagesc(X,[0 255]);
colormap(gray(256))
axis image

subplot(1,3,2);
imagesc(Y,[0 255]);
axis image

subplot(1,3,3);
imagesc(X-Y,[-10 10]);
axis image

执行代码后,生成的图像将与正确的图像(预定义的图像)进行比较,并且必须相同。如果不是,那么程序必须至少指出可能出现错误的代码行。我不知道我是否让自己明白了=/。

提前谢谢你。

【问题讨论】:

  • 您会在这里发布您的一些作品或您尝试过的作品吗?
  • 你能举一个这样的练习的例子吗?我无法想象一种合理的方法来识别错误的代码行。
  • 我添加了之前忽略的新信息。我的代码现在不工作,但我创建了一个循环,逐行读取学生的代码并使用 eval() 函数执行每一行。
  • 我没有看到以简单方式找到确切代码行的方法。如果练习包含多个步骤,您可以将每个步骤之后的结果保存在一个元胞数组中,并以某种方式比较这个结果。元胞数组可以是学生函数的输出,您可以使用评估脚本调用它。然后您可以判断结果开始与您的预期版本不同的子练习。当然,您可以创建预定义的错误图像来识别常见错误。我建议不要使用eval-function,除非它是绝对需要的。
  • 你说你要编码数据,然后你写“程序的输出总是一个或几个图像”。那是另外一回事,验证数据的工作量要少得多,但没有办法将错误追溯到错误的代码行。我建议看看 cody 以获得一些灵感 (mathworks.com/matlabcentral/cody)

标签: matlab save eval metaprogramming


【解决方案1】:

我会从 cmets 提出这个解决方案。向学生分发模板:

function solution=exercise1(image1,image2)
%A) extract the r, g and b channel from the imag1e
solution.a.r=nan;
solution.a.g=nan;
solution.a.b=nan;
%B) convert the image2 to greyscale
solution.b=nan;
end

然后你可以调用函数exercise1并逐个字段比较,你需要的只是结构的递归比较,它输出有差异的字段名。您也可以提供脚本模板而不是函数模板,但是您的学生必须为他们的函数创建单独的文件。这样,函数可以在同一个文件中创建,保持私有并避免命名空间冲突。

【讨论】:

  • 我什至没有想到一个结构。但这无疑提供了一种更好的寻址方式,因为字段名不仅可以说明数字,还可以说明更多有关内容的信息。即使是子练习或步骤的处理也会像这样变得更容易。
  • 感谢您的想法@Matt 和 Daniel,我认为这可以解决我的问题,我将在这个程序中工作,我会告诉您进展如何。
猜你喜欢
  • 2023-03-15
  • 2010-10-20
  • 1970-01-01
  • 2012-11-20
  • 2021-07-13
  • 2014-07-22
  • 2018-12-22
  • 2020-01-13
  • 2013-01-18
相关资源
最近更新 更多