function X = gauss1(A,B)     // division de la ligne du pivot par le pivot

printf('gauss1 sans pivot maximal')

n=size(A,'c') // calcul de la taille de A et vérif carrée
if ~ size(A,'r')==n  then printf('matrice non carree'), end

// B est recopié dans la colonne n+1 de A
A(:,n+1) = B
print(6,A),

de=1, // pour calculer le determinant en meme temps

for k = 1 : n ,   // etape k
    if A(k,k)==0 then // recherche d'un pivot non nul
        printf('pivot nul a l''etape %d',k),
        if k<n then i=k+1,
                    while(A(i,k)==0 & i<n ), i=i+1, 
                    end,
               else i=k,
        end,
        if A(i,k)==0 then X='matrice singuliere', return 
                     else printf('on echange les lignes %d et %d',k,i),
                          A([k,i],:)=A([i,k],:),
                          de=-de,
                          print(6,A),
        end,
    end,
  
    printf('pivot=%f',A(k,k)),
    de=de*A(k,k),

    A(k,k:n+1) = A(k,k:n+1)/A(k,k), // nouvelle ligne k

    for i = k+1 : n ,   // nouvelle ligne i
        A(i,k:n+1) = A(i,k:n+1) - A(i,k)*A(k,k:n+1) 
    end,
    // ou  A(k+1:n,k:n+1) = A(k+1:n,k:n+1) - A(k+1:n,k)*A(k,k:n+1)/A(k,k)
    printf('etape %d',k),
    print(6,A),
end,

printf('determinant=%f', de),

// remontée, calcul des xi  dans A(:,n+1)
for i=[n-1:-1:1],   // remontee : calcul des xi dans A(i,n+1)
    A(i,n+1) = (A(i,n+1)  - A(i,i+1:n)*A(i+1:n,n+1)),
end,
printf('solution'),
X=A(:,n+1)

// appel gauss1(A,B) ou X=gauss1(A,B)
// A=[2,1,-4;3,3,-5;4,5,-2], B=[8;14;16]       premier exemple du cours
// A=[2,1,-4;4,2,-7;2,1,-1], B=[8;15;9]        impossible
// A=[2,1,-4;4,2,-7;2,1,-1], B=[8;15;5]        indetermine
// A=[2,1,-4;4,2,-7;2,2,-1], B=[8;15;5]        echange de lignes obligatoire
