open Printf

(*versão 1 - cálculo com base na lista dos coeficientes *)
let rec horner_list  x lv acc =
    match lv with 
      [] -> acc
    | el::li  -> 
      horner_list  x li (x *. acc +. el)

(* um exemplo *)
let x = read_float () 

let () =
  let res = horner_list x [3.0;0.0;5.0;0.0;1.0] 0.0 in
  (printf "%.3f\n" res)

(* versão 2 -  com calculo a medida da leitura dos coeficientes *)

let rec horner2 gr x n pi =
    if  n> gr then pi
    else 
      let v = read_float () in
      let p =  x*.pi +. v in
        horner2 gr x (n+1) p

let () = (*ler grau e o polinámio relacionado *)
  let grau = read_int () in
  let p_x= horner2 grau x 0 0.0 in 
  (printf "%.3f\n" p_x)
  

This document was generated using caml2html