# Algorithmus für Berechnung einer Quersumme



## necoicould (4. Nov 2010)

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



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


----------



## eRaaaa (4. Nov 2010)

necoicould hat gesagt.:


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



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


----------



## necoicould (4. Nov 2010)

hmm, ok gibt es ein Programm womit ich den C Code eintippen und ausprobieren kann?


----------



## eRaaaa (4. Nov 2010)

necoicould hat gesagt.:


> hmm, ok gibt es ein Programm womit ich den C Code eintippen und ausprobieren kann?



Was hat das mit Java zu tun? 
Aber ich hab mal für dich gegooglet:
Compile Your C Programs Quickly Using Online C Compiler (war der erste Fund, nicht getestet)


----------



## Volvagia (4. Nov 2010)

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:


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


----------



## necoicould (4. Nov 2010)

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.


----------



## necoicould (4. Nov 2010)

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


----------



## eRaaaa (4. Nov 2010)

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


----------



## Volvagia (4. Nov 2010)

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.


----------



## necoicould (4. Nov 2010)

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


----------

