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
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.