with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Q5N is
    -- Definindo o tipo para a matriz
    type Matrix is array (1 .. 3, 1 .. 3) of Integer;  -- Matrizes 3x3
    A, B, C : Matrix;  -- Matrizes A, B e C
    Is_Inverse : Boolean := True;  -- Flag para verificar se são inversas

begin
    -- Entrada da matriz A
    Put_Line("Digite os elementos da matriz A (3x3):");
    for I in 1 .. 3 loop
        for J in 1 .. 3 loop
            Put("Elemento (" & Integer'Image(I) & ", " & Integer'Image(J) & "): ");
            Get(A(I, J));
        end loop;
    end loop;

    -- Entrada da matriz B
    Put_Line("Digite os elementos da matriz B (3x3):");
    for I in 1 .. 3 loop
        for J in 1 .. 3 loop
            Put("Elemento (" & Integer'Image(I) & ", " & Integer'Image(J) & "): ");
            Get(B(I, J));
        end loop;
    end loop;

    -- Calculando a multiplicação C = A * B
    for I in 1 .. 3 loop
        for J in 1 .. 3 loop
            C(I, J) := 0;  -- Inicializando C
            for K in 1 .. 3 loop
                C(I, J) := C(I, J) + A(I, K) * B(K, J);
            end loop;
        end loop;
    end loop;

    -- Verificando se C é a matriz identidade
    for I in 1 .. 3 loop
        for J in 1 .. 3 loop
            if I = J then
                if C(I, J) /= 1 then
                    Is_Inverse := False;
                end if;
            else
                if C(I, J) /= 0 then
                    Is_Inverse := False;
                end if;
            end if;
        end loop;
    end loop;

    -- Resultado
    if Is_Inverse then
        Put_Line("A matriz B é a inversa da matriz A.");
    else
        Put_Line("A matriz B não é a inversa da matriz A.");
    end if;
end Q5N;
