Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Die Aufgabe : Schreiben Sie ein Programm mit zwei Funktionen zur Berechnung der Fakultät einer na- türlichen Zahl, die von der Eingabe gelesen wird. Die eine Funktion soll die Fakultät mit einem iterativen Algorithmus berechnen, die andere Funktion soll dies rekursiv ausfüh- ren. n n−1n! = ∏i = n⋅∏i = 1⋅2⋅3⋅4⋅...⋅n und 0! = 1 i=1 i=1 ich weiss ungefähr das ich zwei schleifen brauche int zahlen .. printf .... scanf ... doch wie strukturiere ich es ? Zitieren
Chiyoko Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Wieso zwei Schleifen? Überlege dir, wie du die Fakultät überhaupt berechnen kannst. 5! = 5 * 4 * 3 * 2 * 1 oder 5! = 5 * 4! Kennst du eine Schleifenform, die vielleicht so etwas wie eine Laufvariable hat? Versuche dein großes Problem (z.B. 5!) in kleinere Probleme zu zerlegen, bis es trivial wird. Zitieren
KeeperOfCoffee Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 (bearbeitet) static long fakIterativ(int n) { long rc = 1; /* i=2, da wir bei 1 eine 1 ausgeben*/ for(int i = 2; i<=n;i++){ rc *= i; } return rc; } static long fakRek(int i){ if (i == 1) { return 1; } else { return fakRek(i-1) * i; } } Bearbeitet 11. Dezember 2017 von KeeperOfCoffee Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 #include <stdio.h> #include <stdlib.h> #include <math.h> //iterativ void iterativ (){; int fakultaet(int n); int summe = 1; for(int i = 2;i<=n;i++) summe *= i; return summe; } //rekursiv int fakultaaet( int n) { if( n == 1) return 1; return n * fakultaet(n-1); } Ich habe etwa so irgendwie was versucht aber scheint nicht zu funktionieren :/ Zitieren
Whiz-zarD Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Was funktioniert denn daran nicht? Bis auf die Syntax-Fehler. Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Es funktioniert einfach nicht ^^ Zitieren
Mttkrb Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Hi, mit der Aussage kommen wir leider auch nicht weiter. Welche Art von Fehler gibt es? Compilerfehler oder Fehler bei der Ausgabe? Wenn du den Code wie hier: einfach versucht hast zu kompilieren, gibt es natürlich einen Fehler, den dir dein Compiler auch anzeigt. Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Apple Mach-O Linker (ld) Error Group "_main", referenced from: clang: error: linker command failed with exit code 1 (use -v to see invocation) Das zeigt Xcode an Zitieren
Mttkrb Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 hast du eine main-Funktion definiert? Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 #include <stdio.h> #include <stdlib.h> #include <math.h> int main (){ int iterative(int n); { int sum = 0; for(int i = 0; i < n; ++i) { sum += i; } return sum; } int rekursive(int n); if(n == 0){ return 0; return n + rekursive(n);} } Also der sagt, dass das n nicht deklariert ist und außerdem muss ich irgendwie die Zahl selber eingeben die Fakultuert werden soll Zitieren
Whiz-zarD Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Bitte arbeite den Schulstoff noch mal durch. Das kann syntaktisch schon mal nicht funktionieren, was du da bastelst. Du hast eine Funktion in einer Funktion definiert. Das geht nicht. Zitieren
Mttkrb Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Funktionen werden nicht innerhalb der main-Methode definiert. Dort können die höchstens aufgerufen werden. Deswegen kommt es zu deinen Fehlern. Zitieren
Mttkrb Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 (bearbeitet) Funktionieren würde so etwas hier: #include <stdio.h> #include <stdlib.h> #include <math.h> int funktionA(int parameter_1, int parameter_2, int parameter_3) { return (parameter_1+parameter_3)*parameter_2; } int main() { int a=0,b=5,c=6,ergebnis_d=0; ergebnis_d=funktion(a,b,c); printf("%d\n",ergebnis_d); } Bearbeitet 11. Dezember 2017 von Mttkrb Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 (bearbeitet) #include <stdio.h> #include <stdlib.h> #include <math.h> int iterative(int n); { int sum = 0; for(int i = 0; i < n; ++i) { sum += i; } return sum; int rekursive(int n); if(n == 0){ return 0; return n + rekursive(n); } int main () printf("Bitte Fakultät eingeben: "); scanf("%d", &n); printf("iterativ ergebnis: %d\n", int iterative(int n)); printf("rekursiv ergebnis: %d\n", int rekursive(int n)); } Bearbeitet 11. Dezember 2017 von Tikorz Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Irgendwas stimmt mit der Klammer nicht ... Zitieren
Whiz-zarD Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Ist immer noch syntaktisch falsch ... Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Welche Zeile denn ? ich verstehe nicht ganz was syntaktisch falsch ist .. Zitieren
Mttkrb Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 (bearbeitet) Jede Klammer die du aufmachst, muss auch wieder zugemacht werden. (Und andersrum) Als Beispiel nimm mal meinen Beitrag von eben. Dort sieht du auch, wie Funktionen definiert werden. Wenn du ein anderes Beispiel möchtest, schau hier: https://de.wikipedia.org/wiki/C_(Programmiersprache)#Funktionen Edit: Es bringt nichts, wenn du dir die Lösungen irgendwie zusammenkopierst und dann hoffst, dass es irgendwie läuft. Versuch mal, das geschriebene zu verstehen. Bearbeitet 11. Dezember 2017 von Mttkrb Zitieren
Gast Tikorz Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 Ich habe es mittlerweile gelöst ich bedanke mich für die Antworten . Ich habe eine neue Aufgabe, ich schaue wie weit ich komme und dann wende ich mich nochmal an die Community. Ich versuche mein Bestes zu geben. Evtl. kann man mir erstmal erklären was getan werden soll . Ich erstelle erstmal ein neuen Thread. Zitieren
KeeperOfCoffee Geschrieben 11. Dezember 2017 Geschrieben 11. Dezember 2017 (bearbeitet) Es ist für keine Seite sinnvoll, dir den fertigen Code zu geben. Du lernst nichts, wir vergeuden Zeit. Also setz dich doch mal 10-20 Min hin und wiederhole die Basics http://lmgtfy.com/?q=c+tutorial Zitat Ich habe es mittlerweile gelöst ich bedanke mich für die Antworten . Ich habe eine neue Aufgabe, ich schaue wie weit ich komme und dann wende ich mich nochmal an die Community. Ich versuche mein Bestes zu geben. Evtl. kann man mir erstmal erklären was getan werden soll . Ich erstelle erstmal ein neuen Thread. Wir sind nicht hier um deine Hausaufgaben zu machen ... Du weißt sicherlich nicht, wieso dein Code nicht funktioniert hat, oder? Bearbeitet 11. Dezember 2017 von KeeperOfCoffee Zitieren
Rienne Geschrieben 12. Dezember 2017 Geschrieben 12. Dezember 2017 Mal ganz davon abgesehen, dass es in dem Code, den du gepostet hast, Syntaxfehler gibt...du berechnest dort die Summe von 1 bis n, aber definitiv nicht die Fakultät. Sicher, dass dein Code mittlerweile wirklich das ausgibt, was er soll (die Fakultät) und nicht etwas ganz anderes? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.