![生成工作表](https://linux22.com/image/245080/%E7%94%9F%E6%88%90%E5%B7%A5%E4%BD%9C%E8%A1%A8.png)
我的目标是能够生成以下类别的工作表:
- 指数法则
- 联立线性方程和
- 二次方程
当我说生成时,指的是生成例如 20 个不同的问题。我认为我已经通过以下方式解决了这个问题:
\newcommand{\questiontype}[1]{%
\foreach \i in {1,...,#1}
{
\item $my question type$
}}
不知何故,我相信它与问题有关使用 rand 选项创建随机问题。
唯一的区别是代码中需要的限制。例如,考虑二次方程,有三类问题,即根相等、不同和虚数的问题。
我不是 pgf 和随机参数方面的专家。我在这里正在学习,希望各位专家能够帮助我。我的灵感来自计算与编程。
我尚未开发任何代码,但已准备好学习。
编辑
为了更好地理解我的问题,请参阅下面的代码。
例如:
\usepackage{lcg,calc,ifthen}
% Une variable qui va servir
\newcounter{det}
\newcommand{\randomsys}{
% Génerer 6 entiers dans [-20,20]
\reinitrand[first=-20, last=20, counter=a] \rand
\chgrand[counter=b] \rand
\chgrand[counter=c] \rand
\chgrand[counter=d] \rand
\chgrand[counter=e] \rand
\chgrand[counter=f] \rand
% Remplacer 0 par 1000
\ifthenelse{\value{a}=0}{\setcounter{a}{1000}}{}
\ifthenelse{\value{b}=0}{\setcounter{b}{1000}}{}
\ifthenelse{\value{d}=0}{\setcounter{d}{1000}}{}
\ifthenelse{\value{e}=0}{\setcounter{e}{1000}}{}
% Un énoncé selon la valeur du dét
\setcounter{det}{\value{a}*\value{e}-\value{b}*\value{d}}
\ifthenelse{\value{det}=0}%
{Expliquer pourquoi le système suivant
n'admet pas une unique solution :}%
{Résoudre le système suivant :}
\[
\left\lbrace \begin{array}{rcl}
\thea x+\theb y &=& \thec \\
\thed x+\thee y &=& \thef
\end{array} \right.
\]}
\randomsys \randomsys \randomsys \randomsys
\randomsys \randomsys \randomsys \randomsys
上面的代码应该生成随机联立方程。因此,我的目标是理解每一行的含义、替代方法(例如使用 tikz 中的 pgfmath)以及代码中每个定义的含义。
最终我想学习如何基于上述原理创建随机问题。上面提到的主题(指标定律、四元方程和联立方程)只是参考样本。
答案1
如果没有更多详细信息,我不知道如何提供更多帮助。以下是对正在发生的事情的解释:
我定义
\newcommand*{\Difficulty}{10}
。此数字用于确定生成的随机数的范围。在本例中,将其设置为10
,则随机数将是 范围内的实数1...10
。\pgfmathtruncatemacro
用于设置一个宏,其中包含计算表达式的整数值。因此,\pgfmathtruncatemacro{\DenomDifficulty}{2*\Difficulty}
将宏设置\DenomDifficulty
为 中指定值的两倍\Difficulty
。类似地,\pgfmathtruncatemacro{\Neum}{random(\Difficulty)}
将宏设置\Neum
为 返回的值random(\Difficulty)
。由于random()
提供了一个实值随机数1..10
,并且(假设此处)我们只想要整数,因此必须使用\pgfmathtruncatemacro
,而不是通常的\pgfmathsetmacro
。类似地,对于
\LinearSystem
和\QuadraticEquations
宏来说,这只是生成更多随机数并在数学表达式中使用它们的问题。您在问题中提到二次方程有三种情况:相等根、不同根和虚根。如果您只想生成具有相同类型根的方程组,则需要提供一种确保该类型根的算法。
如果您不需要限制整数值,那么这是一个相当简单的情况。例如,要获得相等的根,您可以随机生成
\A
,\B
然后使用\C = (\B*\B)/(4*\A)
。但是,这不一定是整数,因此您必须在此处包含所需的额外逻辑。
进一步改进:
- 完成宏以仅生成具有不同实根和虚根的二次方程。
- 也生成负数。在这种情况下,建议加入一些逻辑,以便我们不是最终结果
+ -
与问题中链接的示例一样。一种方法是生成另一个随机数,如果生成的随机数大于 0.6,0..1
则使用-
符号代替正负号+
(或不使用符号,如前导数中所示)(假设您希望大约 40% 的问题带有负号,这也会根据年级控制难度级别)。 - 自动将小数转换为约分。有关此问题,请参阅未来的问题随机二次方程,这增强了这里提出的解决方案。
代码:
\documentclass{article}
\usepackage{mathtools}
\usepackage{enumitem}
\usepackage{tikz}
\newcommand*{\Difficulty}{10}%
\newcommand{\FracQuestion}[1]{%
\foreach \i in {1,...,#1}{%
\pgfmathtruncatemacro{\DenomDifficulty}{2*\Difficulty}%
\pgfmathtruncatemacro{\Neum}{random(\Difficulty)}
\pgfmathtruncatemacro{\Denom}{random(\DenomDifficulty)}
\item $\dfrac{\Neum}{\Denom}$%
}%
}%
\newcommand{\LinearSystem}[1]{%
\foreach \i in {1,...,#1}{%
\pgfmathtruncatemacro{\Xa}{random(\Difficulty)}%
\pgfmathtruncatemacro{\Ya}{random(\Difficulty)}%
\pgfmathtruncatemacro{\Za}{random(\Difficulty)}%
\pgfmathtruncatemacro{\Xb}{random(\Difficulty)}%
\pgfmathtruncatemacro{\Yb}{random(\Difficulty)}%
\pgfmathtruncatemacro{\Zb}{random(\Difficulty)}%
\item $\begin{cases}\begin{aligned}%
\Xa x + \Ya y &= \Za \\%
\Xb x + \Yb y &= \Zb \\%
\end{aligned}\end{cases}$%
}%
}%
\newcommand{\QuadraticEquations}[1]{%
\foreach \i in {1,...,#1}{%
\pgfmathtruncatemacro{\A}{random(\Difficulty)}%
\pgfmathtruncatemacro{\B}{random(\Difficulty)}%
\pgfmathtruncatemacro{\C}{random(\Difficulty)}%
\item $\A x^2 + \B x + \C = 0$%
}%
}%
\newcommand{\QuadraticEquationsEqualRoots}[1]{%
\foreach \i in {1,...,#1}{%
\pgfmathtruncatemacro{\A}{random(\Difficulty)}%
\pgfmathtruncatemacro{\B}{random(\Difficulty)}%
\pgfmathsetmacro{\C}{(\B*\B)/(4*\A)}%
\item $\A x^2 + \B x + \C = 0$%
}%
}%
\begin{document}
\section{Random Fractions:}
\begin{enumerate}
\FracQuestion{3}
\end{enumerate}
%
\section{Random 2x2 Linear Equations:}
\begin{enumerate}
\LinearSystem{3}
\end{enumerate}
%
\section{Random Quadratic Equations:}
\begin{enumerate}
\QuadraticEquations{3}
\end{enumerate}
%
\section{Random Quadratic Equations (Equal Roots):}
\begin{enumerate}
\QuadraticEquationsEqualRoots{3}
\end{enumerate}
\end{document}