![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Hero
![]() |
![]() @All
Hi Leutz! Brauche die Möglichkeit in einem C/C++ Programm die Fakturelle einer Zahl zu berechnen, gibt es da ne Funktion, oder muss ich mich mit Source-Code quälen, wenn zweiteres (mit Source Code) bitte ich höflichst mir mit dem (Teil)Code auszuhelfen. ![]() Mit freundlichen Grüßen Coolbininet
____________________________________
Wenn du eine helfende Hand brauchst, tust du gut wenn, du sie an den eigenen Armen suchst! Website RI Nur der Kleingeist hält Ordnung das Genie überblick das Chaos! Genie und Wahnsinn liegen dicht nebeneinander, sie können und sollen nicht getrennt werden. |Marktorientierter Sozialist|Menschenfreund|Teamfähig|Analytiker|Logi ker| If you want to see the Sky, fuck a Duck and learn to fly! Mein Glück ist nicht von dieser Welt, insbesondere im Umgang mit Microsoft Produkten! Möge die MACHT mit uns sein! |
![]() |
![]() |
![]() |
#2 |
Jr. Member
![]() Registriert seit: 13.09.2001
Beiträge: 83
|
![]() double fact( unsigned long n )
{ double retval; retval=1.0; while (n>0) retval=retval*n--; return retval; } |
![]() |
![]() |
![]() |
#3 |
Hero
![]() |
![]() @ReiniBugman
Hi und danke für die schnelle Antwort, aber, da ich noch Programmieranfänger bin, noch ne kurze Frage: Muss ich da jetzt den Source-Code ganz einfach in das Programm integrieren oder muss ich da noch Veränderungen machen. Mit freundlichen Grüßen Coolbininet
____________________________________
Wenn du eine helfende Hand brauchst, tust du gut wenn, du sie an den eigenen Armen suchst! Website RI Nur der Kleingeist hält Ordnung das Genie überblick das Chaos! Genie und Wahnsinn liegen dicht nebeneinander, sie können und sollen nicht getrennt werden. |Marktorientierter Sozialist|Menschenfreund|Teamfähig|Analytiker|Logi ker| If you want to see the Sky, fuck a Duck and learn to fly! Mein Glück ist nicht von dieser Welt, insbesondere im Umgang mit Microsoft Produkten! Möge die MACHT mit uns sein! |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Zuerst einmal kommt es auf den Datentyp an, double wäre schwer angezeigt, sprich ratsam. Da es sonst bei 2 Milliarden bei longs gleich einen Überlauf gibt.
Code:
Tja, Code oder nicht Code, das ist hier die Frage: double fac (int n) { int i; double result= 1.0; if(n<0) return 0.0; for(i=1;i<=n;i++) result= result * (double) i; return result; } ![]() ![]() |
![]() |
![]() |
![]() |
#5 |
Jr. Member
![]() Registriert seit: 13.09.2001
Beiträge: 83
|
![]() am einfachsten ist es sicher du kopierst die function in dein projekt.
du kannst sie natürlich auch in einem eigenen file lassen und eine header datei erzeugen wo die function deklariert wird d.h. in deinem hauptprogramm hast du dann bspw. zu beginn ein #include "mymathfunc.h" und in 'mymathfunc.h' steht dann sowas wie #ifndef __MYMATHFUNC #define __MYMATHFUNC double fact( unsigned long n ); #endif dann musst du noch 'mymathfunc.c' in dein projekt aufnehmen. |
![]() |
![]() |
![]() |
#6 |
Hero
![]() |
![]() @kikakater
Danke lieber Kikakater für die Antwort, aber mein Standartspruch: Ich bin Anfänger und kenn mich leider nicht so aus, soll bis nächste Stunde für das Kolleg ein Mini-Programm schreiben, das mich eine Zahl fragt einzugeben und von dieser eingelesene Zahl soll dann die Faktorielle (vorher falsch Fakturielle bezeichnet truly sorry) berechnet und am Bildschirm ausgeben werden. Mit feundlichen Grüßen Coolbininet
____________________________________
Wenn du eine helfende Hand brauchst, tust du gut wenn, du sie an den eigenen Armen suchst! Website RI Nur der Kleingeist hält Ordnung das Genie überblick das Chaos! Genie und Wahnsinn liegen dicht nebeneinander, sie können und sollen nicht getrennt werden. |Marktorientierter Sozialist|Menschenfreund|Teamfähig|Analytiker|Logi ker| If you want to see the Sky, fuck a Duck and learn to fly! Mein Glück ist nicht von dieser Welt, insbesondere im Umgang mit Microsoft Produkten! Möge die MACHT mit uns sein! |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() @ReiniBugman: Wenn beispielsweise das Literal -1L, sprich der Wert -1, an die Funktion übergeben wird, so setzt es Bomben und Granaten. Der Wert wird für die Funktion fact (da der Parameter 'n' als "unsigned" deklariert worden ist) zu 4 Milliarden und noch ein bißchen etwas, eben 2 ^ 32 - 1. Deswegen bitte nicht mit unsigned bei einem solchen Parameter auffahren !!!
Wenn ein negativer Wert übergeben wird, so muß Null (0.0) zurückgeliefert werden. if(!fac(-1)) printf("A/C error (according to the pocket calculator)\n"); Alles andere ist unsaubere Programmierung, bitte dann nicht wundern, wenn das eigene Programm instabil ist. Die Funktion schreibt man in eine Datei mymath.c Einen entsprechenden Prototyp in mymath.h: double fac (int n); In das Hauptprogramm bzw. die Datei mit der aufrufenden Funktion der Funktion fac schreibt man #include <mymath.h> bzw. #include "mymath.h" wenn sich mymath.h im selben Verzeichnis wie das C/C++ Projekt befindet. |
![]() |
![]() |
![]() |
#8 |
Classic Car Driver
![]() |
![]() sowas.. lauter lösungen mit schleifen .. mag hier keiner rekursive funktionen
![]() double fac (int n) { if (n<0) return (-1); if (n==0) return 1; return n*fac(n--); } |
![]() |
![]() |
![]() |
#9 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() @Jaguar: Hallo ! Ich werde sicher keine Kritik üben, aber rekursive Dinge sind wenn es irgendwie geht zu meiden. Man kann nämlich sogar den sehr effektiven Quicksort Algoritmus ebenso ohne Rekursion lösen. Rekursion bedeutet - grundsätzlich, und das ist die Problembereitung bei diesem Prinzip - sämtliche Parameter und die Rücksprungadresse zwischenzuspeichern !
Deswegen ist eine Implementation der faktoriellen (Funktion na no na), linear gelöst, eine bessere Realisierung der Aufgabenstellung. mfg Kikakater |
![]() |
![]() |
![]() |
#10 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() mit rekursionen kannst du mich schrecken!!!
ich mag die dinger nicht, ausserdem sind sie für mich meistens zu gefährlich, ausserdem solltet ihr berücksichtigen, dass hier ein anfänger (is jetzt nicht abschätzig) seine fragen deponiert, also so C-Syntax-finessen wie: retval=retval*n--; sollte man besser ausschreiben. (es gibt nämlich spezielle regeln zu den x--, bzw --x, ...) oder wenn schon: retval*=n--; |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|