65.9K
CodeProject 正在变化。 阅读更多。
Home

TI-BASIC 入门:使用 TI-83/TI-84 解决数学问题

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016 年 4 月 16 日

CPOL

9分钟阅读

viewsIcon

13131

我们将学习如何对 TI-83 / TI-84 图形计算器进行编程,然后编写程序来解决几个数学问题,包括确定一个数是否为素数、找出两个数的最大公约数以及计算内切圆的半径。

引言

我们可以使用 TI-83 或 TI 84 计算器来完成更多工作,而不仅仅是分析图形和模拟概率事件;我们可以对它们进行编程来解决重复性的数学问题。对计算器进行编程可以帮助我们更快地解决问题,减少输入错误的可能性,并更容易地应用暴力破解算法。

在本教程中,我们将学习 TI-BASIC,即 TI-83 或 TI-84 的编程语言,然后以编程方式解决六个数学问题。

背景

编程相关活动在“Programming Screen”(编程屏幕)中可用,通过按 [PRGM] 键即可进入。屏幕顶部有三个选项卡

  • EXEC:执行程序。我们将在本教程稍后执行我们创建的程序
  • EDIT:查看或修改程序的代码。我们可能会在本教程中访问此选项卡进行程序调试
  • NEW:创建新程序。

要删除程序,请前往 Memory -> Mem Mgmt/Del -> Prgm,按 [2ND][+][2][7],滚动到所需程序,然后按 [DEL] 键。

要键入字母,请按 [ALPHA] 键,然后按带有所需字母的键。

“Hello World”

让我们从创建一个新程序开始:[PRGM] -> NEW -> 1:Create New,该程序将显示消息“HELLO WORLD”。在本教程中,我们将程序命名为“HELLO”。

TI-BASIC 有一组预制命令,也称为 **tokens**(令牌),这些命令使计算器能够执行特定任务,例如显示消息、比较值,甚至打开和关闭单个像素。如果您用其他语言编程过,可以将令牌视为关键字。我们在程序中使用令牌。

要查看令牌,请按 [PRGM]。在新屏幕的顶部有三个选项卡,每个选项卡都包含许多令牌

  • CTL (Control):这些令牌控制程序的结构。常用的令牌包括 if/else 和循环。
  • I/O (Input/Output):这些令牌从用户获取输入并显示消息、图形和表格。
  • EXEC:我们可以在程序中执行其他程序

要显示“HELLO WORLD”消息,请在 I/O 选项卡中选择第三个令牌 3:Disp,然后键入“HELLO WORLD”。

要运行程序,请按 [2ND][MODE] 返回主屏幕,然后按 [PRGM] 选择 HELLO,然后按 [ENTER]

代码,                                                                       执行,

常用令牌

以下是大多数程序中使用的令牌列表

I/O 令牌

Disp [字符串或数字]

将字符串或数字显示在屏幕上。字符串左对齐,数字右对齐

Disp "HELLO WORLD" 或者
Disp 5*9

Prompt [变量]

提示用户输入一个数字,该数字将存储在变量中

Prompt A(将用户输入的数字存储在变量 A 中)

CTL 令牌

If [条件]
那么
[语句]
Else
[语句]
End 

创建 If/Else 情况。有三种类型。

If [条件]
[语句]

如果条件为真,我们只执行下一条语句

If [条件]
那么
[语句]
End

如果条件为真,我们执行 Then 和 End 令牌之间的所有语句

If [条件]
那么
[语句]
Else
[语句]
End

我们执行多个语句并包含一个 else 子句。

If A=42
Disp "ONE STATEMENT ONLY"

 

If A=42
那么
Disp "TWO"
Disp "STATEMENTS"
End

 

If A=42
那么
Disp "TRUE"
Else
Disp "FALSE"
End
For (X, start, end)
[语句]
End

X 的值从 start 开始,在运行 For 和 End 令牌之间的语句后,X 的值增加 1。这会一直持续到 X 的值等于 end。这是一个 for 循环。

For (X,1,10)
Disp X
End

(这将显示数字 1 到 10)

While [条件]
[语句]
End

只要条件为真或为 1,语句就会执行。这是一个 while 循环。

While X=42
Disp "X IS STILL 42"
End
Repeat [条件]
[语句]
End

这类似于 while 循环,但语句会执行一次,然后检查条件,或者更简洁地说,这是一个保证至少执行一次语句的 while 循环。这等同于 do/while 循环。

42->X (将 X 赋值为 42,按 [STO>] 键创建箭头符号)

Repeat X=42
Disp "X IS 42"
End

停止

退出程序

While 1
Disp "WILL DISPLAY"
STOP
Disp "WILL NOT DISPLAY"
End

注意:要将数字赋给变量,我们按 [STO>] 键,它会创建一个箭头符号 (->)。例如,42->XX 赋值为 42。

解决数学问题

让我们通过编程解决几个数学问题,以便更熟悉 TI-BASIC 编码。我们假设所有用户输入都是数字。

数学问题 1:将输入乘以 10

例如,如果用户输入 5,我们的程序将显示 50。

要提示用户输入数字,我们使用 Prompt 令牌。要显示数字的十倍,我们使用 Disp 令牌。这是我们的代码

Prompt X (this asks the user to supply a value and that value is stored in X)
Disp 10X (we display 10*X)

或者,我们也可以将 X 的值重新赋值为 10X

Prompt X
10X->X
Disp X

数学问题 2:暴力破解两个输入之间的数字之和

例如,如果用户输入 1 和 5,我们的程序将显示 9,因为 2+3+4=9。

由于我们向用户询问两个数字,因此我们使用两个 Prompt 令牌。要迭代用户输入的两个数字之间的数字,我们可以使用 for、while 或 repeat (do/while) 循环。我们假设用户的第二个数字大于第一个数字。为了提高程序清晰度,我们还使用一个变量 S 来存储数字的总和。

Prompt X
Prompt Y
0->S
For (A,X+1,Y-1)
S+A->S
End
Disp S

数学问题 3:使用 For 循环计算幂

例如,如果用户输入 3 和 4,我们的程序将显示 81。

虽然我们可以轻松地使用 [^] 键找到一个数的幂,但我们尝试用老式的方法来计算:多次乘法。

与上一个程序类似,我们可以使用两个 Prompt 令牌来提示用户输入两个数字。但是,一个更节省空间的技术是将两个 Prompt 令牌合并为一个:Prompt X,Y。我们使用 for 循环不断将第一个数乘以自身,直到它乘以自身的次数等于第二个数字。我们还创建一个变量 P 来存储最终结果。

Prompt X,Y
1->P
For (A,1,Y)
PX->P
End
Disp P

数学问题 4:确定输入是素数还是合数

例如,如果用户输入 79,我们的程序将显示“PRIME”。如果用户输入 80,我们的程序将显示“COMPOSITE”。

如果一个数的因子只有 1 和它本身,那么它就是素数。更具描述性地说,如果一个数从 2 到该数的平方根之间不存在任何数,当该数除以这些数时余数为 0,则该数是素数。否则,该数是合数。

要检查一个数是否为素数,我们遍历从 2 到其平方根的每个数,并检查它除以循环的数是否余数为 0。要检查余数,我们可以使用 [Math]->NUM -> 0:remainder( 中的余数函数。如果余数为 0,则我们的数是合数,因此我们显示“COMPOSITE”并退出程序。如果所有数都已循环,那么我们的数一定是素数,我们显示“PRIME”。

Prompt X
For (A,2,sqrt(X))
If remainder(X,A)=0
Then
Disp "COMPOSITE"
Stop
End        (marks the end of the if statement)
End        (marks the end of the for loop)
Disp "PRIME"

数学问题 5:使用欧几里得算法找出两个输入的 GCD

例如,如果用户输入 72 和 15,我们的程序将显示 3。
注意:还有一个内置的 GCD 函数,位于 [MATH]->NUM->9: gcd(

欧几里得算法依赖于两个定理

  1. 如果 a = bt + r,则 gcd(a, b) = gcd(b, r)
  2. 如果 a = bt,则 gcd(a, b) = b

…通过重复应用第一个定理来创建具有更小数字的新方程,直到它们最终简化为第二个定理(注意没有 r 项),从而确定两个数字的 GCD。

例如,求 gcd(72,15)

72 = 15 * 4 + 12

根据定理 1,gcd(72,15) = gcd(15,12)。为了举例说明,我们假设我们不知道 gcd(15, 12)。由于 gcd(…) 可以表示为方程,反之亦然,而我们的目标是最终得到形式为 a = bt 的方程,让我们尝试将 gcd(15, 12) 表示为两个更小数字的 GCD,同时得到一个更小的方程。在这个方程中,a = 72,b = 15,r = 12,即 72/15 的余数。简化

15 = 12 * 1 + 3, since  gcd(15,12) = gcd(12,3) 

请注意,在这个方程中 a = 15,它在前一个方程中是 b 的值;b = 12,它在前一个方程中是 r 的值;r = 3,即 15/12 的余数)。

12 = 3* 4, since r is now 0, Euclid’s Algorithm finishes

因此,根据定理 2,gcd(72, 15) = 3。

我们在将一个方程简化为另一个方程时注意到几个观察结果

  • 新方程中的 a = 前一个方程中的 b
  • 新方程中的 b = 前一个方程中的 r
  • 新方程中的 r = 新 a 和新 b 的余数
  • 如果新方程中的 r 为 0,则 GCD 为新的 b。如果新方程中的 r 不为 0,则重复。

我们编写欧几里得算法

Prompt A,B
remainder(A,B)->R
Repeat R=0
B->A
R->B
remainder(A,B)->R
End
Disp "THE GCD IS",B       (we can shorten two Disps into one by separating the messages with a comma)

或者,我们也可以编写一个稍微长一些的版本,同样有效

Prompt A,B
remainder(A,B)->R
While 1
If R=0
Then
Disp "THE GCD IS",B
Stop
Else
B->A
R->B
remainder(A,B)->R
End
End

数学问题 6:求内切圆半径

例如,内切圆是内接于三角形的圆。如果用户输入的三角形边长为 3,4,5,我们的程序将显示 1。

虽然这个问题比算法问题更具数学性,但它是使用优雅和简洁而非蛮力力量的一个很好的例子。计算器是一个工具,一个助手,其有用性取决于其人类用户选择的策略。解决这个问题有很多方法,但让我们选择一种可以最大限度地减少代码量的方法。

abc 为三角形的边。设 r 为内切圆的半径。

由于内切圆与 abc 相切,因此它与每条边形成 90 度角。因此,三角形的面积为 ar/2 + br/2 + cr/2。根据海伦公式,三角形的面积也为 \(\sqrt{(s(s-a)(s-b)(s-c))}\),其中 s 是三角形的半周长,(a+b+c)/2。将计算三角形面积的两个表达式相等,我们得到

sqrt(s(s-a)(s-b)(s-c)) = ar/2 + br/2 + cr/2    (please use the square root symbol instead of typing sqrt)
                       = r(a+b+c) / 2
                       = sr
                     r = sqrt(s(s-a)(s-b)(s-c)) / s

让我们将其编写成代码

Prompt A,B,C
(A+B+C)/2->S
sqrt((S(S-A)(S-B)(S-C)))/S->R     (please use the square root symbol instead of typing sqrt)
Disp "THE INCIRCLE’S RADIUS IS",R

总结

我们通过编程解决了六个数学问题!击掌!我希望这篇文章能让您更好地理解 TI-83 / TI-84 的一些编程功能。虽然我们完全专注于代数,但您也可以创建程序来解决微积分、概率、线性代数等问题。

感谢您的阅读。如果您有任何反馈,请在下方留言。

延伸阅读

© . All rights reserved.