
print.vec <- function(v, nd) {
  if(length(v) == 3) {
    fmt <- sprintf("%%.%df, %%.%df, %%.%df\n", nd, nd, nd)
    cat(sprintf(fmt, v[1], v[2], v[3]))
  } else {
      cat(sprintf("Errore: il vettore ha dimensionalità %d\n",length(v)))
  }
} 

prod.scal <- function(v1, v2)  sum(v1*v2) 
mod.vec <- function(v) sqrt( prod.scal(v,v) )  

a <- c(1, 2, 3)
b <- c(1, -1, 2)

cat(sprintf("a :  ")); print.vec(a, 3)
cat(sprintf("b :  ")); print.vec(b, 3)

cat(sprintf("modulo di a :  %.3f\n", mod.vec(a) ))
cat(sprintf("modulo di b :  %.3f\n", mod.vec(b) ))

s1 <- prod.scal(a, b) 
cat(sprintf("a*b :  %.3f\n", s1))

cos.a.b <-  s1 / (mod.vec(a) * mod.vec(b))
th.a.b <- acos( cos.a.b )
cat(sprintf("coseno fra a e b :  %.3f\n", cos.a.b ))
cat(sprintf("angolo fra a e b :  %.3f rad (%.2f gradi)\n", th.a.b, th.a.b*180/pi ))

