C++ Summe aller Zahlen, zwischen 2 ganzen Positiven Zahlen

7 Antworten

Das ist einfach. Gibt der benutzer die in der richtigen Reihenfolge ein, kann man die Eingaben sofort benutzen. Dazu zwei Variablen (INT) Min und Max anlegen und die eingegebenen Werte drin merken.

Andernfalls per IF feststellen ob die Eingabe nicht verdreht ist.  

IF(min>max)

Dann vertauschen, so einfach.

Man kann jetzt in einer Schleife MIN hochzählen bis MIN==MAX oder man nimmt einfach eine neue Variable, z.B. I wie Index:

I=min;

While(I<MAX)

{ Summe =summe + I;

}

Und schon wird alles brav addiert. Beim anlegen der Summe natürlich diese ¨leer¨ machen, also z.B.

Int Summe=0;

Du solltest allerdings statt INT ein LONG nehmen, denn für kleine Zahlen hat man das nach Gauß mit einem Taschenrechner auch so schnell berechnet.

Auf keine Fall ein FOR Schleife (siehe unten)!

Lies die beiden Zahlen ein.

Prüfe, ob die zweite größer ist als die erste, wenn nicht vertausche sie.

Berechne das Ergebnis mit der untengenannten Summenformel und gib es aus.

Beachte folgende Stolpersteine:

Nimmst die ganze Zahlen (INTEGER) dann bedenke, daß bei der Multiplikation zweier großer Zahlen ein Bereichsüberlauf droht.

Nimmst Du Fließkommazahlen (FLOAT), dann besteht die Gefahr, daß bei der Multiplikation am Ende Nachkommastellen entfallen können.

(bcords hat das angedeutet)

Wie Du beide Probleme umgehst, ist Bestandteil der Aufgabe ;-)

Und nun los, das kriegst Du hin.

CSANecromancer  28.04.2015, 09:03

Auf keine Fall ein FOR Schleife (siehe unten)!

Hehehe, darüber könnte man jetzt streiten. >:)

Zugegeben: Die Summenformel ist die eleganteste Methode mit dem geringsten Aufwand. In der Praxis sollte sie aber definitiv entweder in einer (meinetwegen inline-)Methode namens "GaussSum" oder ähnlich abgelegt werden oder entsprechend kommentiert werden (wer macht das schon?), denn sonst kann ein unstudierter Programmierer später einmal den Sinn und Zweck der Formel nicht begreifen. Und nein, er kann sie auch nicht erkennen oder bei Google nachschlagen oder sonst irgendwas. Er steht dann einfach davor und begreift nicht, was da geschieht.

In so einem Fall ist eine FOR-Schleife zwar uneleganter und hat ggf.  - abhängig von den Grenzwerten - eine gigantisch höhere Laufzeit, ist aber vom Ablauf und ihrer Funktion her sehr viel einfacher zu begreifen. Im Fall einer einfachen Aufsummierung und der Leistungsfähigkeit heutiger Rechner würde ich außerhalb der inneren Schleifen des Programms wohl tatsächlich die hässliche FOR-Schleife verwenden, um auch anderen Programmierern die Chance zu geben, den Ablauf des Programms ohne meine direkte Anleitung nachvollziehen zu können.

Kurz und gut: Außerhalb "wissenschaftlicher Biotope" würde ich Source schon so schreiben, dass auch "normal begabte" Programmierer eine Chance haben, den Code zu verstehen und von solchen Scherzen

int start = 100; // Beispielswert

int end = 547; // Beispielswert

unsigned long sum = 0;

while(end - start) sum += end--;

eher Abstand nehmen, da sie vielleicht effizient aussehen, aber durch ihre schwere Lesbarkeit die Wartung des Programms unnötig erschweren.

1

Am einfachsten ist, du berechnest die Summe von 1 bis a, dann von 1 bis b und ziehst dann die erste Summe von der zweiten Summe ab.

S1 = a(a+1)/2, S2 = b(b+1)/2, Ergebnis = S2 - S1

Direkt:

Ergebnis = (b(b+1)-a(a+1))/2

Woher ich das weiß:Berufserfahrung – Programmierer
Suboptimierer  27.04.2015, 17:08

PS: kann sein, dass du am Ende noch +a rechnen musst, denn die untere Grenze gehört noch dazu oder direkt anstelle a(a+1) schreibst du (a-1)a, du ziehst also die Summe bis zum Vorgänger von a ab.

1

Die einfachste Lösung wäre eine For-Schleife, die bei dem ersten Wert beginnt und bis zu 2 Wert hochzählt. Dann hast Du noch eine Variable, die bei jedem durchlauf um die aktuelle Zahl erhöht wird. Dazu kannst Du die Laufvariable der Schleife benutzen.

Mit ner Forschleife. Startwert ist der niedrigere Wert, Endwert der größere und mit 1 wird inkrementiert.

GurillazYT 
Fragesteller
 27.04.2015, 17:08

Also vielleicht füge ich die Aufgabenstellung direkt ein:

Lesen Sie zwei positive ganze Zahlen ein, und berechnen Sie die Summe aller Zahlen, die zwischen der kleineren und der größeren Zahl liegen (einschließlich der beiden eingegebenen Zahlen), und geben Sie diese Summe aus!

Mein Problem ist folgendes ich weiß nicht wo ich anfangen soll, heißt das ich selbst soll die 2 Zahlen bestimmen oder das der Nutzer des Programmes 2 Zahlen eintippt und dann die Summe aller Zahlen dazwischen ausrechnet ? 

Ich stehe echt auf dem Schlauch, wir sollen das ganze mit einer While Schleife lösen. 

1
EightSix  27.04.2015, 18:00
@GurillazYT

Naja logischerweise gibt die der Benutzer ein. Die While Bedingung ist Zählervariable <= größerer Wert. Zählervariable ist anfangs der kleinere Wert und wird immer um 1 erhöht. Einer temporären Summenvariable wird die jeweilige Zahl addiert.

Man könnte dir hier den ganzen Code hinschreiben aber denke als InfoStudent sollte man sich den 5-Zeiler aus den Ärmel schütteln.

1