| Autor |
Beitrag |
scorp
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 03.06.03 19:41
Jungs sorry das ich enrve nur bekomme ich es nicht hin ein programm zu schrieben das mir die fakultät von n ausrechet!!!
ich muss ein proggi schreiben das das die fakultät für eine zahl über 0 errechnet.
Mein problem ist es wnen cih es mit ner for-schleife schreibe bekommme ich imma flasche werte raus weil ich muss ja irgendwo den wert speichern unn dann mit der nächsten zahl wieder multiplizieren (schwer zu erklären:-) bitte helft mir
thx im vorraus
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 03.06.03 19:58
Hi,
mal aus dem Ärmel geschüttelt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function Faktoriell(n: Integer): Integer; var i: Integer; begin Result := 1; for i := n downto 2 do Result := Result * i; end; |
Aufruf:
Delphi-Quelltext 1:
| Edit1.Text := InttoStr(Faktoriell(10)); |
Wie gesagt Stehgreif. Weiß nicht, ob der Code funzt. Hoffe, ich konnte dir helfen.
AXMD
|
|
scorp 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 03.06.03 20:20
habs hinbekommen musst zwar noch etwas ändern habs nit als function benutzt sonern gleich in die button-procedure reingeschrieben aber es läuft. Thx
sieht jetzt so aus
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var n, Result, i: integer; procedure TForm1.Button1Click(Sender: TObject); begin n := strtoint (edit1.text); Result := 1; for i := n downto 1 do Result := Result * i; label1.caption := InttoStr(Result); end; |
THXTHXTHX
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Di 03.06.03 21:13
Hi,
| scorp hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var n, Result, i: integer; procedure TForm1.Button1Click(Sender: TObject); begin n := strtoint (edit1.text); Result := 1; for i := n downto 1 do Result := Result * i; label1.caption := InttoStr(Result); end; | |
Kleine Anmerkung zu deinem Code:
Result wird für den rückgabewert einer funktion benutzt und sollte daher nicht als globale oder lokale variable (imho) benutz werden.
außerdem solltest du die Variablen in der Procedure und nicht außerhalb definieren, da du sie ja nur für die Proc brauchst.
Fis (ist keine Kritik, sondern nur ein Hinweis)
Fis
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
skywalker2
Hält's aus hier
Beiträge: 1
|
Verfasst: Mi 04.06.03 18:58
Titel: allgemein
die fakultät berechnet sich wie folgt:
x^y =
exp( ln(x)*y)
exp = e (naturkonstante)
ln = natürlicher logarithmus
und das gilt immer.
man muß sich nur noch um das richtige vorzeichen kümmern.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 04.06.03 19:15
Du verwechselst die Fakultät mit der Potenz.
Aber trotzdem noch ein paar Hinweise:
e ist keine Naturkonstante, sondern eine mathematische Konstante.
| Zitat: | | man muß sich nur noch um das richtige vorzeichen kümmern. |
Ja, aber wichtig ist auch, dass man nicht den ln(x), sondern ln (|x| ) verwendet.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Mi 04.06.03 20:32
| Peter Lustig hat folgendes geschrieben: | | Ja, aber wichtig ist auch, dass man nicht den ln(x), sondern ln (|x| ) verwendet. |
Also ln(abs(x)) oder?
Fis
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 04.06.03 20:41
Ja, aber nochmal: das ist natürlich dann die Potenz und nicht die Fakultät.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
MKehrer
      
Beiträge: 114
NT, 2000
D6
|
Verfasst: Do 05.06.03 07:53
So was kann man auch mit eine rekursiven Aufruf erledigen (spasseshalber), denn
Fakultät (X) = X * Fakultät (X-1)
Quelltext 1: 2: 3: 4: 5:
| Function Fact(Const i:Integer):Integer; Begin If i=1 then Result:=1 else Result:=i*Fact(i-1); End; |
_________________ Manfred
Was Du siehst ist in Dir (Smile)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 05.06.03 08:29
Stimmt. Ist schön kurz. Man könnte allerdings schon bei i=2 die Rekursion abbrechen lassen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
MKehrer
      
Beiträge: 114
NT, 2000
D6
|
Verfasst: Do 05.06.03 08:33
| Peter Lustig hat folgendes geschrieben: | | Stimmt. Ist schön kurz. Man könnte allerdings schon bei i=2 die Rekursion abbrechen lassen. |
Stimmt auch, hab ich doch glatt übersehen.
Ehrlich gesagt ist aber die Forschleife glaube ich besser, denn beim rekursiven Aufruf muß jedes mal der Stack-Frame erzeugt werden.
_________________ Manfred
Was Du siehst ist in Dir (Smile)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 05.06.03 08:41
Hm, ehrlich gesagt muss ich da passen. Das weiß ich nicht. Glaub ich Dir jetzt einfach mal so.
Ach ja, ist mir eben nicht aufgefallen, aber: benutze demnächst doch Delphi- statt Code-Tags. Vebressert die Lesbarkeit!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
MKehrer
      
Beiträge: 114
NT, 2000
D6
|
Verfasst: Do 05.06.03 08:43
Danke für den Tip
hab gerade vor ca. 15 Min. gemerkt, dass es das auch gibt
_________________ Manfred
Was Du siehst ist in Dir (Smile)
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Do 05.06.03 09:02
Die Fakultät ist sowieso ein Standartbeispiel für Rekursion. Die sieht man in jedem tutorial für Rekursion. Außerdem weiß dann sein Lehrer dass es sich was dabei gedacht hat. 
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|