Een getal reduceer tot 9 met uitzondering

Status
Niet open voor verdere reacties.

satriano17

Gebruiker
Lid geworden
30 sep 2012
Berichten
331
(Visualbasic6)

Dag
ik heb een klein probleem maar ik raak niet uit
Met deze kleine routine reduceer ik een getal tot max 9 in text1.text ingevoerd.

Code:
Private Sub Text1_Change()
Dim i As Integer, nummer As String, som As Long
nummer = text1.text
Do
    som = 0
    For i = 1 To Len(nummer)
    som = som + Val(Mid(nummer, i, 1))
    Next
    nummer = som
Loop Until som <= 9
Label1.Caption = som
End Sub
BV
text1.text="1234"
dan word 1+2+3+4 =10
en dan nogmals 1+0=1
dus reduceer tot resultaat <=9 is
en dit werkt goed.

ik wou nu een utzondering plaatsen:
Als in de loop van de reductie de nummer 11 word dan moet 11 zo blijven, niet meer gereduceerd tot 2 (1+1)
ik heb geprobeerd met
Code:
Loop Until som <= 9 and <>11
maar het werkt niet.
hoe moet ik veranderen?
dank u
satriano
 
ik zou de code na text changed in een nieuwe functie stoppen.
bv bereken functie met als parameter de 'text'.
vlak voor het einde van je functie zou ik een validatie doen ... if som.tostring().length > 1 then..
endan terug je berekenfunctie aanroepen ... met als parameter som.tostring()
dan zal je waarde correct geretourneerd worden...

Code:
Private Function Berekenen2(input As String) As String
        Dim som As Long = 0
        For Each i As Char In input
            som += Integer.Parse(i)

        Next
        If som.ToString().Length > 1 Then
            som = Berekenen2(som.ToString())
        End If
        Return som.ToString()

    End Function
 
Laatst bewerkt:
dag xanderke
ik heb niet alles goed begrepen, vrees ik.

Kunt niet uw tip tonen met de echte aanpassing ervan?

dank u
satriano
 
Ik zal nu proberen uw code te aanpassen.
Uw code in voor vb.net maar, zoals aangegeven aan het begin van mijn post,
mijn vraag ging over visualbasic6

Ik ga proberen.dank u
 
ik denk voor vb6 dat dit de oplossing zou moeten zijn...

Code:
 Function Berekenen2(txtinput As String)
        Dim som As Integer
        
        For i = 1 To Len(txtinput)
        som = som + CInt(Mid(Str, i, 1))
Next
        
        
        If som.ToString().Length > 1 Then
            som = Berekenen2(som.ToString())
        End If
        berkenen2 = som.ToString()

    End Function

in de textchanged zou ik gewoon label1.text =berekenen2(textvak1.text) doen...
 
ik dacht dat zo moest werken, volgens uw function tip, maar het werkt nog niet

Code:
Function Berekenen2(nummer As String)
        Dim som As Integer
        
        For i = 1 To Len(nummer)
        som = som + CInt(Mid(Str, i, 1))
Next
        
        
        If som.ToString().Length > 1 Then
            som = Berekenen2(som.ToString())
        End If
        Berekenen2 = som.ToString()

    End Function
 
ik dacht dat zo moest werken, volgens uw function tip, maar het werkt nog niet

Code:
Function Berekenen2(nummer As String)
        Dim som As Integer
        
        For i = 1 To Len(nummer)
        som = som + CInt(Mid(Str, i, 1))
Next
        
        
        If som.ToString().Length > 1 Then
            som = Berekenen2(som.ToString())
        End If
        Berekenen2 = som.ToString()

    End Function

wat werkt er dan niet? of waarmee heb je een probleem? kan je iets preciezer zijn?
 
Het is uitzondering (11) dat niet werkt.
Als ik bv 11 invoe of 11111111111 dan zou 11 uitkomen en niet 2
(zoals vroeger)

hier de volledig code (met uw function erbij)
Code:
Private Sub Text1_Change()
Dim i As Integer, nummer As String, som As Long
nummer = Text1.Text
Do
    som = 0
    For i = 1 To Len(nummer)
    som = som + Val(Mid(nummer, i, 1))
    Next
    nummer = som
Loop Until som <= 9
Label1.Caption = som
End Sub
Function Berekenen2(nummer As String)
        Dim som As Integer
        
        For i = 1 To Len(nummer)
        som = som + CInt(Mid(Str, i, 1))
Next
        
        
        If som.ToString().Length > 1 Then
            som = Berekenen2(som.ToString())
        End If
        Berekenen2 = som.ToString()

    End Function
met andere woorden: het werkt zolas vroeger, zonder Function. Geen error maar geen uitzondering van 11
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan