阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 地方政府特種考試_三等_資訊處理:程式設計#94936
科目:程式設計
年份:109年
排序:0

申論題內容

一、請使用 Java、C#、C++或 Python 等物件導向程式語言,建立矩陣相關 運算的系統,系統一共有三個類別,分別為抽象類別 Matrix,實作類別 MatrixMultiply 及 MatrixAdd,其中: 
*抽象類別 Matrix 中所有的變數跟方法皆為 protected,主要包含了: 
  .matrix1, matrix2, resultM 三個實數值二維 matrices 資料 
  .一個抽象的 checkDimension( )方法,用來檢查 matrix1跟 matrix2是 否適合做所指定的運算 
  .一個抽象的 matrixOperation( )方法,用來對 matrix1跟 matrix2進行運算 
  .一個 setMatrix( )方法,可以將所傳入的兩個 matrices 複製到 matrix1, matrix2 
  .改寫物件的 toString( )方法,可以顯示 matrix1, matrix2及 resultM 的 內容 
*類別 MatrixMultiply,繼承類別 Matrix: 
  .實作 Matrix 中的兩個抽象方法,分別可以實現父類別內 matrix1及 matrix2進行乘法時的維度檢查及乘法運算,進行運算前會主動呼叫 checkDimension( ),確定是否可以進行相關運算,如無法運算, resultM 會被設定為 null 並回傳,否則進行運算,結果存於父類別的 resultM 並回傳 
  .一個空建構子及一個可以接受兩個二維 matrices 的建構子,建構子中呼叫父類別的 setMatrix( )方法,設定 matrix1及 matrix2(空建構 子會將 matrix1及 matrix2設為 null) 
*類別 MatrixAdd,同 MatrixMultiply,僅實作抽象方法時,是以 matrices 加法為對象,進行維度的檢查及運算

詳解 (共 1 筆)

詳解 提供者:hchungw
使用 Python 建立矩陣運算系統的程式,包括抽象類別 Matrix 以及實作類別 MatrixMultiply 和 MatrixAdd:

        
from abc import ABC, abstractmethod
class Matrix(ABC):
    def __init__(self):
        self._matrix1 = None
        self._matrix2 = None
        self._resultM = None
    def setMatrix(self, matrix1, matrix2):
        self._matrix1 = matrix1
        self._matrix2 = matrix2
    @abstractmethod
    def checkDimension(self):
        pass
    @abstractmethod
    def matrixOperation(self):
        pass
    def __str__(self):
        return (f"Matrix 1:\n{self._matrix1}\n\n"
                f"Matrix 2:\n{self._matrix2}\n\n"
                f"Result Matrix:\n{self._resultM}\n")

class MatrixMultiply(Matrix):
    def __init__(self, matrix1=None, matrix2=None):
        super().__init__()
        if matrix1 is not None and matrix2 is not None:
            self.setMatrix(matrix1, matrix2)
    def checkDimension(self):
        if self._matrix1 is None or self._matrix2 is None:
            return False
        return len(self._matrix1[0]) == len(self._matrix2)
    def matrixOperation(self):
        if not self.checkDimension():
            self._resultM = None
            return None
        
        result_rows = len(self._matrix1)
        result_cols = len(self._matrix2[0])
        self._resultM = [[0 for _ in range(result_cols)] for _ in range(result_rows)]
        
        for i in range(result_rows):
            for j in range(result_cols):
                for k in range(len(self._matrix2)):
                    self._resultM[i][j] += self._matrix1[i][k] * self._matrix2[k][j]
        return self._resultM

class MatrixAdd(Matrix):
    def __init__(self, matrix1=None, matrix2=None):
        super().__init__()
        if matrix1 is not None and matrix2 is not None:
            self.setMatrix(matrix1, matrix2)
    def checkDimension(self):
        if self._matrix1 is None or self._matrix2 is None:
            return False
        return (len(self._matrix1) == len(self._matrix2) and
                len(self._matrix1[0]) == len(self._matrix2[0]))
    def matrixOperation(self):
        if not self.checkDimension():
            self._resultM = None
            return None
        
        rows = len(self._matrix1)
        cols = len(self._matrix1[0])
        self._resultM = [[self._matrix1[i][j] + self._matrix2[i][j] for j in range(cols)] for i in range(rows)]
        return self._resultM
# 測試
if __name__ == "__main__":
    matrix1 = [[1, 2], [3, 4]]
    matrix2 = [[5, 6], [7, 8]]
    matrix3 = [[1, 2], [3, 4], [5, 6]]
    # 測試矩陣乘法
    multiply_test = MatrixMultiply(matrix1, matrix2)
    multiply_test.matrixOperation()
    print(multiply_test)
    # 測試矩陣加法
    add_test = MatrixAdd(matrix1, matrix2)
    add_test.matrixOperation()
    print(add_test)
    # 測試不符合維度的情況
    invalid_multiply_test = MatrixMultiply(matrix1, matrix3)
    invalid_multiply_test.matrixOperation()
    print(invalid_multiply_test)

說明:
抽象類別 Matrix:
包含三個矩陣變數:_matrix1, _matrix2, _resultM。
定義了抽象方法 checkDimension() 和 matrixOperation()。
提供了 setMatrix() 方法來設置矩陣,以及 __str__() 方法來顯示矩陣內容。
類別 MatrixMultiply:
繼承自 Matrix。
實作了 checkDimension() 方法來檢查矩陣乘法的維度。
實作了 matrixOperation() 方法來執行矩陣乘法運算。
類別 MatrixAdd:
繼承自 Matrix。
實作了 checkDimension() 方法來檢查矩陣加法的維度。
實作了 matrixOperation() 方法來執行矩陣加法運算。
測試:
在主程式中創建 MatrixMultiply 和 MatrixAdd 的實例,並測試其功能。