kuub Geschrieben 13. Oktober 2005 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??????
Guybrush Threepwood Geschrieben 13. Oktober 2005 Geschrieben 13. Oktober 2005 Was klappt denn nicht? Wie sieht dein Ansatz aus? Weißt du wie die Fakultät berechnet wird?
kuub Geschrieben 13. Oktober 2005 Autor Geschrieben 13. Oktober 2005 ich brauch nur die Berechnung von der Fakultät, Ansatz wollte ich mit For-Schleife machen.
perdian Geschrieben 13. Oktober 2005 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
kuub Geschrieben 13. Oktober 2005 Autor 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...
Enno Geschrieben 13. Oktober 2005 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?
kuub Geschrieben 13. Oktober 2005 Autor Geschrieben 13. Oktober 2005 ich habs falsch geschrieben meine schleife lautet: for(a=1;n=a;a++);
Klotzkopp Geschrieben 13. Oktober 2005 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 ...
nic_power Geschrieben 13. Oktober 2005 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
mr-blister Geschrieben 13. Oktober 2005 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ß
Carnie Geschrieben 14. Oktober 2005 Geschrieben 14. Oktober 2005 blister ist zwar nett das du die lösung postest aber ich denke nicht das er es so lernt.
mr-blister Geschrieben 14. Oktober 2005 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
kuub Geschrieben 15. Oktober 2005 Autor 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.
Bubble Geschrieben 15. Oktober 2005 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; }
jma Geschrieben 20. Oktober 2005 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
nic_power Geschrieben 20. Oktober 2005 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
Like Geschrieben 3. November 2010 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?
etreu Geschrieben 3. November 2010 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);
Like Geschrieben 3. November 2010 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?
Klotzkopp Geschrieben 3. November 2010 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.
Schandfleck Geschrieben 3. November 2010 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.
Like Geschrieben 3. November 2010 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
Sassy Geschrieben 5. November 2010 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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden