Kann mir jemand erklären, wie ich mit Bascom am Besten die Quersumme von z.B. 1234 berechne? Die Zahl liegt als Integer vor.
Druckbare Version
Kann mir jemand erklären, wie ich mit Bascom am Besten die Quersumme von z.B. 1234 berechne? Die Zahl liegt als Integer vor.
Du musst erst in einen string umwandeln und dann die zahlen zusammenzählen.
Das habe ich befürchtet.
Also: Zahl in String umwandeln
String in Ziffern aufteilen
Ziffern addieren
und wieder in Integer zurückwandeln
Wenn man die Umwandlung in die Dezimaldarstellung von Hand macht, braucht man den String nicht. Man bekommt immer nur ein Stelle zur Zeit und addiert die dann auf.
Viel einfacher wird es damit aber auch nicht.
ferdisch ;)Code:dim zahl as integer
dim tmpstr as string * 5
dim tmpint as integer
zahl = 1234
tmpstr = str(zahl)
tmpint = val(mid(tmpstr,1,1)) + val(mid(tmpstr,2,1)
tmpint = tmpint + val(mid(tmpstr,3,1)
tmpint = tmpint + val(mid(tmpstr,4,1)
Das Ganze ginge natürlich auch ohne String, nur mit Zahlen ;)
Wenn dus wissen willst wie, einfach fragen
Gruß
Chris
MfG MarkCode:Dim qs As Byte ' enthält am Ende die Quersumme
qs = 0
while zahl > 0 do
qs = qs + zahl MOD 10
zahl = zahl / 10
wend
Elegant, elegant mit dem "MOD 10"!
Die folgende Zeile ist allerdings zumindestens bei meinem Bascom ( 1.11.8.8 ) ein Problem (wohl wegen zu vieler Operationen auf einmal):
Außerdem wird die While-Wend-Schleife wohl nie verlassen werden, denn wie oft man die Variable "Zahl" auch immer durch 10 teilt - sie wird nie kleiner als 0 werden!Code:qs = qs + zahl MOD 10
Ich habe den Code mal etwas umgestellt und ihn im Simulator mit allen möglichen Zahlen durchprobiert - so funktioniert es:
(Qs ist auch hier die Quersumme).Code:...
...
Dim Qs As Byte
Dim Rest As Byte
Qs = 0
While Zahl > 9
Rest = Zahl Mod 10
Qs = Qs + Rest
Zahl = Zahl / 10
Wend
Qs = Qs + Zahl
...
...
Gruß an alle Quersummen-Fans,
Daniel
Hallo Sauerbruch,
kleiner 0 war nicht verlangt.Zitat:
denn wie oft man die Variable "Zahl" auch immer durch 10 teilt - sie wird nie kleiner als 0 werden!
9/10 = 0 Rest 9
Damit ist Zahl nicht > 0 und die Bedingung somit erfüllt.
Gruß, Michael