我的解釋與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[[email protected]{questionList,
[email protected][Labeled, {#, {"(a)", "(b)", "(c)", "(d)"}}] & /@
[email protected]},
Spacings -> {0, 1}]
]
例如,評估makeHomework[5, 10]
給出:
這可能需要你的方式出現90%。我真的很忙,所以有幾件事我沒有做,但我希望你或其他人能解決它。他們大多是微不足道的。
- 我沒有考慮整數。如果發電機要將其中一臺投入使用,這些將會弄亂佈局(那個佈局會稍微偏離線路)。
- 我忘了序列號
- 標籤尺寸要小一些(或者反過來,這個數字應該更大)
- 其他多餘的裝飾和prettifications
我不完全知道你是問什麼。你想隨機生成一個處理分數數學的問題集嗎? – rcollyer 2012-01-16 03:24:12