mathematische Fakultät in c
-
Also ich soll nen Programm schreiben was die
Fakultät von 2 - 10 ausgiebt, gibt es da irgend einen Befehl womit man das direkt machen kann?In Mathe heisst Fakultät ja:
bsp 55!=1*2*3*4*5
nur wie soll man das in C darstellen?
Ich hab schon mit ner for schleife rum experiementiert komme aber irgendwie nicht zu einem Ergebnis.
Oder kann man irgendwie direkt in der printf sagen:
printf("%i", wert!);das hat bei mir leider nicht funktioniert...
-
int Faku(int n) { if(n>0) return n*Faku(n-1); else return 1;}
Ist die feine englische Art, aber nicht das optimalste.
-
Mit ! wirst du wohl kaum weiterkommen, schließlich ist das ein Operator...
Mit einer Schleife hast du doch schon den richigen Ansatz gefunden! Warum kommst du denn damit nicht weiter? Du musst dir doch nur klar machen, wie die Fakultät eigentlich funktioniert...n! = 1 * 2 * ... * (n-1) * n
Mehr ist die Fak doch nicht... Diesen Term musst du nur noch in einer Schleife verpacken, schon ist deine Aufgabe gelöst!
Den Rest solltest du wohl alleine schaffen.Mfg,
Matthias
-
Btw: Ich find's nicht gut, wenn einige Leute hier anderer Leute Hausaufgaben lösen! Vor allem ist es blödsinn, dass man denen dann eine rekursive Funktion vorsetzt, obwohl diese ja noch mit den Grundlagen Probleme haben... Nachdenken soll man schließlich noch selber...
Mfg
-
Matthias S. schrieb:
Btw: Ich find's nicht gut, wenn einige Leute hier anderer Leute Hausaufgaben lösen! Vor allem ist es blödsinn, dass man denen dann eine rekursive Funktion vorsetzt, obwohl diese ja noch mit den Grundlagen Probleme haben... Nachdenken soll man schließlich noch selber...
Full Ack.
-
hm irgendwie schaff ichs nicht mich richtig auszudrücken,
wenn ich einfach sage n=(n-1)*n kriege ich kein korrektes Ergebnis
bsp 4!
4!= (4-1)4 = 12
4!= 1*2*34 = 24 ??Irgendwie schaff ichs nicht die Formel korrekt in eine For schleife zu packen
for(wert=2; wert=10; wert=(wert-1)*wert
-
Du drückst dich schon richtig aus, aber scheinbar hast du noch gar nicht begriffen, wozu du eine for-Schleife benutzen sollst! So wie du das machst kann das natürlich nicht funktionieren... Da hast du eindeutig dringenden Nachholbedarf!
Also, wie ich das gezeigt habe funktioniert das schon... Du brauchst also, wie du schon richtig erkannt hast, eine for-Schleife:for(...)
Nun überlegen wir mal: die Forel war fak(n) = n * (n-1) und das solange, wie n>1 oder n>=1 ist (ob du nun noch mit 1 multiplizierst ist ja wirklich Jacke wie Hose! ;)). Hätten wir also schon unsere Abbruchbedingung gefunden. Von wo soll sie nun anfangen zu zählen? Na klar, natürlich von n.. Initialwert also auch gefunden! Fehl noch, was sie in jedem durchlauf machen soll... Am besten wäre es wohl, n einen runterzuzählen
Schon hast du dir dein Konstrukt erdacht. Fehlt nur noch eine Variable, die für das runterzählen zuständig ist...for(i=0; i>=i; i = i - 1) { // Für i = i - 1 kannst du der Faulheit wegen auch i-- schreiben ;) n = n * i - 1; }
Schon berechnest du die Fakultät...
Wie gesagt: ich nehme an, das sind deine Hausaufgaben. Und wenn du eine Chance haben willst, die Klausur zu überstehen, solltest du dich dringend noch mal mit grundlegenden Konzepten von C auseinandersetzen. Und das Forum ist auch nicht dazu da, dass hier deine Aufgaben gelöst werden! Du solltest schon Ansätze präsentieren können... Es ist dir nicht geholfen, wenn andere deine Aufgaben für dich lösen...Mfg,
Matthias
-
Oh... Fehlerteufel... Es muss natürlich heißen
for(i=n; i>1; i--) { n = n * (i-1); }
-
Hm also ich poste jetzt einfach mal das ganze Programm,
Irgendwie endet das in einer endlosschleife wenn ich das umsetze wie du gesagt hast.edit: ok hat sich erledigt hab meinen fehler erkannt.
Besten dank^^#include <stdio.h> void main() { int wert,x; do { wert=0; printf("F A K U L T A E T E N - R E C H N E R\n"); printf("Geben sie einen Wert zwischen 2 und 10 ein\n"); scanf("%i",&wert); if(wert<2 && wert>0 || wert > 10 ) { printf("FEHLER:\nWertebereich ueberschritten, bitte erneute Eingabe taetigen!\n\n"); } for(x=wert; x>1; x=x - 1) { wert = wert * (x - 1); } printf("%i\n\n",wert); }while ( wert<2 && wert>0 || wert >10 ); }
-
Matthias S. schrieb:
Vor allem ist es blödsinn, dass man denen dann eine rekursive Funktion vorsetzt, obwohl diese ja noch mit den Grundlagen Probleme haben... Nachdenken soll man schließlich noch selber...
vielleicht will er ja dann rausfinden wie so'ne rekursive funktion das macht und gerade *das* regt zum nachdenken an...