vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB4, VB5, VB602.09.05
Division wie in der Schulzeit

Division von sehr großen Zahlen, nach der Methode, wie wir es zu unserer Schulzeit gelernt haben.

Autor:   Bodo MassaBewertung:     [ Jetzt bewerten ]Views:  14.537 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Die Division ist im Rahmen der bekannten Zahlengrößen in VB und VBA kein Problem. Mit dem Zeichen '/' kann eine Division durchgeführt werden. Was aber, wenn man eine 24-stelige Zahl teilen möchte? Bisher ist mir noch keine Funktion bekannt, mit der man so etwas bewerkstelligen könnte.

Da gibt es aber doch etwas. Damals in der Schule, als wir das Teilen gelernt haben, war das ein System, mit dem beliebig lange Zahlen geteilt werden konnten.

Beschreibung des Ablaufes:
Die zu teilende Zahl wird als String an die Funktion übergeben. Der Divisor als Long-Variable. Die Funktion geht nun Schritt für Schritt den String durch und versucht den bisher gelesenen Teil durch den Divisor zu teilen. Gelingt dies nicht, so wird das nächste Zeichen angehängt und nochmals versucht. Gelingt es, so wird der Ganzzahlanteil des Divisionsergebnises dem Ergebnisstring angehängt und der Rest wird 'notiert'. Am Ende steht das Ergebnis samt Rest durch ein Leerzeichen getrennt in der Funktionsvariablen.

Beispiel für Übergabevariablen:

TxtZahl = "123123120001212123131400"
Divisor = 97

Das Ergebnis:

Division = "1269310515476413640529 87"

Die Ziffern bis zum Leerzeichen beinhalten das ganzzahlige Ergebnis, die Ziffern nach dem Leerzeichen beinhalten den Rest der Division.

Erstellen Sie ein neues Projekt mit eine Form und folgenden Controls:

  • TextBox (txtZahl)
  • TextBox (txtDiv)
  • TextBox (txtResult) mit den Eigenschaften MultiLine = True und ScrollBars = 2
  • CommandButton (Command1)

Fügen Sie nachfolgenden Code in den Codeteil der Form ein:

Private Sub Form_Load()
  txtZahl.Text = "123123120001212123131400"
  txtDiv.Text = "97"
 
  txtResult.Text = ""
  txtResult.FontName = "FixedSys"
End Sub
Private Sub Command1_Click()
  Division txtZahl.Text, Val(txtDiv.Text)
End Sub
Function Division(txtZahl As String, Divisor As Long) As String
  ' Variabeln deklarieren
  Dim TeilStart As Integer
  Dim TeilEnd As Integer
  Dim TxtLen As Integer
 
  Dim Erg As Long
  Dim Ganz As Long
  Dim Rest As Long
  Dim Nr As Long
 
  Dim TxtErg As String
  Dim TxtRest As String
  Dim TxtAusg As String
  Dim TxtStart As String
  Dim TxtGanz As String
  Dim Teil As String
 
  ' sämtliche Variablen initialisieren
  TeilStart = 1
  TeilEnd = 1
  TxtLen = Len(txtZahl)
  TxtErg = ""
  TxtRest = ""
 
  TxtAusg = ""
  TxtStart = TeilStart
 
  ' Hauptschleife der Division
  While TeilEnd <= TxtLen
    ' ermitteln des zu berechnenden Teilstrings
    Teil = TxtRest + Mid$(txtZahl, TeilStart, TeilEnd - TeilStart + 1)
 
    ' Wenn der Teil größer ist als der Divisor
    If Val(Teil) >= Divisor Then
      ' Ergebnis der Teildivision
      Erg = Val(Teil) \ Divisor
      Ganz = Erg * Divisor
      Rest = Val(Teil) - Ganz
      TxtGanz = Trim(Str(Ganz))
 
      ' Bereich für die Ausgabe in die TextBox
      If TxtErg <> "" Then
        TxtAusg = TxtAusg + Space$(TxtStart - Len(Teil)) + Trim(Teil) + vbCrLf
        TxtGanz = Space$(Len(Teil) - Len(TxtGanz)) + TxtGanz
        TxtAusg = TxtAusg + Space$(TxtStart - Len(Teil)) + TxtGanz + vbCrLf
        TxtAusg = TxtAusg + Space$(TxtStart - Len(Teil)) + String(Len(Teil), "-") + vbCrLf
      Else
        If Len(TxtErg) > 1 Then
          TxtAusg = TxtAusg + Space$(TxtStart - Len(Teil)) + Trim(Teil) + vbCrLf
        End If
        TxtGanz = Space$(Len(Teil) - Len(TxtGanz)) + TxtGanz
        TxtAusg = TxtAusg + Space$(TxtStart - 1) + TxtGanz + vbCrLf
        TxtAusg = TxtAusg + Space$(TxtStart - 1) + String(Len(Teil), "-") + vbCrLf
      End If
 
      ' Berechnete Werte in Variabeln speichern
      TxtErg = TxtErg + Trim(Str(Erg))
      TxtRest = Trim(Str(Rest))
      TeilStart = TeilEnd + 1
      TeilEnd = TeilStart
 
      ' Bereich für die Ausgabe in die Textbox
      TxtStart = TeilStart
    Else
 
      ' Bereich, wenn der Divisor größer ist als der zu berechnende Teil
      If TxtErg <> "" Then
        TxtErg = TxtErg + "0"
 
        ' Bereich für die Ausgabe in die TextBox
        If Rest = 0 And TxtRest <> "" Then
          TxtAusg = TxtAusg + Space$(TxtStart - Len(Teil)) + Trim(TxtRest) + vbCrLf
          TxtRest = ""
        End If
        TxtStart = TxtStart + 1
 
      End If
      TeilEnd = TeilEnd + 1
    End If
  Wend
 
  ' Bereich für die Ausgabe in die TextBox
  If TxtRest <> "" Then TxtAusg = TxtAusg + Space$(TeilStart - Len(Teil)) + Trim(TxtRest) + vbCrLf
  TxtAusg = txtZahl + " :" + Str(Divisor) + " = " + TxtErg + " Rest " + TxtRest + vbCrLf + TxtAusg
 
  txtResult.Text = TxtAusg
 
  ' Übergabe des Ergebnis an die Funktion
  Division = TxtErg + " " + TxtRest
 
  Exit Function
Ende:
  Close Nr
  Division = ""
End Function

Das Ergebnis der MultiLine-TextBox sieht aus, wie eine auf dem Papier durchgeführte Division.

/ Beispieltext
123123120001212123131400 : 97 = 1269310515476413640529 Rest 87
 97
---
 261
 194
 ---
  672
  582
  ---
   903
   873
   ---
    301
    291
    ---
     102
      97
     ---
       500
       485
       ---
        150
         97
        ---
         531
         485
         ---
          462
          388
          ---
           741
           679
           ---
            622
            582
            ---
             401
             388
             ---
              132
               97
              ---
               353
               291
               ---
                621
                582
                ---
                 393
                 388
                 ---
                   514
                   485
                   ---
                    290
                    194
                    ---
                     960
                     873
                     ---
                      87
/ Ende Beispieltext

Dieser Tipp wurde bereits 14.537 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel