|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
ADDITIONNER, SOUSTRAIRE ET MULTIPLIER DEUX NOMBRES, EN ÉVITANT LE DÉPASSEMENT DE CAPACITÉ.
Information sur la source
Description
Ce code permet d'additionner deux nombres, quel que soit leur nombre de chiffres. Il de basse sur la méthode usuelle d'addition, soit un tableau dans lequel les nombres sont additionnées par colonne.
Source
- Public Function Addition(ByVal nbr1 As String, ByVal nbr2 As String)
- Dim FinalChiffresCount As Long = IIf(nbr1.Length > nbr2.Length, nbr1.Length, nbr2.Length)
- Dim Operation_table(FinalChiffresCount, 2) As Byte
- Dim Length As Byte
- Dim result As String
-
- Length = nbr1.Length
- For i As Byte = 0 To Length - 1
- Operation_table(i, 0) = nbr1.Substring(Length - i - 1, 1)
- Next
- Length = nbr2.Length
- For i As Byte = 0 To Length - 1
- Operation_table(i, 1) = nbr2.Substring(Length - i - 1, 1)
- Next
-
- For i As Byte = 0 To FinalChiffresCount 'le iif extrait la + grande longueur, puis on rajoute un pour par exemple 600+700=1300, soit quatre chiffres au lieu de 3
- Operation_table(i, 2) += Operation_table(i, 0) + Operation_table(i, 1)
- If Operation_table(i, 2).ToString.Length > 1 Then
- Operation_table(i + 1, 2) += Operation_table(i, 2).ToString.Substring(0, 1)
- Operation_table(i, 2) = Operation_table(i, 2).ToString.Substring(1, 1)
- End If
- Next
-
- result = ""
- For i As Integer = FinalChiffresCount To 0 Step -1
- result &= Operation_table(i, 2)
- Next
-
- Do Until result.Substring(0, 1) <> "0"
- result = result.Remove(0, 1)
- Loop
- Return result
- End Function
-
- 'Soustraction
- Public Function Soustraction(ByVal nbr1 As String, ByVal nbr2 As String)
- Dim FinalChiffresCount As Long = IIf(nbr1.Length > nbr2.Length, nbr1.Length, nbr2.Length) 'le iif extrait le nombre ayant le + de chiffres pour connaitre la largeur nécessaire du tableau...
- Dim Operation_table(FinalChiffresCount, 2) As Long
- Dim Length As Long
- Dim result As String
-
- Length = nbr1.Length
- For i As Long = 0 To Length - 1
- Operation_table(i, 0) = nbr1.Substring(Length - i - 1, 1)
- Next
- Length = nbr2.Length
- For i As Long = 0 To Length - 1
- Operation_table(i, 1) = nbr2.Substring(Length - i - 1, 1)
- Next
-
- For i As Long = 0 To (FinalChiffresCount - 1)
- If Operation_table(i, 0) < Operation_table(i, 1) Then 'ici on vérifie d'abord, au contraire de l'addition, que le chiffre auquel on soustrait est > au chiffre qu'on soustrait. Ainsi, si ce n'est pas le cas, enlève t'on une dizaine (dans la case suivante au niveau du nombre soustrait) et en rajoute t'on une dans la case actuelle (au niveau du nombre aquel on soustrait).
- Operation_table(i, 0) += 10
- Operation_table(i + 1, 1) += 1
- End If
- Operation_table(i, 2) = Operation_table(i, 0) - Operation_table(i, 1)
- Next
-
- result = ""
- For i As Integer = FinalChiffresCount To 0 Step -1
- result &= Operation_table(i, 2)
- Next
-
- Do Until result.Substring(0, 1) <> "0"
- result.Remove(0, 1)
- Loop
- Return result
- End Function
-
- 'Multiplication
- Public Function Multiplication(ByVal nbr1 As String, ByVal nbr2 As String, ByVal Sender As Grandsnombres)
- Dim result As String = "0"
- Dim Tours As String = "0"
- Do Until Tours = nbr2
- result = Addition(nbr1, result)
- Tours = Addition(Tours, 1)
- Application.DoEvents()
- Sender.Statut.Text = "opération " & Tours & "/" & nbr2
- Loop
- Return result
- End Function
Public Function Addition(ByVal nbr1 As String, ByVal nbr2 As String)
Dim FinalChiffresCount As Long = IIf(nbr1.Length > nbr2.Length, nbr1.Length, nbr2.Length)
Dim Operation_table(FinalChiffresCount, 2) As Byte
Dim Length As Byte
Dim result As String
Length = nbr1.Length
For i As Byte = 0 To Length - 1
Operation_table(i, 0) = nbr1.Substring(Length - i - 1, 1)
Next
Length = nbr2.Length
For i As Byte = 0 To Length - 1
Operation_table(i, 1) = nbr2.Substring(Length - i - 1, 1)
Next
For i As Byte = 0 To FinalChiffresCount 'le iif extrait la + grande longueur, puis on rajoute un pour par exemple 600+700=1300, soit quatre chiffres au lieu de 3
Operation_table(i, 2) += Operation_table(i, 0) + Operation_table(i, 1)
If Operation_table(i, 2).ToString.Length > 1 Then
Operation_table(i + 1, 2) += Operation_table(i, 2).ToString.Substring(0, 1)
Operation_table(i, 2) = Operation_table(i, 2).ToString.Substring(1, 1)
End If
Next
result = ""
For i As Integer = FinalChiffresCount To 0 Step -1
result &= Operation_table(i, 2)
Next
Do Until result.Substring(0, 1) <> "0"
result = result.Remove(0, 1)
Loop
Return result
End Function
'Soustraction
Public Function Soustraction(ByVal nbr1 As String, ByVal nbr2 As String)
Dim FinalChiffresCount As Long = IIf(nbr1.Length > nbr2.Length, nbr1.Length, nbr2.Length) 'le iif extrait le nombre ayant le + de chiffres pour connaitre la largeur nécessaire du tableau...
Dim Operation_table(FinalChiffresCount, 2) As Long
Dim Length As Long
Dim result As String
Length = nbr1.Length
For i As Long = 0 To Length - 1
Operation_table(i, 0) = nbr1.Substring(Length - i - 1, 1)
Next
Length = nbr2.Length
For i As Long = 0 To Length - 1
Operation_table(i, 1) = nbr2.Substring(Length - i - 1, 1)
Next
For i As Long = 0 To (FinalChiffresCount - 1)
If Operation_table(i, 0) < Operation_table(i, 1) Then 'ici on vérifie d'abord, au contraire de l'addition, que le chiffre auquel on soustrait est > au chiffre qu'on soustrait. Ainsi, si ce n'est pas le cas, enlève t'on une dizaine (dans la case suivante au niveau du nombre soustrait) et en rajoute t'on une dans la case actuelle (au niveau du nombre aquel on soustrait).
Operation_table(i, 0) += 10
Operation_table(i + 1, 1) += 1
End If
Operation_table(i, 2) = Operation_table(i, 0) - Operation_table(i, 1)
Next
result = ""
For i As Integer = FinalChiffresCount To 0 Step -1
result &= Operation_table(i, 2)
Next
Do Until result.Substring(0, 1) <> "0"
result.Remove(0, 1)
Loop
Return result
End Function
'Multiplication
Public Function Multiplication(ByVal nbr1 As String, ByVal nbr2 As String, ByVal Sender As Grandsnombres)
Dim result As String = "0"
Dim Tours As String = "0"
Do Until Tours = nbr2
result = Addition(nbr1, result)
Tours = Addition(Tours, 1)
Application.DoEvents()
Sender.Statut.Text = "opération " & Tours & "/" & nbr2
Loop
Return result
End Function
Conclusion
Je ne vois pas de bug particulier, sinon que la déclaration du tableau en byte limite le nombre de chiffres à 256, mais il suffit de le changer en long pour obtenir un nombre maximum de 2 milliards de chiffres environ, ce qui est plus que raisonnable. Le classement en niveau deux vient du fait que l'utilisation des tableaux est des fois malaisée, et que ma source, manquant de commentaires, est peut-être difficile à lire. Le code fonctionne ainsi : On déclare un tableau à trois lignes. On écrit les deux termes, en les lisant de droite à gauche, dans le tableau, avec un chiffre, par case et une ligne par terme. On additionne colonne par colonne et, si le résultat de l'addition de 2 chiffres est > à 9, alors on écrit la dizaine dans la case suivante. Finalement on inverse le sens de lecture du chiffre.
Historique
- 13 décembre 2006 16:02:48 :
- Correction d'ue erreur mineure
- 13 décembre 2006 16:17:35 :
- Ajout de la suppression des 0 éventuels à gauche du nombre.
- 03 mars 2007 09:03:23 :
- Ajout de la soustraction et de la multiplication
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Passage d'un tableau de byte à une fonction encapsulé dans un ACtiveX Dll [ par novik ]
J'aimerai pouvoir passer un tableau de Byte a ma fonction (Activex Dll)lors de l'appel j'ai une erreur Type Mismatch.Or lorsque j'appelle cette foncti
script d'installation - ajout de fichiers [ par Georef ]
Bonjour,lors de la génération d'un pgm d'installation, je dois ajouterde nombreux fichiers de données. La manipulation"ajouter", choix du fichier... e
Comment ajouter un mot au curseur dans une texbox [ par Fagu ]
Dans une texbox je voudrais ajouter un mot en cliquant sur un objet au niveau du curseur dans la texbox. Est-ce possible ? Ou bien selectionner avec l
Upload de fichiers [ par Pat ]
Je souhaite ajouter la fonction, upload de fichier sur mon site pour permettre aux visiteurs de poster des fichier zip.Mon site est hébergé sur un ser
comment ajouter Controles internets en vb [ par Natij ]
bonjour,j'aimerai avoir des infos sur l'ajout de controle internet dans un programme vb merci logicave@yahoo.fr
Ajouter un nouvel enreg ds une table depuis VB. URGENt!! [ par flo ]
COmment depuis Vb (Avec ADO) ajouter un enregistrement ds une table de ma bd Access?Faut il utiliser ALTER TABLE nom_table(........,....)?Merci de vot
addition de 3 chiffres [ par WareG ]
dans un formulaire, je doit calculer la valeur de 3 textbox dans une textbox.ce sont des chiffres.lorsque je n'ai que deux valeurs pas de problemes, m
basse de donnée [ par indurain ]
Salut,J'essai présentement pour la première fois à travailler avec une basse de donnée. Mon problème est que je désire faire saisir des informations e
ajouter 1 colone a 1 dbGrid [ par tom ]
Comment puis je ajouter une colonne dans mon dbGridla question est stupide mais tant pismerciTom
Ajouter une propriété perso à un doc word [ par Ricou ]
Est-ce que quelqu'un saurait comment ajouter une propriété personnalisée à un document word ?J'ai essayé avec la commande suivante mais ça ne marche p
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|