Wie mach ich aus einem Programm ein Unterprogramm :-(
-
Hallo,
Ich soll bei der Formel (n über k) ein Programm in dem der Begriff n! steht als Unterprogramm benutzen, leider weis ich nicht wie ich ein von mir geschriebenes Programm so einstelle das ein anderes darauf Zugreifen kann!
Tips reichen auch, zum kucken und Nachschlagen!
Bitte um Hilfe
-
definiere zuerst, was du unter Unterprogramm verstehst.
-
(n über k) soll auf die Formel n! ausserhalb dieser Datei zurückgreifen.
Das heist wenn ich n! / (k!(n-k))! berechnen will soll in einer andern Datei
die Formel stehen wie ich n! berechne, ich weiß nur nicht wie ich die Formel in diese Rechnung einbringe.Danke
-
Stichwort Funktionen:
Du packst den Code für n! in eine Funktion (nennen wir sie mal "unsigned long fak(int n);"), danach kannst du diese Funktion von deiner "unsigned long binom(int n,int k);" aus aufrufen (mit den passenden Parametern).(btw, bei den großen Zahlen, die dabei auftreten können, ist es wohl praktischer, die Binomialkoeffizienten NICHT über die Fakultät zu berechnen)
-
Danke werde es versuchen!
-
Hallöchen.
Wollt dir nur einen kleinen Tip geben.
Ich hab auch schon so ein Programm geschrieben und du wirst merken, dass du mit Fakultät nicht sehr weit kommst.
Die Fakultät von 100 ist zum Beispiel so derbe lang, dass es in C glaub ich keinen Datentyp dafür gibt.Darum machs lieber mit kürzen (also so, dass du die einzelnen Teile immer erst dividierst und dann zur Gesamtzahl dazumultiplizierst). Also erst probieren und dann hier gucken:
int binomkoeff(int n, int k) { int i; unsigned long koeff=1; if((k==0)&&(n>=0)) return 1; else if((k>=1)&&(k<=n)){ for(i=1;i<=k;i++) koeff=koeff*(n-i+1)/i; return koeff; }; return 0; };
-
Max3000 schrieb:
Hallöchen.
Wollt dir nur einen kleinen Tip geben.
Ich hab auch schon so ein Programm geschrieben und du wirst merken, dass du mit Fakultät nicht sehr weit kommst.
Die Fakultät von 100 ist zum Beispiel so derbe lang, dass es in C glaub ich keinen Datentyp dafür gibt.Ohh doch mit nem "unsigned long double" kommt man weit über die 100 (ich glaub bis ca.150 sind ich und mein kumpel gekommen), wir ham das ganze mit threads implementiert und die fakultäten von 1! bis 150! berechnet. Kein Problem :-).
Natürlich ist das ganze dann nicht mehr so genau.Ich sag das jetzt nciht weil ich spitzfindig bin, sondern weil ich glaube das die Aufgabe so gestellt ist das man die Fakultät (Rekursion?) benutzen soll
-
Das wäre Aufgabe 2b. gewesen
Ich hab auch schon so ein Programm geschrieben und du wirst merken, dass du mit Fakultät nicht sehr weit kommst.Die Fakultät von 100 ist zum Beispiel so derbe lang, dass es in C glaub ich keinen Datentyp dafür gibt.
Hab es aber dieses Semester aufgegeben, werd mich nächstes mehr darum bemühen C zu verstehen "können"!
das mit Fakultät ist nicht das problem und (n über k) auch nicht!
Jedoch kommen danach viel zu viele Summenaufgaben mit
Sn(x) = ∞ |k=0∑(-1)k * (x²k+1/(2k +1)!) und so das pack ich diesmal nicht!
Trozallem Info Labor habe ich durch eure hilfe geschafft!
Danke
-
Storm.Xapek.de schrieb:
Ohh doch mit nem "unsigned long double" kommt man weit über die 100 (ich glaub bis ca.150 sind ich und mein kumpel gekommen), wir ham das ganze mit threads implementiert und die fakultäten von 1! bis 150! berechnet. Kein Problem :-).
Ist der Beitrag ernst gemeint? erstens gibt es keinen "unsigned long double" (Gleitkommatypen sind immer vorzeichenbehaftet) und zweitens ist die Rechnung im Gleitkomma-Bereich nicht besonders exakt.
@Hilfloses Ding: Entweder du gehst mathematisch ran und versuchst, den Grenzwert deiner Reihe zu bestimmen oder du berechnest so lange neue Summanden und addierst sie, bis deine Werte zu klein werden um noch einen Einfluss zu haben:
summe = 0; n = 0; do { summand = f(n++);//hinter f() verbirgt sich die Rechenvorschrift für EIN Reihenelement) summe += summand; while(fabs(summand)>numeric_limits<double>::epsilon())