Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Fakultät mit Delphi berechnen
MILEZ - Sa 26.04.08 14:14
Titel: Fakultät mit Delphi berechnen
Hallohalo!
Ich bin grade dabei einen Taschenrechner zu programmieren mit Hilfe von Delphi.
Nur ich komme bei der Fakultät nicht weiter.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FakultaetClick(Sender: TObject); Var a,b:integer; begin a:=strtoint(Edit1.Text); repeat b:=a*(a-1); a:=a-1; until a=1; Edit3.Text:=inttostr(b); end; |
Schließlich wird die Variable b jedes mal wieder überschrieben. -.-
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Sirke - Sa 26.04.08 14:27
Versuchs mal hiermit:
Delphi-Quelltext
1: 2: 3: 4: 5:
| b := a; repeat b := b * ( a - 1 ); a := a - 1; until( a = 1 ); |
Timosch - Sa 26.04.08 14:32
Ich finde die Version aus dem Delphi-Treff ja immer noch am elegantesten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Function Fakultaet(Zahl : Int64): Int64; begin If Zahl = 0 then result := 1 else result := Zahl * Fakultaet(Zahl - 1); end; |
Ach ja: :welcome: in der EE!
MILEZ - Sa 26.04.08 14:36
Delphi-Quelltext
1: 2: 3: 4: 5:
| b := a; repeat b := b * ( a - 1 ); a := a - 1; until( a = 1 ); |
Da kann doch auch nicht gehen, oder irre ich mich jetzt?
Dann bleibt doch b die ganze Zeit über eine feste Zahl (zum Beispiel 8).
Beispiel:
Delphi-Quelltext
1: 2:
| b := 8 * (8-1) \\8*7=56 a := 7 |
dann gehts aber so weiter:
b := 8 * (7-1)und nicht
7*6
oder irre ich mich?
P.S.: Danke Timosch ;)
Moderiert von
AXMD: Delphi-Tags hinzugefügt
GericasS - Sa 26.04.08 14:41
@ Milez :
Füge bitte mal Delphi-Tags hinzu dann kann man es besser lesen =)
LG
GericasS
Allesquarks - Sa 26.04.08 14:56
Nebenbei in deiner Version kannst du einfach alle Fakultäten bis 20 speichern, denn ab da ist es zu groß für integer (für int 64 dann ca. 40).
Du solltest also im Sinne der Benutzerfreundlichkeit deines Rechners eine Version einbauen, die große Integer benutzt oder Fließkommazahlen.
Timosch - Sa 26.04.08 15:46
MILEZ hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| b := a; repeat b := b * ( a - 1 ); a := a - 1; until( a = 1 ); |
Da kann doch auch nicht gehen, oder irre ich mich jetzt?
Dann bleibt doch b die ganze Zeit über eine feste Zahl (zum Beispiel 8).
Beispiel:
Delphi-Quelltext 1: 2:
| b := 8 * (8-1) \\8*7=56 a := 7 |
dann gehts aber so weiter:
b := 8 * (7-1)und nicht 7*6
oder irre ich mich?
P.S.: Danke Timosch ;)
Moderiert von AXMD: Delphi-Tags hinzugefügt |
Du irrst dich.
Nehmen wir z.B. mal 4!. Dann wäre der Ablauf wie folgt:
b=4*(4-1)=12
a=3
nächster Durchlauf
b=12*(3-1)024
a=2
nächster Durchlauf
b=24*(2-1)=24
a=1
fertig. Ergebnis lautet 24
alzaimar - Sa 26.04.08 16:52
Man kann auch vorwärts zählen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Function Fakultaet (Zahl : Integer) : Double; Var i : Integer;
Begin Result := 1.0; For i:=2 to Zahl Do Result := Result * i; End; |
Irgendwie einfacher, oder?
huuuuuh - Sa 26.04.08 16:59
is ne typische schulaufgabe...
wir sollten es rekursiv lösen...
Timosch - Sa 26.04.08 17:16
huuuuuh hat folgendes geschrieben: |
is ne typische schulaufgabe...
wir sollten es rekursiv lösen... |
Trifft auf meine/alzaimars Lösung (die ausm Delphi-Treff) zu.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!