Algorithmus für Berechnung einer Quersumme

necoicould

Mitglied
Hallo ich quäle mich seit Stunden schon damit einen Algorithmus in Umgangssprache zu schreiben der schrittweise eine Quersumme einer Zahl berechnet.

Eine Vorlage habe ich im Internet schon gefunden:

solange zahl > 0
quer = quer + Rest bei Diffision von (zahl / 10)
zahl = zahl / 10 (ganzzahlig)

programmiert schaue es laut der website so aus::

main(void) {
int zahl=0, quer=0;
printf("Bitte Zahl eingeben : "); scanf("%d", &zahl);
while (zahl>0) {
quer += zahl % 10;
zahl /= 10;
}
printf("Die Quersumme ist %d\n", quer);
return 0;
}

Aber ich verstehe nicht ganz wie das gehen soll

und zwar habe ich folgendes mal umganssprachlich formuliert:


Setze zahl=0, quersumme=0

SOLANGE
zahl > 0
TUE
quersumme = quersumme + Rest bei Division (Zahl/10)
zahl = zahl / 10
Ergebnis : quersumme

So in etwa steht das dort in der Musterlösung auch

Was ich daraus interpretiere:

Solange "zahl" größer ist als 0 ist wird die variable "quersumme" mit dem Rest der Division von Zahl/10 addiert.

Wenn ich 23 eingeben würde. Wäre das 0 + 3
quersumme wäre nun 3

die variable "zahl" würde nun 23/10= 2,3 sein. 3 ist gespeichert, der algoritmus fängt neu an, da 3 > 0
quersumme = 3 + Rest der Vision von (2,3/10)

ab hier komm ich nicht weiter... irgendwie muss doch in der 2.schleife eine 2 raus kommen oder nicht? und danach muss Zahl kleiner 0 werden, so dass der algorithmus aufhört und man 2+3 hat
 
Was ich daraus interpretiere:

Solange "zahl" größer ist als 0 ist wird die variable "quersumme" mit dem Rest der Division von Zahl/10 addiert.

Wenn ich 23 eingeben würde. Wäre das 0 + 3
quersumme wäre nun 3

Nein schon falsch.
1.
23 mod 10 = 3 = quer
23/10 = 2 = zahl
2.
2 mod 10 = 2 = quer + altes quer = 3 + 2 = 5
2/10 = 0 --> Schleife raus
 
Wo ist das Problem? Die Schleife oben funktioniert tadellos, und hat ja auch exakt den selben Source wie unter Java.
Eine Ausgabe am Schleifenfuß wäre:

Code:
3 - 2
5 - 0

Du bist mit deiner Denkweiße am Ende des Posts durcheinander gekommen, u. A. testest du 23%10 in der While und nicht 23 / 10.
 
Hab kein anderes Forum gefunden^^

Habs verstanden. Danke

1.
23 mod 10 = 3 = quer quer ist also 3 <--altes quer
23/10 = 2 = zahl zahl ist also 2

2.
2 mod 10 + altes quer = neues quer = 5 <-- hab diese zeile geändert muss es net so heißen?
2/10 = 0 --> Schleife raus

Jo superrr Dankeee, habs nun kapiert.
 
Eine Frage noch mod beschreibt ja den Rest.

Aber bei:

23/10 = 2 = zahl

das ist doch eigentlich 2,3... gibt es ne Form wie er nur die Ganzzahl betrachtet.

hier mal meine Lösung

Setze quer ← 0, zahl ← 0

SOLANGE
zahl > 0 // So lange die zahl größer als Null ist
TUE // Tue folgendes:
quer = quer + 2 mod 10 // Erstelle ein neues "quer", aus:
// (alter) quer + dem Rest der Divison von (zahl/10)
und // Und tue auch folgendes:

zahl = zahl/2 (Ganzzahl) // Erstelle ein neues "zahl", aus:
// (alte) zahl / 2, wobei nur eine Ganzzahl als Ausgabe betrachtet
//wird

quer : Lösung // Das "quer" nach Ende des Algorithmus ist die Lösung
 
Der Datentyp ist int, bei Integers gibts keine Nachkommastelle. 2,3 = 2 ; 2,6 = 2 ; 2,9 = 2 ; 2,9999 = 2 usw 😀 Ansonstne kannste auch floor aus math.h nutzen denke ich ^^
 
Ich verstehe die Frage nicht.
"gibt es ne Form wie er nur die Ganzzahl betrachtet."
Er verwendet ja ausschließlich Ganzzahlen. Wenn du Gleitkommazahlen verwenden willst, nimm float oder double. Und falls du das nicht wusstest, nutze bitte ein Tutorial oder besorg dir ein (Online-)Buch, weil das sind die elementarsten Grundlagen.
 
ah ok, naja das problem ist, wir machen gerade in der uni OPAL, erstes semester....

und sollen halt einen allgemeinen algorithmus mit begriffen wie

FALLS DANN SOLANGE TUE benutzen...

ok das mit INT habe ich verstanden 😀

Vielen DAnk
 

Neue Themen


Zurück
Oben