Example #1
0
    def mx_determinant(self):
        print("\n Operace výpočet determinantu:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(det(A))~")

        self.__current_operation = MatrixDeterminant(mx)
        self.operation_result = self.__current_operation.calculate_determinant(
        )

        print(self.operation_result)
Example #2
0
    def mx_add(self):
        #1)
        print("\nOperace sčítání:")
        #2)
        print("\nZadání 1. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx1 = self.__read_mx_data(self)

        self.dims_check = lambda sec_mx_dims: Helpers.invalid_dims_addition(
            sec_mx_dims, mx1)

        print("\nZadání 2. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx2 = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx1)
        print("(+)")
        MatrixConsolePrinter.print_default(mx2)

        print(" - " * (mx2.m * 2))
        self.__current_operation = MatrixAddition(mx1, mx2)
        self.operation_result = self.__current_operation.calculate_sum()
        MatrixConsolePrinter.print_default(self.operation_result)
Example #3
0
    def mx_multiply(self):

        print("\nOperace: Maticové Násobení:")

        print("\nZadání 1. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx1 = self.__read_mx_data(self)

        self.dims_check = lambda sec_mx_dims: Helpers.invalid_dims_multiplication(
            sec_mx_dims, mx1)

        print("\nZadání 2. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx2 = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx1)
        print("~(*)~")
        MatrixConsolePrinter.print_default(mx2)

        print(" - " * (mx2.m * 2))
        self.__current_operation = MatrixMultiplication(mx1, mx2)
        self.operation_result = self.__current_operation.calculate_multiplication(
        )
        MatrixConsolePrinter.print_default(self.operation_result)
Example #4
0
    def mx_rank(self):
        print("\n Operace: hodnost matice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(rank(A))~")

        self.__current_operation = MatrixREF(mx)
        mx_res = self.__current_operation.calculate_ref()
        self.operation_result = self.__current_operation.rank
        print(self.operation_result)
Example #5
0
    def mx_rref(self):
        print("\nOperace: RREF:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(RREF)~")

        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixRREF(mx)
        self.operation_result = self.__current_operation.calculate_rref()
        MatrixConsolePrinter.print_default(self.operation_result)
Example #6
0
    def mx_transpose(self):
        print("\nOperace: Transpozice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(A^(T))~")
        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixTransposition(mx)
        self.operation_result = self.__current_operation.calculate_transpose()

        MatrixConsolePrinter.print_default(self.operation_result)
Example #7
0
    def mx_inverse(self):

        print("\nOperace: určení inverzní matice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(A^(-1))~")

        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixInversion(mx)
        self.operation_result = self.__current_operation.calculate_inversion_of_matrix(
        )

        if self.__current_operation.inversion_state:
            MatrixConsolePrinter.print_default(self.operation_result)
Example #8
0
    def mx_scalar_multiply(self):

        print("\nOperace násobení skalárem:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx = self.__read_mx_data(self)

        print("Zadejte skalár:")
        scalar = self.input_reader.read_scalar()

        MatrixConsolePrinter.print_default(mx)
        print("*(", scalar, ")", sep="")

        print(" - " * (mx.m * 2))
        self.__current_operation = MatrixScalarMultiplication(mx, scalar)
        self.operation_result = self.__current_operation.calculate_scalar_multiplication(
        )
        MatrixConsolePrinter.print_default(self.operation_result)
Example #9
0
class OperationExecution:
    """Stará se o průběh a exekuci operací kalkulačky."""
    def __init__(self, mx_operation_method, load_data_method):

        self.__read_mx_data = load_data_method
        self.__operation = mx_operation_method
        # Pointer na metodu zprostředkující danou operaci

        self.input_reader = InputReader()
        self.output_writer = OutputWriter()

        self.__current_operation = None  # Reference objektu momentální operace z modulu operations
        self.operation_result = None

        # Funkce sloužící ke kontrole rozměrů matice při zadávání hodnot uživatelem
        self.dims_check = lambda x: True

    def execute(self):
        self.__operation(self)

    def write_result_to_file(self, file_name):
        if (file_name == ""): raise Exception("Název souboru je prázdný!")
        if (self.operation_result is None):
            raise Exception("Výsledek operace je neplatný!")
        self.output_writer.store_output(self.operation_result, file_name)

    def __get_mx_dims_console(self):
        print(
            "Zadejte rozměry matice celými čísly, ve tvaru: mxn \n(tedy např. 2x2):"
        )
        return self.input_reader.read_matrix_dimensions(self.dims_check)

    def load_data_from_file(self):

        print(
            "Zadejte název cílového souboru ve formátu .txt (stačí bez přípony):"
        )
        data_file_name = input()

        mx_data = self.input_reader.read_matrix_data_from_file(data_file_name)

        if mx_data:
            mx = Matrix(len(mx_data), len(mx_data[0]), mx_data)
            dims = (mx.m, mx.n)

            if self.dims_check(dims):
                return mx
            else:
                print(
                    "Rozměry matice jsou neplatné, zkuste prosím jiný soubor:")

        return self.load_data_from_file()

    def load_data_from_console(self):
        dims = self.__get_mx_dims_console()
        mx = Matrix(dims[0], dims[1])

        print("\nZadejte hodnoty matice po řádcích oddělné mezerou:")
        self.input_reader.read_matrix_user_input(mx)

        return mx

    def mx_add(self):
        #1)
        print("\nOperace sčítání:")
        #2)
        print("\nZadání 1. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx1 = self.__read_mx_data(self)

        self.dims_check = lambda sec_mx_dims: Helpers.invalid_dims_addition(
            sec_mx_dims, mx1)

        print("\nZadání 2. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx2 = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx1)
        print("(+)")
        MatrixConsolePrinter.print_default(mx2)

        print(" - " * (mx2.m * 2))
        self.__current_operation = MatrixAddition(mx1, mx2)
        self.operation_result = self.__current_operation.calculate_sum()
        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_sub(self):

        print("\nOperace očítání:")

        print("\nZadání 1. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx1 = self.__read_mx_data(self)

        self.dims_check = lambda sec_mx_dims: Helpers.invalid_dims_addition(
            sec_mx_dims, mx1)

        print("\nZadání 2. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx2 = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx1)
        print("(-)")
        MatrixConsolePrinter.print_default(mx2)

        print(" - " * (mx2.m * 2))
        self.__current_operation = MatrixAddition(mx1, mx2)
        self.operation_result = self.__current_operation.calculate_sum(
            substract=True)
        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_scalar_multiply(self):

        print("\nOperace násobení skalárem:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx = self.__read_mx_data(self)

        print("Zadejte skalár:")
        scalar = self.input_reader.read_scalar()

        MatrixConsolePrinter.print_default(mx)
        print("*(", scalar, ")", sep="")

        print(" - " * (mx.m * 2))
        self.__current_operation = MatrixScalarMultiplication(mx, scalar)
        self.operation_result = self.__current_operation.calculate_scalar_multiplication(
        )
        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_multiply(self):

        print("\nOperace: Maticové Násobení:")

        print("\nZadání 1. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx1 = self.__read_mx_data(self)

        self.dims_check = lambda sec_mx_dims: Helpers.invalid_dims_multiplication(
            sec_mx_dims, mx1)

        print("\nZadání 2. matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")

        mx2 = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx1)
        print("~(*)~")
        MatrixConsolePrinter.print_default(mx2)

        print(" - " * (mx2.m * 2))
        self.__current_operation = MatrixMultiplication(mx1, mx2)
        self.operation_result = self.__current_operation.calculate_multiplication(
        )
        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_transpose(self):
        print("\nOperace: Transpozice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(A^(T))~")
        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixTransposition(mx)
        self.operation_result = self.__current_operation.calculate_transpose()

        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_ref(self):

        print("\nOperace: REF:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(REF)~")

        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixREF(mx)
        self.operation_result = self.__current_operation.calculate_ref()

        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_rref(self):
        print("\nOperace: RREF:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(RREF)~")

        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixRREF(mx)
        self.operation_result = self.__current_operation.calculate_rref()
        MatrixConsolePrinter.print_default(self.operation_result)

    def mx_inverse(self):

        print("\nOperace: určení inverzní matice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(A^(-1))~")

        print(" - " * (mx.m * 2))

        self.__current_operation = MatrixInversion(mx)
        self.operation_result = self.__current_operation.calculate_inversion_of_matrix(
        )

        if self.__current_operation.inversion_state:
            MatrixConsolePrinter.print_default(self.operation_result)

    def mx_rank(self):
        print("\n Operace: hodnost matice:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(rank(A))~")

        self.__current_operation = MatrixREF(mx)
        mx_res = self.__current_operation.calculate_ref()
        self.operation_result = self.__current_operation.rank
        print(self.operation_result)

    def mx_determinant(self):
        print("\n Operace výpočet determinantu:")

        print("\nZadání matice:")
        print("¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯")
        mx = self.__read_mx_data(self)

        MatrixConsolePrinter.print_default(mx)
        print("~(det(A))~")

        self.__current_operation = MatrixDeterminant(mx)
        self.operation_result = self.__current_operation.calculate_determinant(
        )

        print(self.operation_result)
Example #10
0
 def __get_determinant(self):
     determinant_operation = MatrixDeterminant()
     return determinant_operation.get_determinant(
         self.mx_ref_expanded, (self.mx.m, self.mx.n),
         self.__mx_ref_operation.determinant_sign)