Arduino: Wie wird hier die Quersumme berechnet?
Ich habe hier den folgenden Teil eines Sketches:
byte Qsumme(int Zahl)
{
byte Ergebnis = 0;
while (Zahl > 0) {
Ergebnis = Ergebnis + Zahl % 10;
Zahl = Zahl / 10;
}
return Ergebnis;
}
Die Funktion soll die Quersumme der Zahl ausrechnen. Z.B.: 503 wird zu 8.
Ich verstehe jedoch nicht, wie das hier abläuft. Könnte mir das jemand erklären?
MfG
1 Antwort
Setzen wir doch einfach einmal die konkreten Werte ein:
Zahl = 503
Ergebnis = 0
503 > 0:
Ergebnis = 0 + 503 % 10 = 0 + 3
Zahl = 503 / 10 = 50;
50 > 0:
Ergebnis = 3 + 50 % 10 = 0 + 3
Zahl = 50 / 10 = 5
5 > 0:
Ergebnis = 3 + 5 % 10 = 5 + 3
Zahl = 5 / 10 = 0
0 > 0:
Ende
Interessant bei diesem Algorithmus ist:
1) Zum einen der Modulo-Operator (%). Er berechnet den Rest einer ganzzahligen Division.
Beispiele:
5 % 2 = 2 Rest 1 (2 * 2 + 1)
17 % 10 = 1 Rest 7 (1 * 10 + 7)
3 % 3 = 1 Rest 0 (1 * 3 + 0)
Um die Zahlen voneinander abzuspalten, wird also der Rest berechnet.
123 % 10 = 12 Rest 3
Dann wird mit Hilfe einer normalen Division die Zahl verringert.
123 / 10 = 12
Und wieder aufgespalten:
12 % 10 = 1 Rest 2
So lange, bis die Zahl so klein (<= 0) ist, sodass sie nicht mehr aufgespalten werden kann.
12 / 10 = 1
1 % 10 = 0 Rest 1
Die jeweiligen Restbeträge werden miteinander addiert.
2) Die Tatsache, dass mit Ganzzahlen gerechnet wird.
Normalerweise ergibt:
503 / 10 = 50.3;
Bei einer Division mit Ganzzahlen wird die Nachkommastelle allerdings kommentarlos abgetrennt. Daher ist das Ergebnis der obigen Division 50.
Viel Dank,
ich bin vor deiner Antwort selber auf die Idee gekommen die Werte in Python Shell einzugeben und dort diese manuell nachzurechnen, ähnlich wie du es gemacht hast. Danach ist mir auch alles klar geworden. Ich danke dir dennoch dass du dir die Zeit genommen hast. Im Gegenzug zeichne ich deine Antwort als die hilfreichste aus. :)