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