function X = gaussjordan(A,B) // resolution

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 // ou A = [A,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 %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 = [1:k-1,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,
   A([1:k-1,k+1:n],k:n+1) = A([1:k-1,k+1:n],k:n+1)-A([1:k-1,k+1:n],k)*A(k,k:n+1)
   
   printf('etape %d',k),
   print(6,A),
end,

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

X=A(:,n+1),

// gaussjordan(A,B)
// A=[2,1,-4;3,3,-5;4,5,-2], B=[8;14;16]       premier exemple du cours
