Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - fakultät bei delphi programmieren brauche hilfe
gs1905 - So 28.09.08 22:27
Titel: fakultät bei delphi programmieren brauche hilfe
ich weiss nicht wie ich die fakultät mit delphi machen soll ich hab im forum auch mich durchgeschaut aber habe nichts verstanden.weiss nur dass n=(n-1)*n
pennyWISE - So 28.09.08 22:29
habt ihr zufällig die aufgabe das rekursiv und iterativ zu machen?
€:
ich könnte dir natürlich den quellcode geben, aber der is (mindestens als iterativer Code) eigentlich ziemlich einfach, sodass du auch von alleine drauf kommen könntest.
Eine Fakultät einer bestimmten natürlichen Zahl bedeutet, dass alle natürlichen zahlen von 1 bis zu dieser Zahl mit einander multipliziert werden. Also: 3! = 1 * 2 * 3 = 6
gs1905 - So 28.09.08 22:33
also wir sollten es einfach machen er hat uns nicht gesagt wie aber wir sollten auch potenzieren deswegen gluab ich das erste
---
Moderiert von
Narses: Beiträge zusammengefasst---
rekursiv glaub ich
---
Moderiert von
Narses: Beiträge zusammengefasst---
also ich weiss auch was eine fakultät ist aber ich kann nicht die codes herleiten das ist mein problem
---
Moderiert von
Narses: Beiträge zusammengefasst---
also ich hab 2 labels zahl und fakultät mit 2 edit fenster dann noch 3 buttons fakultät,clear und beenden
jetzt drucke ich auf fakultät gebe a,b:integer; oder?
pennyWISE - So 28.09.08 22:42
also generell: Rekursive funktionen rufen sich selbst auf, solange bis eine Abbruchbedingung erfüllt wird.
Bei der Fakultät ist die Abbruchbedingung 0! = 1 oder, weil es aufs selbe rauskommt 1! = 1.
bzw übersetzt in Delphi:
Delphi-Quelltext
1: 2:
| if n = 0 then result:=1 else blabla |
wo blabla steht, kommt der selbstaufruf rein. und den haste ja vorhin schon selbst beschrieben ergebnis=(n-1)! * n
ps: aber was ne funktion ist, weißt du oder? bzw. wie sie aufgebaut ist
€: delphitags geschlossen
gs1905 - So 28.09.08 22:46
weiss ich leider net!!!
---
Moderiert von
Narses: Beiträge zusammengefasst---
wie kann mann den function machen wenn ich das hab hab ich fakultät rest hab ich verstanden
pennyWISE - So 28.09.08 23:03
ok, dann erzähl ich dir mal ein bisschen was, damit du deine hausaufgabe zu morgen hast, aber dafür versprich bitte, dass du das Tutorial liest, dass man dir im anderen thread vorgeschlagen hat ^^
also eine funktion ist (genau wie in mathe) ein ding, wo du ne zahl reinsteckst, dann macht es ein bisschen was mit der zahl und liefert dir daraus ein ergebnis. Genauso is das beim Programmieren auch. Funktionen werden ähnlich definiert wie prozeduren, bloß dass noch ein rückgabewert deklariert wird. d.h.:
Delphi-Quelltext
1: 2: 3: 4:
| function TForm1.fakultaet(n: word): word; begin
end; |
function zeigt an, dass du jetzt eine Funktion deklarierst,
TForm1. besagt, dass diese Funktion Teil der Klasse TForm1 (Dein Fenster) ist. fakultaet ist der Name der Funktion,
(n:word) gibt an, welche Zahlen man ihr übergeben kann. (entspricht wie in Mathe f(x) --> x € N) Word bezeichnet die positiven ganzen Zahlen.
: word sagt aus, dass die funktion eine als Ergebnis wiederum eine positive ganze Zahl ausgeben wird.
Zwischen begin und end schreibst du nun den Quelltext, der verantwortlich dafür ist, was mit dem übergebenem wert geschehen soll. in Mathe wär es bei der funktion f(x)=3x+4 der Teil 3x+4.
also dazwischen kommt jetzt
Delphi-Quelltext
1: 2:
| if n=0 then result:=1 else result:=fakultaet(n-1)*n; |
result ist die variable, in der das Ergebnis der Funktion ausgegeben wird. Alternativ geht auch der Name der Funktion, also
Delphi-Quelltext
1: 2:
| if n=0 then fakultaet:=1 else fakultaet:=fakultaet(n-1)*n; |
und in deiner Button1Click - prozedur rufst du die funktion auf
Delphi-Quelltext
1:
| edit2.text=IntToStr(fakultaet(StrToInt(edit1.text))); |
oder besser verständlich:
Delphi-Quelltext
1: 2: 3:
| n:=StrToInt(edit1.text); ergebnis:=fakultaet(n); edit2.Text:=IntTostr(ergebnis); |
dann musst du noch drauf achten, deine funktion in deiner Klasse zu deklarieren.
Also da wo die ganzen anderen prozedurennamen untereinander stehen einfügen
function fakultaet(n:word): word;
gs1905 - So 28.09.08 23:22
ar
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Form1: TForm1; fakultaet,zahl:integer; implementation
{$R *.dfm}
function TForm1.fakultaet(zahl: integer): integer; begin
if zahl=0 then result:=1 else result:=fakultaet(zahl-1)*zahl;
end;
procedure TForm1.Button1Click(Sender: TObject); begin
edit2.text=IntToStr(fakultaet(StrToInt(edit1.text)));
end;
end. |
jetzt hab ich es so aber oben bei function gibt es glaub ich ein problem wenn ich das programm starten will steht da undeclared idetifier fakultaet. mit diesem function muss ich es einfach dorthin schreiben also als code oder muss ich irgendwo hindrücken damit es aaktiviert wird also von alleine im code erscheint?
ich hab wie gesagt 2 edit fenster 2 label und 3 button(fakultät,clear,beenden)
Moderiert von
Narses: Delphi-Tags hinzugefügt
pennyWISE - So 28.09.08 23:29
Delphi-Quelltext
1: 2:
| var ... fakultaet,zahl:integer; |
das brauchst du nicht. zahl deklarierst du eh innerhalb der kopfzeile der function.
fakultaet selbst ist eine funktion und keine integervariable, hat dort also nichts zu suchen
irgendwo oben in deiner Unit steht doch
Delphi-Quelltext
1:
| procedure Button1Click(Sender: TObject); |
dadrunter schreibst du jetzt
Delphi-Quelltext
1:
| function fakultaet(zahl: integer): integer; |
Narses - So 28.09.08 23:32
Moin und :welcome: im Forum!
gs1905 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| function TForm1.fakultaet(zahl: integer): integer; begin if zahl=0 then result:=1 | |
Also ich würde
das weglassen und die Funktion allgemein deklarieren, statt nur in der Formularklasse. Kann man doch von überall aus gebrauchen. :idea: ;)
cu
Narses
gs1905 - So 28.09.08 23:44
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); begin edit2.text:=IntToStr(fakultaet(StrToInt(edit1.text))); end;
function fakultaet(zahl: integer): integer; begin
if zahl=0 then result:=1 else result:=fakultaet(zahl-1)*zahl;
end;
end. |
hier ich habs jetzt so aber es lauft leide immer noch net
Moderiert von
Narses: Delphi-Tags hinzugefügt, bitte demnächst selber machen mit [delphi] Delphi-Code [/delphi]
Narses - So 28.09.08 23:50
Moin!
gs1905 hat folgendes geschrieben: |
hier ich habs jetzt so aber es lauft leide immer noch net |
Ob du es wohl schaffst, auch mehr als "geht nicht" zu sagen? :? Was geht nicht, welche Fehlermeldung? :nixweiss:
cu
Narses
pennyWISE - So 28.09.08 23:52
Narses hat folgendes geschrieben: |
Also ich würde das weglassen und die Funktion allgemein deklarieren, statt nur in der Formularklasse. Kann man doch von überall aus gebrauchen. :idea: ;) |
da hast du sicherlich recht, bloß hättest du dazu schreiben müssen, wo man das macht, das weiß er nämlich nicht (und ich, muss ich zugeben, hab es auch vergessen, vllt sollte ich es mir aber angewöhnen ;) )
war es im
var teil oder unter
implementation?
Narses - So 28.09.08 23:54
Moin!
pennyWISE hat folgendes geschrieben: |
da hast du sicherlich recht, bloß hättest du dazu schreiben müssen, wo man das macht, das weiß er nämlich nicht (und ich, muss ich zugeben, hab es auch vergessen, vllt sollte ich es mir aber angewöhnen ;) ) |
Ich hatte es doch mit dem Highlight-Tag markiert. ;) Er hat´s ja auch hingekriegt (wenn er jetzt noch auf die richtige Reihenfolge kommt, läuft´s ja auch).
cu
Narses
gs1905 - So 28.09.08 23:57
ich hab jawohl danke euch vielmals danke danke danke ohne euch hätte ich es nicht geschaft dankeeeeee :o :o :o :o :o :o
pennyWISE - So 28.09.08 23:59
Ich meinte auch nicht die highlights, sondern die "Allgemeine Deklaration", von der du sprachst. die sieht ja so ziemlich genau aus wie die deklaration innerhalb der klasse, steht nur woanders. nur weiß ich nich, wo die deklaration steht.
Direkt nach dem "end;" der Klassendeklaration oder?
€: Na, wenn du es geschafft hast, isses ja auch wurscht ^^ herzlichen glückwunsch und lies verdammt noch mal das tutorial :P
Narses - Mo 29.09.08 00:02
Moin!
pennyWISE hat folgendes geschrieben: |
Ich meinte auch nicht die highlights, sondern die "Allgemeine Deklaration", von der du sprachst. die sieht ja so ziemlich genau aus wie die deklaration innerhalb der klasse, steht nur woanders. nur weiß ich nich, wo die deklaration steht.
Direkt nach dem "end;" der Klassendeklaration oder? |
Ach so :think: ich hab´ dich nicht richtig verstanden. :oops:
Es muss vor dem
implementation sein; ich schreib´s immer hinter den letzten
type-Block vor dem
var-Block. :nixweiss:
cu
Narses
gs1905 - Mo 29.09.08 00:02
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| var Form1: TForm1; n,ergebnis:integer;
function TForm1.fakultaet(n: integer): integer; begin if n=0 then result:=1 else result:=fakultaet(n-1)*n; end;
procedure TForm1.Button1Click(Sender: TObject); begin n:=StrToInt(edit1.text); ergebnis:=fakultaet(n); edit2.Text:=IntTostr(ergebnis); end;
procedure TForm1.Button2Click(Sender: TObject); begin edit1.clear; edit2.clear; end;
procedure TForm1.Button3Click(Sender: TObject); begin close end; |
ich danke euch allen vielmals für eure Hilfe.Ohne eure Hilfe hätte ich es nicht geschaft danke danke!!!!!!!
pennyWISE - Mo 29.09.08 00:04
Narses hat folgendes geschrieben: |
Ach so :think: ich hab´ dich nicht richtig verstanden. :oops: |
hehe, np ^^ .. na dann meinte ich ja zuletzt doch das richtige ;)
naja, jetzt hat er's in der TForm1. variante gemacht, geht ja auch, is nur nich so elegant ^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!