Division euclidienne de polynomes

Contenu du snippet

Ce code donne le quotient ou le reste de la division euclidienne d'un polynome par un autre. Je ne sais pas s'il est d'une grande importance mais je l'ai écris juste pour satisfaire ma curiosité .

Source / Exemple :


Function DivisionE(Dividende() As Double, Diviseur() As Double, Optional Reste As Boolean = False)
    'Si Reste=false Cette fonction calcule le quotient de la division euclidienne de Dividende()/Diviseur()
    'Si Reste=true Cette fonction calcule le reste de la division euclidienne de Dividende()/Diviseur()
    
    'Dividende() est un tableau contenant les coéfficient du dividende dans l'ordre X0, X1, X2, .....
    'Dividende() est un tableau contenant les coéfficient du diviseur dans l'ordre X0, X1, X2, .....
    
    'ai et bi sont respectivement des copies du dividende et du diviseur
    ReDim ai(0 To UBound(Dividende) - LBound(Dividende))
    ReDim bi(0 To UBound(Diviseur) - LBound(Diviseur))
    n = UBound(ai)
    m = UBound(bi)
    
    ReDim cij(0 To n - m + 1, 0 To m) 'Tableau intermédiaire
    Dim Res() As Double 'Contiendra les coéfficients Résultats
    
    '--------------------------------------------------------------------------
    'Recopy des valeurs du dividende
    For i = 0 To n
        ai(i) = Dividende(LBound(Dividende) + i)
    Next i
    'Recopy des valeurs du diviseur
    For i = 0 To m
        bi(i) = Diviseur(LBound(Diviseur) + i)
    Next i
    
    For j = 0 To m
        cij(0, j) = ai(n - j)
    Next j
    
    For i = 0 To n - m
        If (i < n - m) Then
            cij(i + 1, m) = ai(n - m - 1 - i)
        Else
            cij(i + 1, m) = 0
        End If
        For j = 0 To m - 1
            cij(i + 1, j) = cij(i, j + 1) - cij(i, 0) * bi(m - 1 - j) / bi(m)
        Next j
    Next i
    
   If Not Reste Then 'Il s'agit du quotient
        ReDim Res(0 To n - m)
        For i = 0 To n - m
         Res(n - m - i) = cij(i, 0) / bi(m)
        Next i
    Else 'Il s'agit du reste de la division
        ReDim Res(0 To m - 1)
        For j = 0 To m - 1
         Res(m - 1 - j) = cij(n + 1 - m, j)
        Next j
   End If
   DivisionE = Res
End Function

Sub Division()
'EXEMPLE D'UTILISATION
Dim divde(0 To 3) As Double
Dim divsr(0 To 1) As Double

'QUOTIENT DE X3-10X2-10X+19 / X-1
divde(0) = 19
divde(1) = -10
divde(2) = -10
divde(3) = 1
divsr(0) = -1
divsr(1) = 1
QUOTIENT = DivisionE(divde(), divsr())

'RESTE DE X3+9X2+17X+13 / X+3
divde(0) = 13
divde(1) = 17
divde(2) = 9
divde(3) = 1
divsr(0) = 3
divsr(1) = 1
R = DivisionE(divde(), divsr(), True)
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.