Division euclidienne de polynomes avec interface

Soyez le premier à donner votre avis sur cette source.

Vue 9 845 fois - Téléchargée 516 fois

Description

C'est le meme code que celui intitule "DIVISION EUCLIDIENNE DE POLYNOMES", seulement là j'ai ajouter un interface

Source / Exemple :


'Crer un module et mettez-y le code suivant:

'=========================CODE DU MODULE===========================================
 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

'==========================FIN CODE DU MODULE===============================================

'Ensuite creer une form avec les elements suivants
'''''''''''UTILISATION: Les objets utilisé''''''''''''
'une form --> form1
'une combo box--> degre_dividende
'une combo box--> degre_diviseur
'une textbox-->Saisie
   'Etant donné qu'on ne peut pas editer une flexgrid, ce champ sert de champ de saisie
'une flexgrig-->polynomes
    'Pour ajouter une flexgrid aller dans le menu: Projets-Composants, faite defiler et cocher le composant "Microsoft Hierarchical FlexGrid Control 6.x (OLEDB)"
'un commandBoutton-->calcul
'un commandBoutton-->quitter
'Un label --> lab_message
'Un label --> message
'Un label --> lab_dividende
'Un label --> lab_diviseur
''''''''''''''''''''

'=================Metter le code ci-dessous dans la partie code du form
'''''''''''UTILISATION: Les objets utilisé''''''''''''
'une form --> form1
'une combo box--> degre_dividende
'une combo box--> degre_diviseur
'une textbox-->Saisie
   'Etant donné qu'on ne peut pas editer une flexgrid, ce champ sert de champ de saisie
'une flexgrig-->polynomes
    'Pour ajouter une flexgrid aller dans le menu: Projets-Composants, faite defiler et cocher le composant "Microsoft Hierarchical FlexGrid Control 6.x (OLEDB)"
'un commandBoutton-->calcul
'un commandBoutton-->quitter
'Un label --> lab_message
'Un label --> message
'Un label --> lab_dividende
'Un label --> lab_diviseur
''''''''''''''''''''

'Modifier les paramètre ci-dessous
Const degre_max = 20  'Degré maxi que peut avoir un polynome
Private Sub calcul_Click()
 On Error GoTo messageerreur:
 Dim divde() As Double 'Contient les coefficients du dividende
 Dim divsr() As Double 'Contient les coefficients du diviseur
 Dim quotient() As Double 'Contient les coefficients du quotient
 Dim Reste() As Double 'Contient les coefficients du reste

'Rechercher le degré réel du dividende
degredividende = 0
For j = degre_dividende.List(degre_dividende.ListIndex) + 1 To 1 Step -1
    If IsNumeric(polynomes.TextMatrix(1, j)) Then
        If (polynomes.TextMatrix(1, j) <> 0 And degredividende = 0) Then degredividende = j - 1
    Else
        polynomes.TextMatrix(1, j) = 0 'On rempace tout ce qui n'est pas nombre par 0
    End If
Next j

'Rechercher le degré réel du dividende
degrediviseur = 0
For j = degre_diviseur.List(degre_diviseur.ListIndex) + 1 To 1 Step -1
    If IsNumeric(polynomes.TextMatrix(2, j)) Then
        If (polynomes.TextMatrix(2, j) <> 0 And degrediviseur = 0) Then degrediviseur = j - 1
    Else
        polynomes.TextMatrix(2, j) = 0 'On rempace tout ce qui n'est pas nombre par 0
    End If
Next j

'Si degredividende < degrediviseur, on sort
If (degredividende < degrediviseur) Then
    message = "Le dividende doit être  de degré supérieur ou égal au diviseur"
    Exit Sub
End If
    
  
ReDim divde(0 To degredividende)
ReDim divsr(0 To degrediviseur)
ReDim quotient(0 To degredividende - degrediviseur)
ReDim quotient(0 To degrediviseur - 1)

'Copier les valeur dans le tableau divde
For i = 0 To degredividende
    divde(i) = polynomes.TextMatrix(1, i + 1)
Next i
'Copier les valeur dans le tableau divsr
For i = 0 To degrediviseur
    divsr(i) = polynomes.TextMatrix(2, i + 1)
Next i

'Calcul du Quotient et du reste
quotient = DivisionE(divde(), divsr())
Reste = DivisionE(divde(), divsr(), True)

'Affichage du quotient dans la flexgrid
For i = 0 To UBound(quotient)
    polynomes.TextMatrix(3, i + 1) = quotient(i)
Next i

'Affichage du reste dans la flexgrid
For i = 0 To UBound(Reste)
    polynomes.TextMatrix(4, i + 1) = Reste(i)
Next i
message = "Opération terminée avec succès"
Exit Sub 'S'il n'y a aucune erreur, on sort
'Sinon on affiche le message d'erreur
messageerreur: message = Err.Description
End Sub
Private Sub degre_dividende_Click()
    'Lorsqu'on choisi le degré du dividende, celui du diviseur doit etre
    'inférieur ou égale à la valeur choisie
    degre_diviseur.Clear  'On réinitialise le combobox
    
    
    For degre = 1 To degre_dividende.List(degre_dividende.ListIndex) 'Puis on le rempli à nouveau
        degre_diviseur.AddItem degre
    Next degre
    degre_diviseur.ListIndex = 0
    
    polynomes.Cols = degre_dividende.List(degre_dividende.ListIndex) + 2
    For degre = 0 To degre_dividende.List(degre_dividende.ListIndex)  'Puis on le rempli à nouveau
        polynomes.TextMatrix(0, degre + 1) = "X^" & degre
    Next degre
    
End Sub
Private Sub Form_Load()
    'Mise ne forme des objets sur le combo
    'Vous pouvez changer ces paramètres
    Me.Width = 11400
    Me.Height = 5000
    lab_dividende = "Degré dividende"
    lab_dividende.Top = 150
    lab_dividende.Left = 150
    
    lab_diviseur = "Degré diviseur"
    lab_diviseur.Top = 150
    lab_diviseur.Left = 3500
    
    degre_dividende.Top = 150
    degre_dividende.Left = 1700
    
    degre_diviseur.Top = 150
    degre_diviseur.Left = 5000
    
    polynomes.Top = 600
    polynomes.Left = 150
    polynomes.Height = 1700
    polynomes.Width = 11000
    
    message = "Les cases laisser vides sont considérées comme contenant la valeur 0"
    message.Top = 3300
    message.Left = 2100

    lab_message = "Message"
    lab_message.Top = 3300
    lab_message.Left = 150
    
    calcul.Caption = "Calculer le quotient et le reste"
    calcul.Left = 2100
    calcul.Top = 2500
    calcul.Width = 3000
    
    quitter.Caption = "Quitter"
    quitter.Top = 2500
    quitter.Left = 5700
'=================FIN PARAMETRAGE

    'On rempli le combobox contenant les degré du dividende
    degre_dividende.Clear
    For degre = 1 To degre_max
        degre_dividende.AddItem degre
    Next degre
    degre_dividende.ListIndex = 0 'On selectionne le premier
    
    'Formater  la grille
    polynomes.Rows = 5
    polynomes.RowHeight(0) = 300
    polynomes.RowHeight(1) = 300
    polynomes.RowHeight(2) = 300
    polynomes.RowHeight(3) = 300
    polynomes.RowHeight(4) = 300
    polynomes.Height = 1700
    
    polynomes.TextMatrix(0, 0) = "Polynomes"
    polynomes.TextMatrix(1, 0) = "dividende"
    polynomes.TextMatrix(2, 0) = "diviseur"
    polynomes.TextMatrix(3, 0) = "Quotient"
    polynomes.TextMatrix(4, 0) = "Reste"
    polynomes.Row = 1
    polynomes.Col = 1
    ligne = 1
    colonne = 1
    deplace_zone_saisie
End Sub
Private Sub polynomes_Click()
    'Quand on click sur le flexgrid, il faut deplacer le champs "Saisie" au niveau de la celule selectionnée du flexgrid
    colonne = polynomes.Col 'On recupère la colonne courante
    ligne = polynomes.Row 'On recupère la ligne courante
    'Si la cellule selectionnée n'est pas une cellule  ou l'utilisateur peut ecrire, alors on affiche pas le champs "Saisie"
    If ((ligne = 1) Or (ligne = 2 And colonne <= 1 + degre_diviseur.List(degre_diviseur.ListIndex))) Then
        deplace_zone_saisie
        Saisie.SetFocus
        Saisie.Text = polynomes.TextMatrix(ligne, colonne)
    Else
        Saisie.Visible = False
    End If
End Sub

Private Sub quitter_Click()
    End 'On quitte
End Sub

Private Sub Saisie_Change()
    'Quand le champs saisie change, on copie sa valeur dans la cellule active du flexgrid
    polynomes.Text = Saisie.Text
End Sub
Private Sub deplace_zone_saisie()
    'Pour deplacer la zone de saisie au niveau de la cellule active
    Saisie.Visible = True
    Saisie.Top = polynomes.Top + polynomes.CellTop
    Saisie.Left = polynomes.Left + polynomes.CellLeft - 20
    Saisie.Width = polynomes.CellWidth
    Saisie.Height = polynomes.CellHeight
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Commenter la réponse de Utilisateur anonyme

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.