Algorithmen
-
@Finnegan sagte in Algorithmen:
Ah, sehe schon. Nicht alle Kontrollpfade in ffunk geben einen int zurück.
Ich denke auch, du hast den Pseudocode nicht korrekt gelesen. Das return kommt erst, wenn alle Schleifen durch sind.Genau ich hab das ausprobiert aber mein nächstes Problem ist das ich keinen Wert als return value bekomme. Ich hoffe du kannst mir helfen.
#include <iostream> #include <iomanip> using namespace std; int ffunk(int x){ int zahler = 0; for(int i = 0; i <= x; i++){ for(int j = x; j <= i; j--){ zahler = zahler + 1; } } return zahler; } int main(){ int n; cout << "Geben Sie n ein: " << endl; cin >> n; ffunk(n); }
-
@JohannesK sagte in Algorithmen:
@Finnegan In Zeile 7 kriege ich eine Warnung:
"Loop will run at most once(loop increment never executed)"
Das ist die innere Schleife. Überleg mal, warum die überhaupt nur ein einziges mal durchlaufen werden kann. Du hast da einen Bug - schau mal auf die Schleifeneintrittsbedingung
-
-
@manni66 sagte in Algorithmen:
Woher weißt du das?
Kann sein das ich jetzt völlig falsch liege, aber kann es sein das ich ein Couturier für die Return Value vergessen habe
-
@manni66 Ich kann nur die Zahl n eingeben, aber der Compiler spuckt danach keinen Wert aus
-
@Finnegan Ich glaube ich hab den Fehler gemacht, dass ich j<=i geschrieben habe anstatt j >= i ?
-
@JohannesK sagte in Algorithmen:
@Finnegan Ich glaube ich hab den Fehler gemacht, dass ich j<=i geschrieben habe anstatt j >= i ?
Ja, ich denke auch.
-
Ich glaube ich habe es jetzt geschafft:
#include <iostream>
#include <iomanip>
using namespace std;int ffunk(int x){ int zahler = 0; for(int i = 0; i <= x; i++){ for(int j = x; j >= i; j--){ zahler = zahler + 1; } } return zahler; } int main(){ int n; cout << "Geben Sie n ein: " << endl; cin >> n; ffunk(n); cout << ffunk(n) << endl; }
-
@JohannesK sagte in Algorithmen:
ffunk(n);
cout << ffunk(n) << endl;Warum wird die Funktion jetzt zweimal aufgerufen?
-
@manni66 So kann mir das Ergebnis angezeigt werden
-
@JohannesK sagte in Algorithmen:
@manni66 So kann mir das Ergebnis angezeigt werden
Offensichtlich brachst du das erste Ergebnis nicht.
-
@manni66 Ich verstehe nicht ganz
-
@JohannesK sagte in Algorithmen:
@manni66 Ich verstehe nicht ganz
Was stellst du dir vor was da jetzt passiert?
-
@Finnegan ist das die Folge (n*(n+1))/2
-
@JohannesK sagte in Algorithmen:
@Finnegan ist das die Folge (n*(n+1))/2
Ich denke schon, dass das die berechnete Funktion ist, ja (wobei das genau genommen keine Folge, sondern deren Summenformel ist). Bzw.
... wenn ich keinen Denkfehler gemacht habe.
-
@Finnegan Super vielen Dank !
-
Was @manni66 dir sagen will, ist, daß der erste Aufruf überflüssig ist:
int main(){ int n; cout << "Geben Sie n ein: " << endl; cin >> n; cout << ffunk(n) << endl; }
-
Ich würde das ja anders lösen, da es sich wohl um eine Aufgabe aus der theoretischen Informatik handelt.
Die erste Schleife lässt sich nachübersetzen, die zweite Schleife
, das ergibt zusammen