0 Daumen
1,1k Aufrufe

Schreiben Sie eine Java-Methode geometrischeSumme, welche die folgende Formel berechnet

                              ∑ (steht über den summenzeichen) =0 (steht unter summenzeichen)

                                    q hoch i= 1 + + hoch 2 + ⋯+ hoch

Hinweis: Math.pow darf nicht verwendet werden!


Vielen Dank im voraus

von

Die Summe ist nicht ersichtlich.

1 Antwort

+2 Daumen

Hallo,

bin zwar in der Syntax von Java nicht bewandert, aber ich glaube, dass Du kein Problem hast unten stehenden Code in Java zu übersetzen. Ich unterstelle, die zu berechnende Summe \(s\) ist$$s = \sum_{i=0}^n q^i$$

Du benötigst neben einem Laufindex 'i' zwei Variablen, die Summe 'sum' und den aktuellen Summanden 'q_hoch_i'. Die Summe wird mit 0 initialisert und 'q_hoch_i' mit 1, da \(q^0=1\) ist. Mit jedem Durchlauf einer Schleife addiere 'q_hoch_i' zur Summe hinzu und multipliziere 'q_hoch_i' mit dem 'q' aus der Vorgabe.

Die Funktion dazu in C++:

double sum_of_qi(int n, double q)
{
    double q_hoch_i = 1.;
    double sum = 0.;
    for (int i = 0; i <= n; ++i)
    {
        sum = sum + q_hoch_i;
        q_hoch_i = q_hoch_i * q;
    }
    return sum;
}

von

Wenn du Pre-Increment in der for-Schleife nutzt, dann müsste die Bedingung doch <n sein, oder habe ich einen Denkfehler?

Wenn Du mit 'Pre-Increment' das ..; ++i) in der Zeile mit for meinst, so hast Du einen Denkfehler. An dieser Stelle ist es funktional egal, ob da ++i oder i++ steht. Da der Returnwert dieser Operation von niemanden genutzt wird, kommt es nur darauf an, dass am Ende die Variable i um 1 inkrementiert wurde. Das ist in jedem Fall gegeben.

Früher in C war i++ üblich. In C++ könnte dieses i aber auch ein komplexer Iterator sein, und das i++ erzeugt eine zusätzliche Kopie des Iterators, der als Returnwert zurückgegeben wird. Diese Kopie kann man sich aber sparen, daher habe ich mir angewöhnt an dieser Stelle immer das Pre-Increment zu benutzen. Bei int-Variablen ist das aber egal.

Siehe auch die Literatur von Scott Meyers. In einem von den Bänden 'Effekties C++' ist das beschreiben.

Ah ok. Noch nie davon gehört, dsnke für die Aufklärung!

Das heißt, das Inkrement wird so und so immer nach dem Anweisungsblock ausgeführt?

Das heißt, das Inkrement wird so und so immer nach dem Anweisungsblock ausgeführt?

Ja!

Im dritten Teil des for-Blocks wird am Ende der Schleife alles ausgeführt, was da steht. Hier könnte man auch schreiben:

for (int i = 0; i <= n; ++i, q_hoch_i *= q)
        sum = sum + q_hoch_i;
... dient auch zur Verwirrung der Anfänger ;-)

Sehr interessant! Das ist neu für mich, danke!

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community