Accueil > > > ADDITIONNER, SOUSTRAIRE ET MULTIPLIER DEUX NOMBRES, EN ÉVITANT LE DÉPASSEMENT DE CAPACITÉ.
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
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
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|