PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Quersumme berechnen



worldwind
05.07.2010, 16:04
Kann mir jemand erklären, wie ich mit Bascom am Besten die Quersumme von z.B. 1234 berechne? Die Zahl liegt als Integer vor.

PicNick
05.07.2010, 16:16
Du musst erst in einen string umwandeln und dann die zahlen zusammenzählen.

worldwind
05.07.2010, 17:11
Das habe ich befürchtet.
Also: Zahl in String umwandeln
String in Ziffern aufteilen
Ziffern addieren
und wieder in Integer zurückwandeln

Besserwessi
05.07.2010, 17:54
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.

Che Guevara
05.07.2010, 17:58
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)


ferdisch ;)

Das Ganze ginge natürlich auch ohne String, nur mit Zahlen ;)
Wenn dus wissen willst wie, einfach fragen

Gruß
Chris

p_mork
05.07.2010, 20:09
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

MfG Mark

Sauerbruch
06.07.2010, 20:03
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):


qs = qs + zahl MOD 10

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!

Ich habe den Code mal etwas umgestellt und ihn im Simulator mit allen möglichen Zahlen durchprobiert - so funktioniert es:


...
...
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
...
...

(Qs ist auch hier die Quersumme).

Gruß an alle Quersummen-Fans,

Daniel

Michael
06.07.2010, 20:48
Hallo Sauerbruch,


denn wie oft man die Variable "Zahl" auch immer durch 10 teilt - sie wird nie kleiner als 0 werden!
kleiner 0 war nicht verlangt.
9/10 = 0 Rest 9
Damit ist Zahl nicht > 0 und die Bedingung somit erfüllt.

Gruß, Michael