1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
   |     //----- parcours de la matrice pour verrifier que son determinant n'est pas nul ----- 
    Indice = 1 
     Répéter 
        //on cherche d'abord sur la ligne 
        LigneNulle = Vrai 
        //on se place sur la ligne voulu 
        Ligne = Indice 
        //et on parcourt chaque colonne 
        Colonne = 1 
         Répéter 
            //des qu'on tombe sur un coefficient different de zero 
            Si (TabCoeffs(Ligne, Colonne) <> 0) Alors 
                //on dit que la ligne n'est pas nulle 
                LigneNulle = Faux 
             FinSi 
            //on passe a la colonne suivante 
            Colonne = Colonne + 1 
        //on sort s'il n'y a plus de colonnes 
        //ou si on sait que la ligne n'est pas nulle 
         Jusqu 'à ((Colonne > Dimension) Ou (LigneNulle = Faux)) 
 
        //si la ligne est bonne, on regarde la colonne 
        //par le meme principe 
        Si (LigneNulle = Faux) Alors 
            ColonneNulle = Vrai 
            Colonne = Indice 
            Ligne = 1 
             Répéter 
                Si (TabCoeffs(Ligne, Colonne) <> 0) Alors 
                    ColonneNulle = Faux 
                 FinSi 
                Ligne = Ligne + 1 
             Jusqu 'à ((Ligne > Dimension) Ou (ColonneNulle = Faux)) 
         FinSi 
 
        //une fois qu'on a regarde ligne et colonne, 
        //on passe a l'indice suivant 
        Indice = Indice + 1 
    //on s'arrete si on a parcouru toute la matrice 
    //ou si on a trouve une ligne ou une colonne nulle 
     Jusqu 'à ((Indice > Dimension) Ou (LigneNulle = Vrai) Ou (ColonneNulle = Vrai)) 
 
    //si une ligne ou une colonne est nulle, le determinant est nul 
    Si (LigneNulle = Vrai) Ou (ColonneNulle = Vrai) Alors 
        DeterminantCalcule = 0 
    //sinon, on se lance dans le calcul 
    Else 
        //----- methode par la triangularisation (pivot de gauss) ----------------------------
        //----- le determinant d'une matrice triangulaire est le produit de sa diagonale -----
        //on parcourt la matrice ligne par ligne 
        LignePivot = 1
        Répéter
            //initialisation du booleen d'arret de la fonction
            ArretFonction = Faux
 
            //si le coefficient de la diagonale est nul
            Si (TabCoeffs(LignePivot, LignePivot) = 0) Alors 
                //on cherche a permutter la ligne avec une autre, dont le coeff n'est pas nul 
                LignePermutation = LignePivot + 1 
                //on parcourt les lignes en dessous de la ligne actuelle 
                Tant que ((LignePivot + 1 <= Dimension) et (PermutationEffectuee = Faux)) 
                    //des qu'un coeff n'est pas nul 
                    Si (TabCoeffs(LignePermutation, LignePivot) <> 0) Alors 
                        //on inverse les deux lignes 
                        PermutterLigne(LignePivot, LignePermutation) 
                        PermutationEffectuee = Vrai 
                    FinSi 
                //on s'arrete si on a parcouru toutes les lignes 
                //ou si on a effectue une permutation 
                FinTq
 
                //si pas de permutation effectuee, on s'arrete car un coefficient de la diagonale est nul
                Si (PermutationEffectuee = Faux) Alors
                    ArretFonction = Vrai
                FinSi
             FinSi
 
             Si (ArretFonction = Faux) Alors            
                 //on met les coefficients dans la colonne du pivot a zero 
                 Pour Ligne <- LignePivot + 1 à Dimension - 1 
                     //calcul du coefficient pour l'opération
                     CoefficientMultiplication = -TabCoeffs(Ligne, Ligne) / TabCoeffs(LignePivot, Ligne)
                     //Ly <- Ly - u Lx 
                     OperationSurLigne(Ligne, LignePivot, CoefficientMultiplication) 
                 FinPour 
            FinSi 
        Jusqu'à ((LignePivot > Dimension) Ou (ArretFonction = Vrai))
 
        //----- Calcul du determinant -----
        //Si on est sorti a cause d'un coeff sur la diagonale nul, le determinant est nul
        Si (ArretFonction = Vrai) Alors
            DeterminantCalcule = Faux
        Sinon 
            //on calcule le determinant en faisant le produit de la diagonale 
            DeterminantCalcule = 1 
            Pour Ligne <- 1 à Dimension 
                DeterminantCalcule = DeterminantCalcule * TabCoeffs(Ligne, Ligne) 
            FinPour 
        FinSi
    FinSi 
 
    Retourner(DeterminantCalcule) | 
Partager