Моя интерпретация такая же, как и у rcollyer - вы хотите случайным образом сгенерировать 25 пар рациональных чисел, причем 4 варианта - это результат {+,-,*,/}
для каждой пары, но в случайном порядке. Тогда речь идет об одной случайно выбранной операции над соответствующей парой дробей.
Для этого я настоятельно рекомендую прочитать ответ на вопрос Саши о генерации равномерно распределенных рациональных чисел с верхней границей в знаменателе . В частности, функция RandomFarey
, которая является реализацией ответа Саши 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% пути туда. Я действительно в спешке, поэтому есть несколько вещей, которые я не сделал, но я надеюсь, что вы или кто-то еще можете решить эту проблему. Они в основном тривиальны.
- Я не учитываю целые числа. Это испортит компоновку (эта будет немного не по теме), если генератор выбрасывает одну.
- Я забыл серийный номер
- Размеры этикеток должны быть меньше (или наоборот, цифры должны быть больше)
- Другие навороты и претензии