如何创建一个每个问题都包含随机数的减法工作表?

如何创建一个每个问题都包含随机数的减法工作表?

我想创建一个如下所示的工作表:

在此处输入图片描述

在这里,我不想手动输入每个问题,而是想创建随机问题,其中减数来自一组整数(例如{-10,-9,..,10}),而减数来自另一组整数,其中减数可能大于,等于或小于被减数。

非常感谢您的任何建议。

答案1

以下是使用该包的实现sagetex。它利用了开源计算机代数系统,智者,它不属于 LaTeX 发行版。它还允许使用 Python 进行编程。

\documentclass{article}%
% -----------------------------The preamble ------------------------------------
\usepackage{fix-cm}% allow for a bigger font
%  mathematical typesetting, fonts, and symbols
\usepackage{amsmath, amsfonts, amssymb}
\usepackage[T1]{fontenc}% change the fonts
\usepackage[margin=.5in]{geometry}%  sets the margins
\usepackage{sagetex}%  use Sage for it's math ability
\pagestyle{empty} % remove the page numbers
% -----------------------------End of the preamble ------------------------------
\begin{document}
\fontsize{17pt}{20pt}\selectfont %sets font size
\noindent
\begin{sagesilent}
def Problems(rows,columns):
    output = r""
    output += r"\begin{tabular}{r"+"r"*(2*columns)+"}"
    for i in range(0,rows):
        minuend = [Integer(randint(5,25)) for i in range(0,columns)]
        subtrahend = [Integer(randint(-10,10)) for i in range(0,columns)]
        for j in range(0,columns):
            if j<columns-1:
                output += r"%s & \hspace{.2in} &"%(minuend[j])
            else:
                output += r"%s \\"%(minuend[j])
            ##### second row #####
        for j in range(0,columns):
            if j<columns-1:
                output += r"\underline{-  %s} & \hspace{.5in} &"%(subtrahend[j])
            else:
                output += r"\underline{-  %s}\\\\\\"%(subtrahend[j])

    output += r"\end{tabular}"

    return output

outputP = r""
outputP += Problems(4,5)
\end{sagesilent}
\begin{center}
\sagestr{outputP}
\end{center}
\end{document}

Cocalc 中运行的输出显示: 在此处输入图片描述

一些评论:

  • output += r"\begin{tabular}{r"+"r"*(2*columns)+"}" 使用 Python 设置列数。由于问题之间应该有空格,因此添加了额外的列。能够调整使用的列使该sagetex方法非常方便。
  • minuend = [Integer(randint(5,25)) for i in range(0,columns)] 将被减数设置为 5 到 25 之间的随机整数,而 subtrahend = [Integer(randint(-10,10)) for i in range(0,columns)] 将值设置在 -10 到 10 之间。
  • 字体大小已增大,使得工作表更易于阅读。
  • outputP += Problems(4,5) 会创建 4 行,每行 5 个问题(20 个问题)。通过调整这些数字,您可以轻松更改工作表中的问题数量。

最简单的方法sagetex是打开一个免费的可钙帐户。

答案2

下面是一个实现expl3

\documentclass{article}
\usepackage{xparse,array}

\ExplSyntaxOn

\NewDocumentCommand{\randomsubtractions}{mm}
 {% #1 = rows, #2 = columns
  \zuriel_randomsubtractions:nn { #1 } { #2 }
 }
\NewDocumentCommand{\boundsfirst}{mm}
 {
  \int_set:Nn \l_zuriel_first_lb_int { #1 }
  \int_set:Nn \l_zuriel_first_ub_int { #2 }
 }
\NewDocumentCommand{\boundssecond}{mm}
 {
  \int_set:Nn \l_zuriel_second_lb_int { #1 }
  \int_set:Nn \l_zuriel_second_ub_int { #2 }
 }

\int_new:N \l_zuriel_first_lb_int
\int_new:N \l_zuriel_first_ub_int
\int_new:N \l_zuriel_second_lb_int
\int_new:N \l_zuriel_second_ub_int

\cs_new_protected:Nn \zuriel_randomsubtractions:nn
 {
  \group_begin:
  \setlength{\tabcolsep}{2em}
  \begin{tabular}{ @{} *{#2}{>{$}c<{$}} c @{\hspace{-\tabcolsep}} }
  \prg_replicate:nn { #1 } { \__zuriel_randomsubtraction_row:n { #2 } \\[6ex] }
  \end{tabular}
  \group_end:
 }

\cs_new_protected:Nn \__zuriel_randomsubtraction_row:n
 {
  \prg_replicate:nn { #1 } { \__zuriel_randomsubtraction: & }
 }

\cs_new_protected:Nn \__zuriel_randomsubtraction:
 {
  \begin{array}{@{} r @{}}
  \int_rand:nn { \l_zuriel_first_lb_int } { \l_zuriel_first_ub_int } \\
  - \int_rand:nn { \l_zuriel_second_lb_int } { \l_zuriel_second_ub_int } \\
  \hline
  \end{array}
 }

\ExplSyntaxOff

\begin{document}

\boundsfirst{-10}{10} \boundssecond{1}{10}

\randomsubtractions{5}{5}

\end{document}

在此处输入图片描述

相关内容