Редуциране на числа
7 отговора
209 прегледа
Редуциране на числа
Здравейте! Не съм писал досега във форума, тъйкато отскоро се занимавам с Visual Basic.
Сигурно въпроса ми е много тъп, и се решава с един ред, но нямам представа наистина как става.
Та проблема ми е как да редуцирам три-четири или повече цифрено число, като събера числата помежду им. Например имам към променливата var стойността 5643, искам програмата ми автоматично да събере 5+6+4+3, и да направя същото с полученото 18, 1+8 = 9
Дано да сте разбрали какво точно ви питам. Надявам се на малко помощ.
()
Сигурно въпроса ми е много тъп, и се решава с един ред, но нямам представа наистина как става.
Та проблема ми е как да редуцирам три-четири или повече цифрено число, като събера числата помежду им. Например имам към променливата var стойността 5643, искам програмата ми автоматично да събере 5+6+4+3, и да направя същото с полученото 18, 1+8 = 9
Дано да сте разбрали какво точно ви питам. Надявам се на малко помощ.
()
Re: Редуциране на числа
Най лесно става да превърнеш променливата в стринг, ако не е, после правиш едно цикълче и со готов:
Private Sub NumReduce()
Dim Sum As Integer
Dim Var1 As Variant
Var1 = 123456
Do Until Len(Var1) = 1
For i = 1 To Len(Var1)
Sum = Sum + CInt(Mid(Var1, i, 1))
Next i
Var1 = Sum
Sum = 0
Loop
MsgBox Var1
End Sub
Където 1+2+3+4+5+6=21, после имаш 2+1=3 и съответно излиза кутийка с надпис 3. С този код би трябвало да можеш да редуцираш и безкрайно големи числа до цифра.
Наведи главата защото прелитам ниско с асконата !!!
Private Sub NumReduce()
Dim Sum As Integer
Dim Var1 As Variant
Var1 = 123456
Do Until Len(Var1) = 1
For i = 1 To Len(Var1)
Sum = Sum + CInt(Mid(Var1, i, 1))
Next i
Var1 = Sum
Sum = 0
Loop
MsgBox Var1
End Sub
Където 1+2+3+4+5+6=21, после имаш 2+1=3 и съответно излиза кутийка с надпис 3. С този код би трябвало да можеш да редуцираш и безкрайно големи числа до цифра.
Наведи главата защото прелитам ниско с асконата !!!
Редактирано от Ascona83 на
Re: Редуциране на числа
Нещо целта на занятието ми убягва, защото ще се получи същото за 1234 и 4321 например.
Function convert(inp)
inp = CStr(inp)
For i = 1 To Len(inp)
out = out + CInt(Mid(inp, i, 1))
Next
convert = out
End Function
После може да викнеш функцията отново с резултата, ако е >9
Function convert(inp)
inp = CStr(inp)
For i = 1 To Len(inp)
out = out + CInt(Mid(inp, i, 1))
Next
convert = out
End Function
После може да викнеш функцията отново с резултата, ако е >9
Re: Редуциране на числа
Ето ти го с рекурсия:
Слагаш един TextBox и един CommandButton, и този код работи.
Щирлиц
Private Sub Command1_Click()
If Not IsNumeric(Text1.Text) Then
MsgBox "Not number!"
Exit Sub
End If
Text1.Text = Recurse(Val(Text1.Text))
End Sub
Private Function Recurse(intNum As Long) As Long
Dim strNum As String, intCount As Long
strNum = Trim(Str(intNum))
intNum = 0
For intCount = 1 To Len(strNum)
intNum = intNum + Val(Mid(strNum, intCount, 1))
Next intCount
If intNum > 9 Then intNum = Recurse(intNum)
Recurse = intNum
End Function
Слагаш един TextBox и един CommandButton, и този код работи.
Щирлиц
Re: Редуциране на числа
Що не ви харесва с цикъл в цикъла?
Наведи главата защото прелитам ниско с асконата !!!
Наведи главата защото прелитам ниско с асконата !!!
VB.NET
На VB.NET ще изглежда така:

Function ReduceNumbers(ByVal Num As Long) As Long
If Num <> 0 Then
Dim Result As Long = 0
Dim Medium As String = ""
Dim i As Long = 0
Medium = CStr(Num)
Medium.Trim()
For i = 1 To Medium.Length
Result += CLng(Mid(Medium, i, 1))
Next
Return Result
End If
End Function