open Scanf
open Array
open Printf


(* alínea 1 *)
let chave = make_matrix 7 7 false

(* alínea 2 *)
(* função que preenche a grelha a partir da chave *)
let rec fill s t =
  for i=0 to length t -1 do
    let v = t.(i) in
    let a,b =  ((v-1) / 7), ((v-1) mod 7) in
    s.(a).(b) <- true
  done

(* alínea 3 *)
(* verifica se v é valor inválido ou se é sorteado mais do que uma vez *)
let bad v t i = 
    if v < 1 || v > 49 then true
    else let b = ref false in
         for j = i+1 to (length t - 1) do
           if t.(j) = v then b:= true
         done; !b 

let rec verif tab =
  let modified = ref false in
  for i = 0 to (Array.length tab - 1) do
    if bad tab.(i) tab i 
    then
      begin
        let () = printf "problema com o valor %d introduzido, por favor introduza novo valor: " tab.(i) in 
          tab.(i) <- scanf " %d" (fun a -> a);
          modified := true 
      end
    else ()
  done;
  if !modified then verif tab
      
let chave_seq = (*leitura da chave *)
  let () = printf "Introduza a chave escolhida (7 valores inteiros distintos entre 1 e 49): \n" in
  init 7 (fun i -> scanf " %d" (fun a -> a) )


let () = (* verificação da chave *)
   let () = (printf "verificação da chave\n") in
   let () = verif chave_seq in
   (printf "verificação chave - done.\n")

let sorteio = (* leitura do sorteio *)
  let () = printf "Introduza os números sorteados (7 valores inteiros distintos entre 1 e 49, sendo o último o numero complementar)\n" in
  init 7 (fun i -> scanf " %d" (fun a -> a) )


let () = (* verificação do sorteio *)
  let () = printf "verificação do sorteio\n" in
  let () = verif sorteio in
    (printf "verificação do sorteio - done.\n")


(* tendo uma grelha com a chave e um sortei, verifica *)
let check s c =  
  let cont = ref 0 in
  for i= 0 to 5 do
    if c.(s.(i-1) mod 7).(s.(i-1) / 7) then (incr cont)
  done;
  begin
    (printf "Acertou em %d números. " !cont );
    if c.(s.(6) mod 7).(s.(6) / 7) 
    then (printf "Acertou também no complementar\n") 
    else (printf "Não acertou no número complementar\n")
  end
  
let () = fill chave chave_seq
    
let () = check sorteio chave


This document was generated using caml2html