BASIC 叫用 BASIC
Ching-Tang Tseng
Hamilton, New Zealand
16 December 2018
http://forthfornight.blogspot.com
先貼示程式再進行解說:
8 integers D N L I S T P count
: test
basic
10 let p = 0
20 let N = T
30 let D = N mod 2
40 if D = 0 then 220
50 let D = N mod 3
60 if D = 0 then 220
70 let L = sqrt ( N ) + 1
80 for I = 6 to L step 6
90 let D = N mod ( I - 1 )
100 if D = 0 then 210
110 let D = N mod ( I + 1 )
120 if D = 0 then 210
130 next I
140 let P = 1
150 goto 300
210 run 2drop
220 let P = 0
300 end
;
\ testing is started from 8, jump over 2, 3, 5, 7.
: main
basic
10 print " Input a specified number S =
"
20 inputi S
30 let count = 4
40 let T = 8
130 run test
140 if P = 1 then 160
150 goto 180
160 let count = count + 1
170 if count = S then 210
180 let T = T + 1
190 goto -130
210 print N
220 end
;
main
Input a specified number S =
? 6
13 OK
main
Input a specified number S =
? 101
547 OK
main
Input a specified number S =
? 1001
7927 OK
main
Input a specified number S =
? 10001
104743 OK
main
Input a specified number S =
? 100001
1299721 OK
main
Input a specified number S =
? 1000001
15485867 OK
此前,本網頁經常貼示的展示程式,大部份都是只須單一個 BASIC
型式的程式就能完成的成果‧
這一次,換個方式,使用一個 BASIC
型式的程式 ,直接叫用另個 BASIC 型式的程式,展示求解問題的方法‧
問題很簡單: 第幾個質數是多少?
舉例而言,質數的序列是這樣的: 2,
3, 5, 7, 11, 13, 17, 19…等等,.
我們稱第5個質數是11,那麼,第一百萬零一個質數,應該是多少?
這種問題,不用費腦筋去想了,非用程式來解不可,上列展示就是我寫的程式‧
質數問題在電腦程式界出現時,通常都以不要錢的方式,當作公益軟體,提供大家使用與參考‧我也不例外,它不能用來賺錢,卻對世人有益‧
拿質數來問問題,也變化多端,列出所有的質數可以當問題,列出一段數字區間的質數也可以當問題,一個數字是不是質數?也能當問題,甚至於拿一堆質數任意炒作後問結果,也都能夠拿來當問題‧
這幾十年來,我寫過也收集過無數與質數問題有關的程式了,網上也有無數的資訊探討質數的問題‧
我還曾發現美國田納西大學把32位元以下能表示的質數,拿來建表,當作可被搜索獲得的參考資料‧這樣的資源,有點像早年大家使用之三角函數的函數表,是個早已不再需要的東西‧印成大本的書,就浪費了大量的紙張,貼進大量的網頁,也浪費了龐大的網上資源空間‧
有感於此,我在設計這個展示程式時,花費了一點心思,採用不建質數表的方式達到目的‧不管你問第幾個質數,都不查表,直接算出來‧
上列名為test 的程式,實際上是一個原本我就發展完成後庫存起來留用的程式,原來的用途只做判斷一個任意輸入的數字是不是質數?列用在此處時,它的執行結果,簡單修正為若是質數,就把變數 P 的內容設定為 1,否則為 0 .
第二個主程式 main 則以簡單清楚的流程,顯示了找到指定質數的方法,這樣寫程式,實在不需要再進行細部的解說了,程式放它50年,到時,我仍然能夠輕鬆的看懂‧
展示程式時,小小群聚的程式,前後分開一列,就能更清楚地看懂彼此的關係,也讓能夠任意GOTO指令的功能呈現自然的規矩‧
能夠使用 BASIC 叫用 BASIC的特殊性能,化解了BASIC 程式語言曾被大家詬病為麵條式規格的缺點‧
最後,必須強調的是,我若不說,大家必定很難理解,這樣的BASIC 式性能,程式的流程,在許多地方都任意穿透了結構性邊界,系統卻還能夠正常執行,不用FORTH來設計,確實很難實現‧