【发布时间】:2012-01-16 03:10:01
【问题描述】:
我正在尝试为以下运算生成有理数的多项选择题集:加法、减法、乘法和除法。
类似
01) 2/3 + 5/4 的值是:a) b) c) d) e)
02) 2/3 * 5/8 的值是:a) b) c) d) e)
等等大约 25 个问题。如何使用 Mathematica 做到这一点?
编辑
【问题讨论】:
-
我不完全确定你在问什么。您想随机生成一个处理分数数学的问题集吗?
我正在尝试为以下运算生成有理数的多项选择题集:加法、减法、乘法和除法。
类似
01) 2/3 + 5/4 的值是:a) b) c) d) e)
02) 2/3 * 5/8 的值是:a) b) c) d) e)
等等大约 25 个问题。如何使用 Mathematica 做到这一点?
编辑
【问题讨论】:
我的解释与 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] 给出:
这可能会带您完成 90% 的路程。我真的很着急,所以有几件事我没有做,但我希望你或其他人能够解决它。它们大多是微不足道的。
【讨论】:
RandomFarey 的代码在我的回答中链接到的 Sasha 的问题中,您还需要评估 cfPairs 和 cfGCD 才能使用 RandomFarey。一旦你这样做了,它应该会为你评估。
您可以在网格中输入它吗?像这样:(你没有说你的 a,b,c,d 应该是什么,如果你澄清了,我可以更新这个。我假设你可以从某个地方选择一些选择。这可以很容易地添加.
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更多的想法:
【讨论】: