107年身心障礙人員四等程式設計概要

二、如果 A, B 都是大小為 M×N 的二維陣列,其元素資料型態均為 double,且假設陣列 A 已經有完整的資料。今欲依據 A 求得 B,使得 B[i][j] 成為在陣列 A 中以 A [i][j] 為中心的3×3個數的平均值 ( B[i][j] 位於邊界時,仍是以 A[i][j] 為中心的3×3個數的平均值,惟超出陣列的部分皆以0取代,即 B[0][0], B[0][N-1], B[M-1][0], B[M-1][N-1] 2×2個數的平均值;B[0][j], B[M-1][j] 2×3個數的平均值, 0 < j < N-1B[i][0], B[i][N-1] 3×2個數的平均值, 0 < i < M-1)。無論採用 C/C++ Java 撰寫程式,都可以用下列程式片段達成任務。請為每一空白處填入一運算式 (Expression) 完成該程式片段。作答時須完整寫出此程式片段,並於填空處加底線標示,且不能更改此程式片段。(25分)

B[0][0] = _____________________________;

B[0][N-1] = _____________________________ ;

B[M-1][0] = _____________________________;

B[M-1][N-1] = _____________________________;

for (int j = 1; ___________; j++)

{

B[0][j] = _____________________________;

B[M - 1][j] = _____________________________;

}

for (int i = 1; ___________ ; i++)

{

B[i][0] = _____________________________;

B[i][N-1] = _____________________________;

}

for (int i = 1; ___________; i++)

for (int j = 1; ___________; j++)

B[i][j] = _____________________________;

#include <iostream>

#include <vector>

using namespace std;

int main( ) {

    const int M = 3;

    const int N = 4;

    double A[M][N] = {

        {1, 2, 3, 4},

        {5, 6, 7, 8},

        {9, 10, 11, 12},

    };

    double B[M][N] = {0};

    B[0][0] = (A[0][0] + A[0][1] + A[1][0] + A[1][1]) / 4;

    B[0][N - 1] = (A[0][N - 2] + A[0][N - 1] + A[1][N - 2] + A[1][N - 1]) / 4;

    B[M - 1][0] = (A[M - 2][0] + A[M - 2][1] + A[M - 1][0] + A[M - 1][1]) / 4;

    B[M - 1][N - 1] = (A[M - 2][N - 2] + A[M - 2][N - 1] + A[M - 1][N - 2] +

        A[M - 1][N - 1]) / 4;

    for (int j = 1; j < N - 1; j++) {

        B[0][j] = (A[0][j - 1] + A[0][j] + A[0][j + 1] + A[1][j - 1] +

            A[1][j] + A[1][j + 1]) / 6;

        B[M - 1][j] = (A[M - 2][j - 1] + A[M - 2][j] + A[M - 2][j + 1] +

            A[M - 1][j - 1] + A[M - 1][j] + A[M - 1][j + 1]) / 6;

    }

    for (int i = 1; i < M - 1; i++) {

        B[i][0] = (A[i - 1][0] + A[i][0] + A[i + 1][0] + A[i - 1][1] +

            A[i][1] + A[i + 1][1]) / 6;

        B[i][N - 1] = (A[i - 1][N - 2] + A[i][N - 2] + A[i + 1][N - 2] +

            A[i - 1][N - 1] + A[i][N - 1] + A[i + 1][N - 1]) / 6;

    }

    for (int i = 1; i < M - 1; i++) {

        for (int j = 1; j < N - 1; j++) {

            B[i][j] = (A[i - 1][j - 1] + A[i - 1][j] + A[i - 1][j + 1] +

                A[i][j - 1] + A[i][j] + A[i][j + 1] + A[i + 1][j - 1] +

                A[i + 1][j] + A[i + 1][j + 1]) / 9;

        }

    }

    cout << "二維陣列 B" << endl;

    for (int i = 0; i < M; i++) {

        for (int j = 0; j < N; j++)

            cout << B[i][j] << " ";

        cout << endl;

    }

    return 0;

}

執行結果:

二維陣列 B

3.5 4 5 5.5

5.5 6 7 7.5

7.5 8 9 9.5

說明:

陣列A

 

0

1

2 (N-2)

3 (N-1)

0

1

2

3

4

1 (M-2)

5

6

7

8

2 (M-1)

9

10

11

12

1.主要目的是對一個給定的二維陣列 (稱為 A) 進行操作,以生成另一個新的二維陣列 (稱為 B)。新陣列 B 中的每個元素都是根據原陣列 A 中的相應元素計算出來的。

2.計算過程:

  (1)對於陣列 A 中的每個元素都會找到包含這個元素和其周圍的元素的一個3×3子陣列。然後,將這個子陣列中所有的元素加起來,再除以這個子陣列中的元素個數,得到一個平均值。將這個平均值儲存在陣列 B 中相對應的位置。

  (2)但是,對於陣列 A 中靠近邊緣的元素,不能得到一個完整的3×3子陣列,因為一部分會超出陣列的範圍。在這種情況下,將超出範圍的元素視為0

  (3)最後,會得到一個新的陣列 B,其中每個元素都是原陣列 A 中相應位置的子陣列的平均值。

3.範例:

  B[0][0] = (1+2+5+6) / 4 = 14/4 = 3.5

  B[0][1] = (1+2+3+5+6+7) / 6 = 24/6 = 4

  B[0][2] = (2+3+4+6+7+8) / 6 = 30 / 6 = 5

  B[0][3] = (3+4+7+8) / 4 = 22 / 4 = 5.5

  ...

  B[1][1] = (1+2+3+5+6+7+9+10+11) / 9 = 54/9 = 6

  ...

arrow
arrow
    創作者介紹
    創作者 jacksaleok 的頭像
    jacksaleok

    國考資訊處理工作室(高考二級資訊處理/高考三級資訊處理/調查局三等/關務人員三等/地方特考三等)

    jacksaleok 發表在 痞客邦 留言(0) 人氣()