Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Formeln einbauen in Prozeduren mit Parametern
Danf - Do 04.02.10 11:51
Titel: Formeln einbauen in Prozeduren mit Parametern
Servus,
Ich hatte jetzt ein 2-wöchiges Praktikum. Erster Tag wieder Schule, Informatik.. und alles ist wie weggefegt.
Folgende Aufgabe hab ich bekommen:
| Zitat: |
Schreibe ein Programm mit Hilfe von Prozedur oder Funktion mit Parametern, dass Zinsen/Zinssatz/Kapital ausrechnet.
|
// Das Programm soll, je nachdem was man eingibt, die entsprechende Zahl ausrechnen.
Nun heißt es zuerst Formel raussuchen (ohne n (n = Jahre)) die da lautet
Z = K*p/100
Nun die oben genannte Formel umstellen, damit alle 3 Formeln vorhanden sind
Z = K*p/100
K = 100*Z/p
p = Z*100/K
Z = Zinsen
K = Kapital
p = Zinsatz in %
Soweit sogut...
Ohne Prozedur mit Parameter wäre die Aufgabe soweit im Rahmen des Möglichen:
... An dieser Stelle merk ich grade das ich des irgendwie gar net auf die reihe kriege, auch ohne proceudre mit parameter... sieht aber in etwa so aus:
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: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure TForm1.Button1Click(Sender: TObject); VAR K, Z, p : real; begin
IF edit1.Text = ' ' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); K := 100*Z/p; edit1.text:=FloatToStr(K); edit2.text:=FloatToStr(Z); edit3.text:=FloatToStr(p); end ELSE IF edit2.Text = ' ' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); Z := K*p/100; edit1.text:=FloatToStr(K); edit2.text:=FloatToStr(Z); edit3.text:=FloatToStr(p); end ELSE IF edit3.Text = ' ' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); p := Z*100/K; edit1.text:=FloatToStr(K); edit2.text:=FloatToStr(Z); edit3.text:=FloatToStr(p); end;
end; end |
Das sieht aber auch irgendwie falsch aus.. hab auch noch andere Versionen geschrieben, aber die wollen alle nicht wie ich will :(.
Kann mir evtl jmd helfen :!
Mit freundlichen Grüßen
Danf
Moderiert von
Narses: Quote-Tags eingefügt.
Blackheart666 - Do 04.02.10 12:16
Hier mal ein einfaches Beispiel, vieleicht hilft dir das etwas weiter.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| function Rechne(Zahl1, Zahl2:Integer):String; begin Result:=IntToStr(Zahl1 + Zahl2); end;
procedure TForm1.Button1Click(Sender: TObject); begin Label.Caption:=Rechne(5,5); end; |
martin300 - Do 04.02.10 12:20
Ist hier ein Leerzeichen zuviel?
elundril - Do 04.02.10 12:26
das dürfte wohl das geringste Problem sein denn ob ich jetzt versuche ein leerzeichen in eine zahl umzuwandeln oder gar kein zeichen is dem programm schnuppe und in beiden fällen sollte er ne exception werfen. ;)
lg elundril
martin300 - Do 04.02.10 12:34
Die Exception wird doch erst zur Laufzeit auftreten. Bei der Abfrage wird aber nie eine Berechnung durchgeführt.
Danf - Do 04.02.10 12:53
Sooo.. ich hab jetzt erstmal nen Kaffee getrunken, gefrühstückt, eine geraucht und mich nochmal drangesetzt...
Ich habs nun hingekriegt, dass das Programm einwandfrei funktioniert, allerdings ohne Prozedur mit Parameter.
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: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.Button1Click(Sender: TObject); VAR K, Z, p : real; begin
IF edit1.Text = '' THEN begin Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); K := 100*Z/p; edit1.text:=FloatToStr(K); end ELSE IF edit2.Text = '' THEN begin K := strtofloat(edit1.Text); p := strtofloat(edit3.Text); Z := K*p/100; edit2.text:=FloatToStr(Z); end ELSE IF edit3.Text = '' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); p := Z*100/K; edit3.text:=FloatToStr(p); end;
end;
end. |
@Blackheart666
jo, eine einfache Funktion geht ja noch.. baer diese auf das oben genannte Programm anzuwenden... That's the problem.
@all
Danke für die Antworten, probiere es jetzt nochmal mit function und procedure
LG
Danf
Danf - Do 04.02.10 13:27
So, ich hbas noch ne runde probiert, und es klappt einfach nicht, es ist zum heulen.
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: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TForm1.Rechne(K, Z, p : real); begin
IF edit1.Text = '' THEN begin Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); K := 100*Z/p; edit1.text:=FloatToStr(K); end ELSE IF edit2.Text = '' THEN begin K := strtofloat(edit1.Text); p := strtofloat(edit3.Text); Z := K*p/100; edit2.text:=FloatToStr(Z); end ELSE IF edit3.Text = '' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); p := Z*100/K; edit3.text:=FloatToStr(p); end;
end;
procedure TForm1.Button1Click(Sender: TObject); VAR K, Z, p : real; begin
K := strtofloat(edit1.text); Z := strtofloat(edit2.text); p := strtofloat(edit3.text);
Rechne(K, Z, p) end;
end. |
Wo liegt nun der Fehler :(?
PS:
Hilfen hab ich mir durchgelesen.. baer da sind überall nur "einfache" Beispiele aus denen ich nur relativ wenig ersehen kann.
elundril - Do 04.02.10 13:30
ganz einfach, was passiert wenn in allen feldern was drin steht? ;) dann wird dein code die ausgeführt weil die bedingungen in den if-teilen immer false sind ;)
lg elundril
platzwart - Do 04.02.10 13:32
Was konkret "klappt nicht"? Fehlermeldungen?
Danf - Do 04.02.10 13:35
elundril hat folgendes geschrieben : |
ganz einfach, was passiert wenn in allen feldern was drin steht? ;) dann wird dein code die ausgeführt weil die bedingungen in den if-teilen immer false sind ;)
lg elundril |
Leider nicht
(beispiel)
Edit1 = 1000 (Kapital)
Edit2 = 50 (Zinsen)
Edit3 = (Leer) (Zinssatz)
*Auf Button drück*
Krach bum Programm abgestürzt die alte Leier halt ...
elundril - Do 04.02.10 13:36
ja, weil du versuchst einen nix in einen float umzuwandeln. was isn die gleitkommadarstellung von der zeichenkette ''? eben, der compiler weiß das auch ned ;)
Danf - Do 04.02.10 13:44
elundril hat folgendes geschrieben : |
| ja, weil du versuchst einen nix in einen float umzuwandeln. was isn die gleitkommadarstellung von der zeichenkette ''? eben, der compiler weiß das auch ned ;) |
Achso, jetzt versteh ich. Das heißt ich muss auch im unteren Teil des Programms eine IF-Verschachtelung anwenden nicht wahr?
Also so:
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: 28:
| procedure TForm1.Button1Click(Sender: TObject); VAR K, Z, p : real; begin
IF edit1.Text = '' THEN begin Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); end ELSE IF edit2.Text = '' THEN begin K := strtofloat(edit1.Text); p := strtofloat(edit3.Text); end ELSE IF edit3.Text = '' THEN begin K := strtofloat(edit1.Text); Z := strtofloat(edit2.text); end;
Rechne(K, Z, p) end; |
Oder?
Marc. - Do 04.02.10 13:45
Delphi-Quelltext
1:
| procedure TForm1.Rechne(K, Z, p : real); |
Drei Paramater stehen Deiner Funktion zur Verfügung.
Zwar übergibst Du Deiner Funktion entsprechende Werte bei Aufruf:
Delphi-Quelltext
1: 2: 3: 4: 5:
| K := strtofloat(edit1.text); Z := strtofloat(edit2.text); p := strtofloat(edit3.text);
Rechne(K, Z, p) |
überschreibst diese jedoch wieder zu Beginn der Funktion, was deren Nutzen vollkommend relativiert:
Delphi-Quelltext
1: 2: 3: 4: 5:
| IF edit1.Text = '' THEN begin Z := strtofloat(edit2.text); p := strtofloat(edit3.Text); |
Des Weiteren, überlege Dir, wie das Programm entscheiden soll, welcher Wert zu berechnen ist, falls alle Edits einen Wert beinhalten. Sofern überhaupt sinnvolle Werte übergeben werden. (Stichwort TryStrToFloat oder StrToFloatDef) ;)
Was kann passieren, wenn k oder p = 0 ist? ;)
Danf - Do 04.02.10 13:52
Jawoll, es hat geklappt...
Dank die nochmal, elundril, für deinen entscheidenen Typ und Ty an die anderen natürlich auch :D
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!