# 商用程式設計期末考 ## 執行 cobc -x -o hello_world hello_world.cbl ./hello_world ## 期中考 PIC S9(5)V9(4) S為signed 代表有符號數,即為有正負,9(5)代表此變數可以儲存有五位,每一位最大值為9 V代表小數部分,定義為9(4),代表變數可以有小數點後四位的小數,每一位最大值為9 1. 10 2. 17 3. 輸入一個值 4. 安ㄟ 5. 一樣 6. 一樣 7. grace hopper 8. ## 期末考 ### 黃金比例 2001. https://youtu.be/JKWQRgXZGj4 ``` IDENTIFICATION DIVISION. * 標示部分開始,用於定義程式的元數據(metadata) PROGRAM-ID. YOUR-PROGRAM-NAME. * 定義程式名稱 DATA DIVISION. * 定義變量和資料結構 FILE SECTION. * 定義檔案相關的數據結構(此程式中未使用) WORKING-STORAGE SECTION. * 工作存儲部分,用於定義程式中使用的臨時變量 01 fn PIC 9(8)V9(2) value 1. 01 fnn PIC 9(8)V9(2) value 1. 01 reg PIC 9(8)V9(2). 01 ratio PIC 9(1)V9(7). 01 N PIC 9(2). PROCEDURE DIVISION. * 定義程式的邏輯 MAIN-PROCEDURE. * 主程序名稱 PERFORM VARYING N FROM 0 BY 1 UNTIL N > 18 compute reg = fnn compute fnn = fnn + fn compute fn = reg compute ratio = fnn / fn display "ratio is ",ratio END-PERFORM STOP RUN. * 終止程序運行 END PROGRAM YOUR-PROGRAM-NAME. * 結束程式定義 ``` ### 海龍公式 2002. https://youtu.be/nZAJfGH58uU ```IDENTIFICATION DIVISION. * 標示部分開始,用於定義程式的元數據(metadata) PROGRAM-ID. YOUR-PROGRAM-NAME. * 定義程式名稱 DATA DIVISION. * 定義變量和資料結構 FILE SECTION. * 定義檔案相關的數據結構(此程式中未使用) WORKING-STORAGE SECTION. * 工作存儲部分,用於定義程式中使用的臨時變量 *宣告三角形的三邊長 01 a PIC 9(3)V9(2). 01 b PIC 9(3)V9(2). 01 c PIC 9(3)V9(2). 01 s PIC 9(3)V9(3). *面積變數 01 tri_area PIC 9(7)V9(5). PROCEDURE DIVISION. * 定義程式的邏輯 MAIN-PROCEDURE. * 主程序名稱 display "input a" accept a. display "input b" accept b. display "input c" accept c. compute s = (a+b+c)/2 compute tri_area = (s*(s - a)*(s - b)*(s - c))**0.5. *輸出最終結果 display "Area is "tri_area STOP RUN. * 終止程序運行 END PROGRAM YOUR-PROGRAM-NAME. * 結束程式定義 ``` ### 讀取資料 2003. https://youtu.be/l-QLkcPx0x4 ```****************************************************************** * Author: 109810022 陳勁旗 * School:TAIPEI TECH * 讀 LINE 的文字檔, 在 bin 目錄下 * 109810022 陳勁旗 HOMEWORK 2 ****************************************************************** *這是一個COBOL程式,用於讀取一個名為"READ.txt"的文字檔,搜索文件中包含"HOMEWORK"的行,然後顯示這些行的行號和內容。 IDENTIFICATION DIVISION. *定義了程式的身份信息,包括作者、主題等 PROGRAM-ID. YOUR-PROGRAM-NAME. *定義了程式的環境,包括文件控制區段 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. *定義了文件控制區段,指定了要操作的文件,這裡的文件名為"READ.txt"。 FILE-CONTROL. SELECT Student ASSIGN TO "READ.txt" * ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD Student. *FD=File Description 告訴程式如何處理文件 *定義檔案的描述==這個程式碼叫學生 *把Read.txt導入Student 01 TAKE_X PIC X(132). *01=最高權限 *X=文字 *定義了一個變數 TAKE_X,用來存儲讀取的每行文本,它最多可以包含132個字符 01 CIX PIC 9(3) VALUE 12. *9=數字 *CIX初始值為12 01 TEST_STR PIC X(132). *定義了一個變數 TEST_STR,用來存儲讀取的每行文本,與 TAKE_X 一樣,最多可以包含132個字符。 01 COUNTER PIC 9(2). *定義了一個變數 COUNTER,用來計數該行有"109810022"的個數。 01 COUNTER2 PIC 9(2) PROCEDURE DIVISION. *開始程式 Begin. DISPLAY CIX"Searching..." OPEN INPUT Student *打開文件以供讀取 READ Student AT END MOVE HIGH-VALUES TO TAKE_X END-READ *開始讀取文件,如果讀取到文件結尾,則將 HIGH-VALUES 移動到 TAKE_X,表示讀取結束。 PERFORM UNTIL TAKE_X = HIGH-VALUES *當TAKE_X = HIGH-VALUES時,結束迴圈。 MOVE TAKE_X TO TEST_STR *複製 TAKE_X 的內容到 TEST_STR 中 MOVE ZERO TO COUNTER *初始化 COUNTER 變數為0(計數功能) INSPECT TEST_STR TALLYING COUNTER FOR ALL "109810022" *使用 INSPECT 來計數 TEST_STR(一行) 中包含多少次"109810022",結果存儲在 COUNTER 中 IF COUNTER >0 *如果 COUNTER 大於0,表示行中包含"HOMEWORK DISPLAY CIX" "TEST_STR END-IF *結束if READ Student AT END MOVE HIGH-VALUES TO TAKE_X *繼續讀取下一行,如果到達文件結尾,則結束循環 END-READ END-PERFORM CLOSE Student *關閉文件 STOP RUN. ``` ### 其他的答案 PIC X(8) --> 一個字元 PIC 9(7) --> 數字有7位 修改第37行 10001-->109810022(自己的學號) 程式題 WS-A(3) 12345678 WS-C(3,1) 345 費氏 ``` IDENTIFICATION DIVISION. PROGRAM-ID. NUMBER-PROCESSOR. DATA DIVISION. WORKING-STORAGE SECTION. 77 N PIC 9(5). *> 定義 N 為一個5位數。 77 R PIC 9(5). *> 定義 R 為一個5位數。 77 I PIC 99. *> 定義 I 為一個2位數。 77 S PIC 99 VALUE 9. *> 定義 S 為一個2位數,並初始化為9。 77 B PIC 99 VALUE 0. *> 定義 B 為一個2位數,並初始化為0。 77 TOTAL PIC 99 VALUE 0. *> 定義 TOTAL 為一個2位數,並初始化為0。 77 ND PIC 99 VALUE 0. *> 定義 ND 為一個2位數,並初始化為0。 PROCEDURE DIVISION. MP. DISPLAY "ENTER ANY NUMBER:" *> 提示使用者輸入數字。 ACCEPT N. *> 接受輸入值。 PERFORM DP VARYING I FROM 1 BY 1 UNTIL N = 0. *> 使用 DP 程序處理數字直到 N 為 0。 DISPLAY "BIGGEST DIGIT IS:" B. *> 顯示最大的數字。 DISPLAY "NUMBER OF DIGITS:" ND. *> 顯示數字的位數。 DISPLAY "SMALLEST DIGIT IS:" S. *> 顯示最小的數字。 DISPLAY "SUM OF THE DIGITS:" TOTAL. *> 顯示數字的各位數總和。 STOP RUN. DP. DIVIDE N BY 10 GIVING N REMAINDER R. *> 將 N 除以 10,並將餘數存入 R。 COMPUTE TOTAL = TOTAL + R. *> 計算各位數的總和。 COMPUTE ND = ND + 1. *> 計算數字的位數。 DISPLAY "N IS:" N. *> 顯示 N。 DISPLAY "R IS:" R. *> 顯示 R。 DISPLAY "B IS:" B. *> 顯示 B。 DISPLAY "S IS:" B. *> 顯示 S。 DISPLAY "TOTAL IS:" TOTAL. *> 顯示各位數的總和。 DISPLAY "ND IS:" ND. *> 顯示數字的位數。 DISPLAY "-------------------". IF B < R THEN *> 檢查 B 是否小於 R。 MOVE R TO B. *> 如果是,將 R 的值賦給 B。 IF S > R THEN *> 檢查 S 是否大於 R。 MOVE R TO S. *> 如果是,將 R 的值賦給 S。 END PROGRAM NUMBER-PROCESSOR. ``` *output*: ``` ENTER ANY NUMBER: 22 N IS:00002 R IS:00002 B IS:00 S IS:00 TOTAL IS:02 ND IS:01 ------------------- N IS:00000 R IS:00002 B IS:02 S IS:02 TOTAL IS:04 ND IS:02 ------------------- BIGGEST DIGIT IS:02 NUMBER OF DIGITS:02 SMALLEST DIGIT IS:02 SUM OF THE DIGITS:04 ``` 最後一題不可以 密碼:123456