{$mode objfpc}{$H-}{$R+}{$T+}{$Q+}{$V+}{$D+}{$X-}{$warnings on}
program algun_multiplo;
// Busca en una matriz un múltiplo de k
uses crt;  // Necesario para delay
const
    Filas = 3; 
    Columnas = 4;
type
    TipoMatriz = array[1..Filas, 1..Columnas] of integer;


function tira_dado(caras_dado:integer):integer;
begin
    result := random(caras_dado) + 1;
end;


procedure inicia_matriz(var matriz:TipoMatriz; caras_dado: integer);
var
    i,j : integer;
begin
    for i := 1 to Filas do
        for j:= 1 to Columnas do
            matriz[i,j] := tira_dado(caras_dado);
end;


procedure escribe_matriz(matriz:TipoMatriz);
var i,j: integer;   
begin
    for i := 1 to Filas do begin
        for j:= 1 to Columnas do 
            write(matriz[i,j]:3);
        writeln;
    end;
end;


function es_multiplo(numero, k: integer): boolean;
begin
    result := (numero mod k ) = 0
    // Si la división entera de un número entre k tiene
    // como resto 0, es que el número es múltiplo de k
end;

function algun_multiplo(matriz: TipoMatriz;k: integer): boolean;
var
    i,j: integer;
begin
    result := False;  // De momento no hay ninguno
    for i:= 1 to Filas do
        for j:= 1 to Columnas do
            if es_multiplo( matriz[i,j] , k) then
                result := True
end;


var
    matriz : TipoMatriz;
const
    CarasDado  =  24 ;
    K = 7 ;
begin
    randomize();
    delay(800);
    inicia_matriz(matriz, CarasDado);
    escribe_matriz(matriz);
    if algun_multiplo(matriz, K) then
        writeln('Hay algún múltiplo de ',K)
    else
        writeln('No hay ningún múltiplo de ',K)
end.  
