# metodo di eliminazione Gaussiana
# e determinazione del determinante 

rid.Gauss.nz <- function(A) {
# caso di elementi tutti diversi da zero
    if(dim(A)[1] != dim(A)[2]) {
    cat(sprintf("La matrice deve essere quadrata\n"))
      return(NULL)
    }
    if (any(A ==0))  {
        cat(sprintf("Questo metodo funziona solo con tutti elementi !=0"))
        return(NULL)
    }  

    nr = nc = dim(A)[1]
    if(nr == 1) {
        return(A)
    } else if (nr > 4) {
        cat(sprintf("Max matrici 4x4"))
        return(NULL)
    }
    print(A)
    
    # primo passo
    for (i in 2:nr) {
       A[i,] = A[i,] -  A[1,] *  A[i,1]/A[1,1]
    }
    print(A, dig=3)
    if(nr == 2) {
        return(A)
    }

    # secondo passo
    for (i in 3:nr) {
       A[i,] = A[i,] -  A[2,] *  A[i,2]/A[2,2]
    }
    print(A, dig=3)
    if(nr == 3) {
        return(A)
    }

    # terzo passo
    for (i in 4:nr) {
       A[i,] = A[i,] -  A[3,] *  A[i,3]/A[3,3]
    }
    print(A, dig=3)
    if(nr == 4) {
        return(A)
    }
  
}
