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 user profile iconGausi: 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 user profile iconAXMD: 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

user profile iconMILEZ 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 user profile iconAXMD: 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

user profile iconhuuuuuh hat folgendes geschrieben:
is ne typische schulaufgabe...
wir sollten es rekursiv lösen...

Trifft auf meine/alzaimars Lösung (die ausm Delphi-Treff) zu.