WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.02.2002, 11:19   #1
coolbininet
Hero
 
Registriert seit: 19.09.2001
Alter: 46
Beiträge: 859


coolbininet eine Nachricht über AIM schicken coolbininet eine Nachricht über Yahoo! schicken
Frage Funktion Fakutrielle

@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!
coolbininet ist offline   Mit Zitat antworten
Alt 22.02.2002, 11:51   #2
ReiniBugman
Jr. Member
 
Registriert seit: 13.09.2001
Beiträge: 83


Standard

double fact( unsigned long n )
{
double retval;
retval=1.0;
while (n>0)
retval=retval*n--;
return retval;
}
ReiniBugman ist offline   Mit Zitat antworten
Alt 22.02.2002, 11:55   #3
coolbininet
Hero
 
Registriert seit: 19.09.2001
Alter: 46
Beiträge: 859


coolbininet eine Nachricht über AIM schicken coolbininet eine Nachricht über Yahoo! schicken
Frage Frage konkretisiert

@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!
coolbininet ist offline   Mit Zitat antworten
Alt 22.02.2002, 12:00   #4
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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;
}
Übrigens heißt es Faktorielle, cool bin I nett
kikakater ist offline   Mit Zitat antworten
Alt 22.02.2002, 12:07   #5
ReiniBugman
Jr. Member
 
Registriert seit: 13.09.2001
Beiträge: 83


Standard

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.
ReiniBugman ist offline   Mit Zitat antworten
Alt 22.02.2002, 12:24   #6
coolbininet
Hero
 
Registriert seit: 19.09.2001
Alter: 46
Beiträge: 859


coolbininet eine Nachricht über AIM schicken coolbininet eine Nachricht über Yahoo! schicken
Frage Frage konkretisiert!

@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!
coolbininet ist offline   Mit Zitat antworten
Alt 22.02.2002, 12:55   #7
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

@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.
kikakater ist offline   Mit Zitat antworten
Alt 22.02.2002, 13:02   #8
Jaguar
Classic Car Driver
 
Benutzerbild von Jaguar
 
Registriert seit: 16.02.2000
Ort: Wien
Beiträge: 569

Mein Computer

Standard

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--);
}
Jaguar ist offline   Mit Zitat antworten
Alt 22.02.2002, 13:52   #9
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

@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
kikakater ist offline   Mit Zitat antworten
Alt 23.02.2002, 10:29   #10
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

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--;
it00x30 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:37 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag