kuub Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 hi, ich versuche schon seit studen eine einfache fakultätsberechnung in C zu programmieren nur leider klappt das die ganze zeit irgendwie nicht. weiß einer von euch vielleicht, wie ich eine fakultätsberechnung in C programmieren kann?????? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Was klappt denn nicht? Wie sieht dein Ansatz aus? Weißt du wie die Fakultät berechnet wird? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kuub Geschrieben 13. Oktober 2005 Autor Teilen Geschrieben 13. Oktober 2005 ich brauch nur die Berechnung von der Fakultät, Ansatz wollte ich mit For-Schleife machen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Ansatz wollte ich mit For-Schleife machen.Dann berichte uns doch einfach mal, was du bisher schon hast, und zeig mal genau die Stelle auf, an der es hakt. Hast du generell noch Probleme mit dem Verstehen des Konzepts "Fakultät" oder bei der genauen Umsetzung? Also lass mal was Input raus, es ist schließlich deine Hausaufgabe, nicht unsere Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kuub Geschrieben 13. Oktober 2005 Autor Teilen Geschrieben 13. Oktober 2005 okey, bis jetzt habe ich nur: (muss dazu sagen ich bin ein Anfänger:-) ) #include <stdio.h> #inlcude <math.h> void main() { unsigned int n, a, fakultat; printf("Bitte geben Sie eine natuerliche Zahl ein:"); scanf("%d",&n); for (a=0;n=0;a++) { fakultat =n*a; } printf("Fakultaet ist: %d\n",fakultat); } ich hoffe du kannst mir irgendwie weiter helfen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 rechne mal Deine Schleife mit der Hand RICHTIG durch. Tip: bei was fängt dein a & n an? Und wie wird die Fakultät berechnet? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kuub Geschrieben 13. Oktober 2005 Autor Teilen Geschrieben 13. Oktober 2005 ich habs falsch geschrieben meine schleife lautet: for(a=1;n=a;a++); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 for(a=1;n=a;a++); Eine for-Schleife läuft, solange ihre Bedingung wahr ist. Ich habe die Bedingung in deinem Code mal gekennzeichnet. Was du da machst, ist eine Zuweisung. Für einen Vergleich musst du == benutzen. Aber selbst dann passt's noch nicht. Formulier es doch mal auf deutsch: Die Schleife soll laufen, solange ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Hallo, die Berechnung der Fakultät im Schleifenkörper solltest Du auch nochmal überdenken. Bei jedem Durchlauf wird der Variablen "fakultaet" einer neuer Wert zugewiesen (n*a). Die Fakultät berechnet sich aber anders: 1! = 1 2! = 1*2 3! = 1*2*3 4! = 1*2*3*4 usw. usf. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mr-blister Geschrieben 13. Oktober 2005 Teilen Geschrieben 13. Oktober 2005 Fakultät in C mir Rekursion: int fak(int n){ int erg; if(n == 0){ erg = 1; }else{ erg = n * fak(n-1) ; } return(erg); } Gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Carnie Geschrieben 14. Oktober 2005 Teilen Geschrieben 14. Oktober 2005 blister ist zwar nett das du die lösung postest aber ich denke nicht das er es so lernt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mr-blister Geschrieben 14. Oktober 2005 Teilen Geschrieben 14. Oktober 2005 Sorry aber ich wusste nicht das das hier der Klassenraum ist. Ich hab die Frage so verstanden, dass er eine Fakultät in C haben möchte und keinen seelischen Beistand für das Erstellen einer solchen. Da stand ja: weiß einer von euch vielleicht, wie ich eine fakultätsberechnung in C programmieren kann? und nicht sowas wie: "kann mir jemand einen Tipp geben/helfen etc." Aber gut, ich bin ja auch lernfähig und werd in Zukunft zweimal nachdenken Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kuub Geschrieben 15. Oktober 2005 Autor Teilen Geschrieben 15. Oktober 2005 also ich bin eine Sie und kein er. und mr blister danke sehr deutlicher hätte ich es nicht ausdrücken können, ich sagte ja bereits auch, dass ich eine Anfängerin bin und nicht weiß wie ich es machen soll. Vielen Dank du hast mir sehr geholfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 15. Oktober 2005 Teilen Geschrieben 15. Oktober 2005 Du kanst die Fakultät natürlich auch mit einer Schleife ohne rekursive Funktionsaufrufe berechnen (jeder rekursive Algorithmus lässt sich in einen nicht-rekursiven umwandeln). Beispiel für eine mögliche Umsetzung mit einer Schleife: unsigned int fak(int eingabe) { if(eingabe<=1) return 1; // da fak(0) gleich 1 ist und fak(1) ebenfalls 1 ist int ergebnis=1; do { ergebnis = ergebnis * eingabe; eingabe--; }while(eingabe>1); return ergebnis; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jma Geschrieben 20. Oktober 2005 Teilen Geschrieben 20. Oktober 2005 bei der berechnung in eurer Art kommt es schnell zu numerischen Fehlern, (Überlauf etc), also sollte man die Eingabe nur von einem bestimmten Wertebereich zulassen. Oder auf andere Möglichkeiten der Fakultätsberechnung zugreifen. statt int würde ich aber gleich long verwenden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 20. Oktober 2005 Teilen Geschrieben 20. Oktober 2005 Hallo, statt int würde ich aber gleich long verwenden Das hilft auch nicht, da damit das generelle Problem nicht behoben wird. Zumal bei vielen Architekturen/Compilern "sizeof(long)==sizeof(int)" gilt. Abhilfe schafft in diesem Fall eine Bignum-Bibliothek. Aber ich denke mal, es ging dem Fragesteller ja generell um den Algorithmus. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Like Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Hallo zusammen! Hoffe, der Thread ist noch nicht tot. Habe jetzt auch ein Problem mit der Fakultät. Meine Programmierung sieht wie folgt aus: #include <stdio.h> void main () { /*Deklaration der Variablen*/ double n, faktor, ergebnis; printf("Bitte Zahl fuer n-Fakultaet eingeben! "); /*Benutzereingabe wird von Tastatur genommen und der Variablen n zugeteilt*/ scanf("%lf",&n); /*Für Variable ergebnis wird der Anfangswert 1 festgelegt*/ ergebnis = 1; /*Schleife: Für den faktor wird der Anfagswert 1 festgelegt*/ /*Endekriterium = MN*/ for(faktor = 1; faktor <= n; faktor++) { /*Reihe: Multiplizieren von m mit p zu p (ergebnis=ergebnis*faktor)*/ ergebnis *= faktor; /*Ausgabe der drei ersten Teilsummen und des Ergebnisses für n!*/ if (faktor == 1) { printf("\nTeilsumme Nr. 1 lautet: %lf\n", ergebnis); } else if (faktor == 2) { printf("Teilsumme Nr. 2 lautet: %lf\n", ergebnis); } else if (faktor == 3) { printf("Teilsumme Nr. 3 lautet: %lf\n", ergebnis); } } printf("\nDas Ergebnis der n-Fakultaet lautet: %lf\n\n\n",ergebnis); } Die Aufgabenstellung sieht eine solche arithmetische Lösung leider vor. Wenn ich jetzt eine größere Zahl eingebe, kann er diese nicht mehr darstellen sondern gibt aus: "1.#inf00". Die Aufgabenstellung sieht nämlich weiterhin vor, dass ich dort meine 6-Stellige Matrikelnummer eingeben soll..... Kann mir wer helfen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 printf - Wikipedia, the free encyclopedia Vesuche mal von den double-Werte loszukommen. Verwende mal statt dessen unsigned long. Noch ein Tip: printf("Teilsumme Nr. %x lautet: %lf\n",faktor, ergebnis); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Like Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Weis nicht ob ich das darf, da wir unsigned noch nicht hatten. Gibt es keine andere Möglichkeit, den Wertebereich zu steigern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Vesuche mal von den double-Werte loszukommen. Verwende mal statt dessen unsigned long.Hast du dafür auch eine Begründung? In double passen erheblich größere Zahlen als in irgendeinen Integer-Typ. Die Aufgabenstellung sieht nämlich weiterhin vor, dass ich dort meine 6-Stellige Matrikelnummer eingeben soll.....Bist du ganz sicher, dass du die Aufgabenstellung richtig verstanden hast? Die Fakultät einer sechsstelligen Zahl kann locker auf über 1 Million Stellen kommen, da hilft dir kein noch so großer eingebauter Datentyp weiter, dafür gibt es spezielle Bibliotheken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schandfleck Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Weis nicht ob ich das darf, da wir unsigned noch nicht hatten. Gibt es keine andere Möglichkeit, den Wertebereich zu steigern? Es gibt noch long double. Der Wertebereich von long ist i.A. kleiner als der von double. U.U. war es der Sinn hinter der Aufgabe, eine 6stellige Zahl einzugeben, auf die numerischen Grenzen aufmerksam zu machen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Like Geschrieben 3. November 2010 Teilen Geschrieben 3. November 2010 Der Einwand von Klotzkopp ist berechtigt. Ich glaube, das die Aufgabe eine andere ist. Die Fakultät einer Zahl mit Hilfe arithmetischer Operationen zu lösen ist aber tortzdem Bestandteil. Soweit läuft das ja. Danke erstmal an euch alle. Bei weiteren Fragen werde ich euch nochmal versuchen zu konsultieren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sassy Geschrieben 5. November 2010 Teilen Geschrieben 5. November 2010 Naja du hättest dir ja auch mal den Artikel in Wikipedia zur Fakultät durchlesen können, da ist oft auch Pseudocode dabei. Durch die fertige Lösung hat sie vermutlich 0 Lerneffekt. Denn das schwierige beim Programmieren ist nicht die Syntax, sondern sich Algorithmen zum Lösen von Problemen auszudenken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.