如何使用Mathematica为有理数生成多项选择作业集?

时间:2012-01-16 03:10:01

标签: wolfram-mathematica

我正在尝试为以下操作生成有理数的多项选择问题集:加法,减法,乘法和除法。

这样的东西

01)2/3 + 5/4的值是:a)b)c)d)e)

02)2/3 * 5/8的值是:a)b)c)d)e)

等约25个问题。我如何使用Mathematica做到这一点?

修改

  1. 当我尝试运行yoda的代码并且无法弄清楚原因时,我收到错误。这是错误消息:

    http://img829.imageshack.us/img829/8463/imagen1em.jpg

  2. 这是一个显示我想要的最终输出的模型: http://img827.imageshack.us/img827/7450/imagen2hn.jpg

  3. 数字生成很好,但如果它们在-100 < x < 100间隔内随机会更好。

2 个答案:

答案 0 :(得分:3)

我的解释与rcollyer的解释相同 - 你想随机生成25对有理数,并且4对选择是每对{+,-,*,/}的结果,但是以洗牌的顺序。然后问题是在相应的分数对上单个随机选择的操作。

为了做到这一点,我强烈建议您阅读Sasha's question on generating uniformly distributed rational numbers with an upper bound on the denominator的答案。具体来说,函数RandomFarey,这是Sasha对btilly的回答的实现。我建议这样做而不是更直观的Rationalize[RandomReal[...]]方法,因为如果你要为分数设置作业,那么它可能适用于小学/初中课程,你可能不希望任何任意显而易见的方法可能引发的有理数(例如,{273/391, 193/239},这可能有点过多,具体取决于级别。)

现在我们有了一个有理数的生成函数,所有需要做的就是生成它们,创建答案选项,改组,创建一组随机问题并整理好。这是一种做法。

makeHomework[n_Integer, denominator_Integer] := 
 Module[{rationalPairs = RandomFarey[denominator, 2 n]~Partition~2, 
   operators = {Plus, Subtract, Times, Divide}, 
   randomOp := RandomChoice[{"+", "-", "\[Times]", "\[Divide]"}], 
   choiceList, questionList},

  choiceList = Outer[Apply, operators, rationalPairs, 1];
  questionList = #1 <> randomOp <> #2 <> "=" & @@@ 
    Map[ToString[# // TraditionalForm] &, rationalPairs, {2}];

  Grid[Transpose@{questionList, 
     Row@MapThread[Labeled, {#, {"(a)", "(b)", "(c)", "(d)"}}] & /@ 
      Transpose@choiceList},
   Spacings -> {0, 1}]
  ]

例如,评估makeHomework[5, 10]会给出:

enter image description here

这可能会占据你90%的路程。我真的很匆忙,所以我还有一些事情没有做,但我希望你或其他人可以解决这个问题。他们大多是微不足道的。

  1. 我不考虑整数。如果发电机要抛出一个,那么这些会弄乱布局(一个会有点偏离线路)。
  2. 我忘记了序列号
  3. 标签尺寸应该更小(或相反,数字应该更大)
  4. 其他褶边和美化

答案 1 :(得分:2)

你能在网格中输入吗?这样的事情:(你没有说你的a,b,c,d应该是什么,如果你澄清一下,我可以更新。我假设你有一些选择可以从某个地方选择。这可以很容易地添加

enter image description here

t1 = "the value of ";
t2 = " is :  a)  b)  c)   d)";
a = {"1/2", "3/4", "8/9", "4/3"};
b = {"5/6", "5/6", "9/5", "7/9"};
choice = {"a) b) c) d)"};
r = Table[{i, t1, a[[i]] + b[[i]], t2}, {i, 1, Length[a]} ];
r = Insert[r, {" mid term exam", SpanFromLeft}, 1];
r = Insert[r, {" no cheating allowed", SpanFromLeft}, -1];
Grid[
 r,
 Frame -> {1 -> True, All}, Spacings -> {.4, 1}, Alignment -> Center
 ]

修改(1)

这里还有一个使用Mathematica生成代数测验问题的演示。可能这可以给OP更多的想法:

http://demonstrations.wolfram.com/AlgebraQuiz/