---
# System prepended metadata

title: 商用程式設計期末考

---

# 商用程式設計期末考

## 執行
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
