2019年1月15日 星期二

因數分解美國總統


因數分解美國總統


Ching-Tang Tseng
Hamilton, New Zealand
16 January 2019
ilikeforth@gmail.com

這是一個展示能從傳統 FORTH 程式叫用 BASIC 式程式的精簡範例‧

題目很簡單:就是把英文字串的碼加總起來,當作該字串的特徵值‧然後,將此值進行澈底地因數分解,最後,列印出以全部質數連乘方式表示的結果‧

提供程式所需資料的來源,採用易於取得的歷任美國總統姓名作為輸入字串‧第 0 筆資料則故意安排為本文作者的姓名‧

為了顯示 FORTH 程式語言的傳承效果,本文刻意採用 35 年前(1983)古聖先賢 Martin Tracy 在其設計之 APPLE II MicroMotion FORTH-79 系統中的創作,來設計字串陣列的結構‧這樣的資料結構,照樣能適用於 35 年後今天正在使用中的 64 位元 Lina64 系統,此一特性凸顯出傳承效果的可貴‧資料結構的設計方法不是僅此一種,採用這樣的設計,純粹只是為了程式使用時很方便所做的選擇‧

由於提供程式使用的資料量有 46 筆,數量稍嫌過大,因此,將資料結構的宣告程式,以及全部輸入的字串資料,安排在另一個提供資料來源的 MartinTracyString.f 檔案中形成‧

從 factorize.f 主程式的內容中可以看得出來,BASIC 式程式的語法,有利於設計數學計算程式,但不利於設計字串輸出方面的程式‧因此,這部份的功能缺陷,仍然需要使用傳統 FORTH 的格式設計程式,然後,再在 BASIC 式程式中,強行利用 RUN 指令來執行 FORTH 指令,以達到彌補功能缺陷目的‧有些答案尾端帶有 * 1 的結果,那是為了美化輸出所做的例外安排‧

原始程式是全用傳統 FORTH 設計的‧原本執行因數分解的部分,由於閱讀困難,不易追蹤,因此,重新改寫成以 BASIC 方式執行的程式,程式便可一目了然‧後續主程式的部分,則完全不需改寫,也是其特色‧


1.      主程式 factorize.f


\ Designer: Ching-Tang Tseng
\ Date: 20190116, Hamilton, New Zealand

FLOAD MartinTracyString.f

VARIABLE LUCKY

5 integers N D P Q R

: FACTORIZE ( n -- )
  [[ N ]] !
  BASIC
\ 10 print " Enter integer number to be factorized "
\ 20 inputi N
30 print " " ; N ; " = "

\ Test if multiple of 2
40 let R = 2
50 let D = N mod R
60 if D = 0 then 80
70 goto 110
80 run R . ." * "
90 let N = N / R
100 goto -50

\ Test if multiple of 3
110 let R = 3
120 let D = N mod R
130 if D = 0 then 150
140 goto 200
150 run R . ." * "
160 let N = N / R
170 goto -120

\ Test of divisors 6P-1 and 6P+1 up to sqr(N)
\ Prime numbers are of the form 6P-1 or 6P+1
200 let Q = sqrt ( N ) + 1
210 for P = 6 to Q step 6

220 let R = P - 1
230 let D = N mod R
240 if D = 0 then 260
250 goto 300
260 run R . ." * "
270 let N = N / R
280 goto -230

300 let R = P + 1
310 let D = N mod R
320 if D = 0 then 340
330 goto 400
340 run R . ." * "
350 let N = N / R
360 goto -310

400 next P

500 if N > 1 then 530
510 run 1 .
520 goto 600
530 run N .

600 end ;

: STRING>PAD>NUMBER  ( addr cnt -- n )
  PAD 80 BLANK
  >R PAD R@ CMOVE
  0
  R> 0
  DO PAD I + C@
     DUP 32 =
         IF DROP ELSE + THEN
  LOOP ;

: MAIN ( -- )
  46 0                          \ 46 is adjustable
  DO
    I USP STRING>PAD>NUMBER LUCKY !
    CR ." ( " I . ." ) " I USP TYPE
    LUCKY @ FACTORIZE CR
  LOOP ;

 
2.      提供數據來源的資料程式 MartinTracyString.f


\ String array designed by Martin Tracy
\ APPLE II MicroMotion FORTH-79, Martin Tracy, 1983
\ Modified to fit AMDX86 ciforth 5.3.0 (Lina64), 20190116

: SARRAY ( cnt n -- )   \ cnt characters/array, total n arrays                 
  CREATE 1+ 0                                   ( cnt n -- )
  DO DUP C, 0 C, DUP ALLOT LOOP DROP
  DOES> DUP C@ 2 + ROT * + 1+ COUNT ;           ( n -- addr cnt )

: S! ( addr1 cnt1 addr2 cnt2 -- )                  
  DROP DUP 2 - C@
  ROT MIN >R DUP 1- R@ SWAP C! R> CMOVE ;

80 100 SARRAY USP

\ 0
S" Ching Tang Tseng"         0 USP S!

\ 1
S" George Washington"        1 USP S!

\ 2
S" John Adams"               2 USP S!

\ 3
S" Thomas Jefferson"         3 USP S!

\ 4
S" James Madison"            4 USP S!

\ 5
S" James Monroe"             5 USP S!

\ 6
S" John Quincy Adams"        6 USP S!

\ 7
S" Andrew Jackson"           7 USP S!

\ 8
S" Martin Van Buren"         8 USP S!

\ 9
S" William Henry Harrison"   9 USP S!

\ 10
S" John Tyler"              10 USP S!

\ 11
S" James K. Polk"           11 USP S!

\ 12
S" Zachary Taylor"          12 USP S!

\ 13
S" Millard Fillmore"        13 USP S!

\ 14
S" Franklin Pierce"         14 USP S!

\ 15
S" James Buchanan"          15 USP S!

\ 16
S" Abraham Lincoln"         16 USP S!

\ 17
S" Andrew Johnson"          17 USP S!

\ 18
S" Ulysses S. Grant"        18 USP S!

\ 19
S" Rutherford B. Hayes"     19 USP S!

\ 20
S" James A. Garfield"       20 USP S!

\ 21
S" Chester A. Arthur"       21 USP S!

\ 22
S" Grover Cleveland"        22 USP S!

\ 23
S" Benjamin Harrison"       23 USP S!

\ 24
S" Grover Cleveland"        24 USP S!

\ 25
S" William McKinley"        25 USP S!

\ 26
S" Theodore Roosevelt"      26 USP S!

\ 27
S" William Howard Taft"     27 USP S!

\ 28
S" Woodrow Wilson"          28 USP S!

\ 29
S" Warren G. Harding"       29 USP S!

\ 30
S" Calvin Coolidge"         30 USP S!

\ 31
S" Herbert Hoover"          31 USP S!

\ 32
S" Franklin D. Roosevelt"   32 USP S!

\ 33
S" Harry S. Truman"         33 USP S!

\ 34
S" Dwight D. Eisenhower"    34 USP S!

\ 35
S" John F. Kennedy"         35 USP S!

\ 36
S" Lyndon B. Johnson"       36 USP S!

\ 37
S" Richard Nixon"           37 USP S!

\ 38
S" Gerald Ford"             38 USP S!

\ 39
S" Jimmy Carter"            39 USP S!

\ 40
S" Ronald Reagan"           40 USP S!

\ 41
S" George H. W. Bush"       41 USP S!

\ 42
S" Bill Clinton"            42 USP S!

\ 43
S" George W. Bush"          43 USP S!

\ 44
S" Barack Obama"                   44 USP S!

\ 45
S" Donald John Trump"       45 USP S!

\ 46
S" Joe Biden"                     46 USP S!

3.      執行結果


ching@center:~$ cd lina64
ching@center:~/lina64$ ./f

AMDX86 ciforth 5.3.0
fload factorize.f
n : ISN'T UNIQUE                                               
D : ISN'T UNIQUE                                               
p : ISN'T UNIQUE                                                
 OK
main

( 0 ) Ching Tang Tseng
1396 = 2 * 2 * 349

( 1 ) George Washington
1659 = 3 * 7 * 79

( 2 ) John Adams
885 = 3 * 5 * 59

( 3 ) Thomas Jefferson
1550 = 2 * 5 * 5 * 31

( 4 ) James Madison
1211 = 7 * 173

( 5 ) James Monroe
1120 = 2 * 2 * 2 * 2 * 2 * 5 * 7 * 1

( 6 ) John Quincy Adams
1518 = 2 * 3 * 11 * 23

( 7 ) Andrew Jackson
1322 = 2 * 661

( 8 ) Martin Van Buren
1420 = 2 * 2 * 5 * 71

( 9 ) William Henry Harrison
2075 = 5 * 5 * 83

( 10 ) John Tyler
927 = 3 * 3 * 103

( 11 ) James K. Polk
1023 = 3 * 11 * 31

( 12 ) Zachary Taylor
1357 = 23 * 59

( 13 ) Millard Fillmore
1535 = 5 * 307

( 14 ) Franklin Pierce
1421 = 7 * 7 * 29 * 1

( 15 ) James Buchanan
1296 = 2 * 2 * 2 * 2 * 3 * 3 * 3 * 3 * 1

( 16 ) Abraham Lincoln
1403 = 23 * 61

( 17 ) Andrew Johnson
1344 = 2 * 2 * 2 * 2 * 2 * 2 * 3 * 7 * 1

( 18 ) Ulysses S. Grant
1397 = 11 * 127

( 19 ) Rutherford B. Hayes
1679 = 23 * 73

( 20 ) James A. Garfield
1405 = 5 * 281

( 21 ) Chester A. Arthur
1459 = 1459

( 22 ) Grover Cleveland
1539 = 3 * 3 * 3 * 3 * 19

( 23 ) Benjamin Harrison
1642 = 2 * 821

( 24 ) Grover Cleveland
1539 = 3 * 3 * 3 * 3 * 19

( 25 ) William McKinley
1515 = 3 * 5 * 101

( 26 ) Theodore Roosevelt
1789 = 1789

( 27 ) William Howard Taft
1731 = 3 * 577

( 28 ) Woodrow Wilson
1389 = 3 * 463

( 29 ) Warren G. Harding
1441 = 11 * 131

( 30 ) Calvin Coolidge
1411 = 17 * 83

( 31 ) Herbert Hoover
1343 = 17 * 79

( 32 ) Franklin D. Roosevelt
1898 = 2 * 13 * 73

( 33 ) Harry S. Truman
1278 = 2 * 3 * 3 * 71

( 34 ) Dwight D. Eisenhower
1778 = 2 * 7 * 127

( 35 ) John F. Kennedy
1233 = 3 * 3 * 137

( 36 ) Lyndon B. Johnson
1475 = 5 * 5 * 59

( 37 ) Richard Nixon
1225 = 5 * 5 * 7 * 7 * 1

( 38 ) Gerald Ford
986 = 2 * 17 * 29

( 39 ) Jimmy Carter
1127 = 7 * 7 * 23 * 1

( 40 ) Ronald Reagan
1198 = 2 * 599

( 41 ) George H. W. Bush
1254 = 2 * 3 * 11 * 19

( 42 ) Bill Clinton
1114 = 2 * 557

( 43 ) George W. Bush
1136 = 2 * 2 * 2 * 2 * 71

( 44 ) Barack Obama
1060 = 2 * 2 * 5 * 53

( 45 ) Donald John Trump
1529 = 11 * 139

(46) Joe Biden
768 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 3 * 1 
 OK



2019年1月1日 星期二

組合語言在電腦中產生機器碼的程序




組合語言在電腦中產生機器碼的程序



Ching-Tang Tseng
Hamilton, New Zealand
1 January 2019
ilikeforth@gmail.com






中英文名詞對照參考:



組合語言檔案: Assembly language file

組譯器:Assembler

目的檔:Object file

連結器:Linker

可執行檔: Executable file

靜態庫存檔:Static library file

動態庫存檔:Dynamic library file

機器程式碼:Machine code



2019元旦賀卡:








我的個人網訊資料總整理:




貼圖且可供線上討論的網頁,進入後點選正中央上方的 blog,便可參訪已貼圖片。

https://youaregood0.wixsite.com/website/blog


極座標繪圖原理說明網頁

https://how-are-we.webnode.tw/


ABC FORTH codes 貼文網頁

https://abcforth.page.tl/


我的第一個 Bloggger 網頁:FORTH:慶的世界

http://forthfortnight.blogspot.com/


我的第二個 Blogger 網頁:Jingle

https://jinglezola.blogspot.com/


\\\\\\\\\\\\\\\\\\\\


skype帳號:曾慶潭ChingTangTseng

https://web.skype.com/en/


Twitter帳號:CT Tseng

https://twitter.com/


FaceBook帳號:曾慶潭

https://www.facebook.com/home.php


\\\\\\\\\\\\\\\\\\\\\\


我的信箱:

ilikeforth@gmail.com

zolajingle@gmail.com

chingtangt@yahoo.com.tw

youaregood@mail.com


\\\\\\\\\\\\\\\\\\\\\\



轉貼文章:


台大教授顏元叔的演講:

被西方和日本欺壓了50年的中華民族,是強國重要呢還是自由民主重要?

打開天窗說亮話,中國的前途不在台灣(什麼叫做“台灣經驗”?可笑!),中國的前途不在港澳,不在海外華人,不在舔洋人後跟的學運民運小醜,中國的前途在中國大陸,在那13億心含“鴉片戰爭”之恥,心含“八年抗戰”之恨的中國人身上!

他們衣衫襤褸地制造出原子彈、氫彈、中子彈,他們蹲茅坑卻射出長征火箭和載人飛船,他們以捏泥巴的雙手舉破世界紀錄,他們磨破屁股奪回整打的奧運金牌,他們重建唐山成為得到聯合國頒獎的世界模範市……同胞們,他們為的是什麼?沒有別的:他們愛我“中華”,他們不能讓“中華”再隕落!

為什麼美國人那麼愛美國,為什麼日本人那麼愛日本,為什麼有些走向“世界公民”(可笑的癡夢!)的中國人就不愛中國?

愛我中華,不再只是口號,不再只是情緒,而是要像大陸50年來,苦心孤詣、胼手胝足地幹,不僅流汗甚至流血地幹、幹、幹!把大慶油田打出來,把北大荒墾出來,把葛洲壩、攔江堰築起來……難以屈指的各種建設,無數的建設,把中國建設起來,這才是愛中國!

中國已經被熱愛了50年;她將繼續被熱愛,被那群建國者,真正的建國者,所熱愛著,我手邊這部大陸編《新英漢辭典》,這部大陸版《辭源》,編得如此周全,印制如此精致,細小的鉛字用放大鏡看都劃劃清晰,而且從來沒有看到一個錯字:我為他們的心血表現而發抖;而我們台灣,50年來,有哪一部英漢辭典不是翻譯、剪貼、日作的!(慚愧哪、台灣經驗!)。

他們一輩子吃了兩輩子的苦

大陸上的人說,他們一輩子吃了兩輩子的苦。痛心的話,令人傷悲,卻也是一句令人肅然起敬的話。試問:不是一輩子吃兩輩子的苦,一輩子怎得兩輩子甚至三輩子四輩子的成就?50年前中國落後西方百年,50年後還落後10年20年(基礎科學若干部門已與西方比肩,甚至超前)。這不是一輩子吃兩輩子苦成就的? 50年前中國參加奧運亦總是扛著零蛋回,50年後中國的奧運成績已經揚名世界。誰敢再說中國人是“東亞病夫”?這就是“吃兩輩子苦”的成就!

我的老同學傅孝先留在大陸的姐姐,是搞化學研究的高級科學家,52歲就死了,是活活地給研究工作累死的!累死,多值得的死ㄚ!她不累死,千千萬萬的她與他們不累死,中國科學怎麼能迎頭趕上西方?中國的科研怎麼能出人頭地?“革命不是請客吃飯”,建設文明打造科教也是要死人的!尤其是要“超英趕美”搞建設;而不“超英趕美”,永遠跟在英美之後吃英美屁,中華怎麼振興、怎麼出頭? 所以50年來,中國大陸是“煉獄”。什麼是煉獄?就是經過火的洗禮,能夠升入天堂。

過了50年的苦難

中國過了50年的“煉獄”苦難,是過有提升功能的苦難,是過有建設性的苦難,是追求成就的苦難。 就像你要考上台大而一年不看電影的苦難,程度不同,性質則一。吃得苦中苦,方為人上人。苦出頭來的中國人,如今在人類中已經嶄露頭角了。所以50年的苦難不是負面的、消極的、毀滅性的;它是中國的大蛻變,政治蛻變、社會蛻變、精神蛻變(現在的中國人不再是“差不多先生”,而是競泳則爭半掌之長,射衛星不出毛病的“精準先生”了)。

我們在台灣,僥幸也不僥幸地躲過了這場“煉獄”的煎熬,50年隔岸觀火躲過了這場火的洗禮。就個人的福利言,我們是幸運者;就重建民族國家的責任言,我們是十足的逃兵!我們就像肢體殘障者站在路邊,看著一隊隊的男女好漢走上戰場,看著他們的屍體被抬回來,或者看著他們流血呻吟地爬回來,裹好創傷又沖上去。我們呢,隔岸觀火;而他們呢?他們拼搏,他們打仗,他們打的是我們的仗,打的是150年來的民族復興之仗,打的是為全體中國人爭一口氣的仗!而我們呢?我們還在訕笑他們的廁所沒有門,訕笑他們的所得低,甚至視他們為仇敵!我們究竟是什麼?是一群沒有良心的市儈?還是一群沒有人性的畜牲?

“中國之光”中國人共用

然而一個民族國家的羞辱,像霧一般落下來,中國人誰也無可取捨,你非承受不可(就算你入了美國籍,認同美國,為美國去中東作戰;你若戰死,你的仆告中仍然是“美籍華人”,而不會像別人一樣成為“美國人”)! 何必騙自己啊,昨日今日以及今後的三五萬日子裡,民族主義還都是當令的食品,不認同自己的民族只有做異族之奴。同理,一個民族國家的榮譽,也是無可取捨,它會像太陽一樣,你非被照射到不可。中國今後的光榮、苦盡甘來的光榮,你是無法拒絕而非接受一份不可,連反中國的中國人也將同浴于中國的光輝中!這就是說,我們在台灣的中國人管你是台獨、獨台、或統派、或無黨無派,一旦生為中國人,今後你將分得一份“中國之光”。

雖然我們沒有為這“中國之光”的誕生做出什麼貢獻;無功受祿,我們實在太僥幸了!僥幸之餘,我們至少要“吃果子拜樹頭”吧?總不能吃了果子,又對那棵樹冷嘲熱諷或視之為敵吧。這是什麼樣的一種肥心症、象皮病?

中國的問題很複雜,其實也很簡單,簡單得只有一個字:幹、幹、幹!多加三個字:苦幹、實幹、硬幹。因為中國缺乏的就是成就,要成就只有幹。幹、說來容易做來難。個人想幹、個人有惰性;團體想幹、團體會渙散。這時候,你自己擺脫不了惰性,就得有人鞭笞你;團體反側於渙散,就得有人嚴加管束。其實,就像你考大學,你自己督促不了自己,就得有師長有父母在後面鞭策,甚至補習班鞭策也是應該的,假使你想考上大學,而考上大學就是一切!就中國言,建設國家就是一切!於是,在中國的問題上,你就知道為什麼有集體主義之必要、社會主義之必要、權威專制之必要!

當然,假使中國有一萬年的悠閑時間來完成它的現代化,那麼一切慢慢來,隨各人今天做一點明天做一點,一萬年做不成,十萬年總可以做成吧。

可是,中國原已落後,而這是一個競爭白熱化的世界,我們哪能悠閑呢?我們不僅要快,而且要比別人快;不快不足以競爭,不比別人快不足以超速度迎頭趕上,而這就更顯出專制、集體、極權之必要!因為,只有這種精神,這種體制,才能團結一切的人,團結一切的意志,一切的力量,眾志成城,萬眾一心,處處攻關,力成大業。

就算是西方人笑諷中國人是“藍螞蟻”, 中國人為建國卻也必須要做“藍螞蟻”,必須是千千萬萬的藍螞蟻,像螞蟻一般單純一致,才能造就出比我們個人大千千萬萬倍的大堤壩。再造中華,必須是每個人捐棄一己之見,乃至捐棄一己之身,為的是中國這個大堤壩的建成。

要講求個人意志,要講求個人欲望,個人利害,必然是蟻群四下潰散,永遠建不成任何東西!而中國就是要建設,要成就;這就是此刻的中國!

我膽敢高呼:反民主!反自由!反西方民主!反西方自由!

抽象地說,自由民主絕非絕對之善;而落實在歷史的流程中,對此時此地的中國,它們絕對是相對之“惡”!因為,自由只會使中國渙散,民主只會使中國崩潰。有人也許會譏笑:中國人為何如何可憐,竟然承受不了自由民主之“福”!

我要反問以這種西方價值為價值的人:自由有什麼了不起!民主又好在哪裏!日本、德國的稱雄,是它們的民主自由超過英、美?英國如今衰微了,是它的自由衰微?民主衰微?美國今日超強,是它的自由超強?民主超強?而美國的自由民主擴散開來,正好變成美帝國主義的原動力!

不是煙草資本家有剝削的自由,台灣怎麼會變成美煙的垃圾場?“鴉片戰爭”還不是一個君主立憲篤信基督的英國做出來的“撒旦之戰”!而最重要的關鍵是:這些東西對中國有什麼好處?

曾經有學生問我:老師,中國民主重要還是強大重要? 我說:廢話,當然強大重要。

中國若不強大,而中國自由民主了,中國可沒有什麼東西可以保證,中國不還是清末民初一樣的中國、不還是次殖民地的中國、不還是“華人與狗不得入內”的中國!所以,中國人必須以一條褲帶束緊千萬億腰杆,中國人才得以自中國近代史中解放!自列強的囹圄桎梏中解放!中國才得以復興強大!

拿破侖早已叮囑西方世界,“讓這條龍睡吧,他一醒來,西方世界就麻煩了。”

西方人早已充分了解這13億“藍螞蟻”眾志成城的可怕,於是他們用“自由民主”的口號,不擇一切手段的分化、打散、切割、制造我們的內在矛盾,讓我們自己互相抵消。一些可憐可鄙亦可悲的蠢才,連這點簡單道理都看不透,一味地接受西方價值,試圖分裂中國,為西方的終極利益服務……讓西方繼續為世界之主,中國為奴,而尚自以為是為了中國好。

我告訴你們:

當西方人對你翹起拇指叫“好”時,你已是一個不折不扣的賣國賊!

除了你們這一小撮豬油蒙心的小醜之外,天下任何聰明人都深知“人不自私,天誅地滅”——民族利益就是我們最大的私;而為國自私,更是西方帝國主義的當行本色,美國人更是如此。

世界已被西方帝國主義dominate(主宰)二三百年,心頭被殖民的洋奴們、台灣的“日本人” 、香港的“英奴”們,難道你們的“婢妾惰性”如此深重,如此安於為奴現況,不想抬頭挺胸當主宰?

中國人要在世界之屋脊上

強大自主的中國這條路,中國會勇往直前的繼續走下去!中國已經強大,明日的中國也會更將強大;反省我的愛國情操,似乎濃烈得近乎瘋狂;其實,我只是一個“機會主義者”,只是一個識時務的人而已。歷史大趨勢這麼明明白白地擺在面前,我跟著它走,實在只是大潮流的跟屁蟲。但是,我樂於做這麼個小蟲子,因為今後中國歷史命運的完成,將正也是我一生夢想的實現;如今,我是每天喜孜孜的看著中國,把世界第一的金牌一塊塊摘下……。

PS: 看完這篇好觀念文章, 如您認為很有啟發強國思想, 請您廣傳吧, 祝福您