![]() |
Problem mit einfügen einer function in procedure
hallo
ich muss ein projekt erstellen in einer eigenen unit und habe schon jetzt einen fehler :| hier der ausschnitt: procedure TGaskosten.erdgaschecked; var a: real; begin erdgaspreisberechnen(a : real): real; end; erdgaspreisberechnen ist eine function. delphi hätte gerne eine ( anstatt eines doppelpunktes... und zwar bei ...(a : real):real; was soll ich tun? habe schon nach fehlern gesucht aber keine gefunden:( vielen dank schonmal im vorraus für die hilfe! |
AW: Problem mit einfügen einer function in procedure
Das ist eine Funktion und diese willst Du benutzen (und nicht deklarieren)
Delphi-Quellcode:
Nachtrag: und viellecht das eine oder andere Grundlagentutorial durcharbeiten
procedure TGaskosten.erdgaschecked;
var a: real; begin a:= erdgaspreisberechnen; // ob die Funktion nch Parameter hat ??? end; Grüße Klaus |
AW: Problem mit einfügen einer function in procedure
Delphi-Quellcode:
So oder so ähnlich muss das aussehen (ich kenne ja den Funktionskopf nicht).
a := erdgaspreisberechnen;
|
AW: Problem mit einfügen einer function in procedure
Wenn die Funktion schon existiert, dann kannst Du sie z.B. so aufrufen:
Delphi-Quellcode:
Und dann mit dem Ergebnis, das in a vorliegt weiter arbeiten.
procedure TGaskosten.erdgaschecked;
var a: real; begin a := erdgaspreisberechnen(10); a := erdgaspreisberechnen(100); end; Existiert die Funktion noch gar nicht, musst Du sie erst selbst definieren. Wie und wo genau, hängt davon ab, wie und wo Du die Funktion einsetzen möchtest... |
AW: Problem mit einfügen einer function in procedure
hey
die procedure soll ja auf die funktion zugreifen also in der funktion wird dann a ausgerechet. hier mal bis zu dem problem ein auszug: vielleicht hilfts ja:/ unit UEigeneGasrechner; interface type TGaskosten = class erdgas, stadtgas: real; function erdgaspreisberechnen(a: real): real; function stadtgaspreisberechnen(b: real): real; procedure seterdgas(a: real); procedure setstadtgas(b: real); procedure erdgaschecked; procedure stadtgaschecked; end; implementation procedure TGaskosten.seterdgas(a: real); begin erdgas:= a; end; procedure TGaskosten.setstadtgas(b: real); begin stadtgas:= b; end; procedure TGaskosten.erdgaschecked; var a: real; begin a:=erdgaspreisberechnen(a : real): real; end; achso und ich bin blutiger anfänger also wenn ihr noch mehr verbesserungsvorschläge habt raus damit;) |
AW: Problem mit einfügen einer function in procedure
Ja, bitte benutze die Delphi-Tags für den Quelltext
Ansonsten würde ich dir als Anfänger ein Grundlagen Tutorial empfehlen. Das was ich bisher sehe ist doch sehr konfus Erklär mal, was du mit der Klasse genau erreichen möchtest. |
AW: Problem mit einfügen einer function in procedure
ich solle einen gasrechner erstellen und der hat verschiedene tarife und es gibt verschiedene gassorten.
und das in einer eigenen unit also die soll man weiterverwenden können:/ und die procedure soll bewirken das wenn ein radiobutton "checked" ist das dann die rechnung ausgeführt wird... |
AW: Problem mit einfügen einer function in procedure
In die Funktion gehört nur die Berechnung des Preises auf Basis des übergebenen Parameters. Ob ein Radiobutton Checked ist, hat in der Unit nichts zu suchen.
|
AW: Problem mit einfügen einer function in procedure
nein der radiobutton hat auch nichts mit der unit zu tun aber was meinst du was du gerade geschrieben hast das war zu hohes deutsch für mich :P
|
AW: Problem mit einfügen einer function in procedure
Jetzt hast du uns beschrieben was das Formular machen soll, aber nicht, was die Berechnungsklasse machen soll.
Ob da ein RadioButton geklickt wird, ist der Berechnungsklasse sowas von egal. Das interessiert nur die Form, denn die muss ja jetzt etwas anderes anzeigen. Was dann angezeigt werden soll, dass holt sich die Form von der Berechnungsklasse ab. Also, was brauchen wir alles an Parametern für die Berechnung? Und wie soll dann berechnet werden? Wann berechnet werden soll ist dabei völlig unerheblich, denn die Berechnung muss ja immer stimmen ;) |
AW: Problem mit einfügen einer function in procedure
also für die berechnung brauchen wir den gasverbrauch in meinem fall ist es hier a
dann wird ein tarif berechnet und der wird wieder zurück an die fensterklasse gesendet. in der fachklassewird ja nur der preis berechnet. |
AW: Problem mit einfügen einer function in procedure
Hallo,
im Prinzip könnte die Gasklasse so aussehen:
Delphi-Quellcode:
type
TGasklasse = class private verbrauch : double; function berechneTarif:Integer; public setVerbrauch(AVerbrauch: double); getTarif:Integer; end;
Delphi-Quellcode:
function TGasklasse.berechneTarif:Integer;
begin // tue etwas mit Verbrauch um den günstigsten Tarif zu ermitteln // wobe die Tarifklasse ein integer ist end; procedure TGasklasse.setVerbrauch(AVerbrauch: double); begin verbrauch := AVerbrauch; end; function TGasklasse.getTarif:Integer; begin result := berechneTarif; end; Nachtrag: Wo bekommt die Gasklasse die Preise der verschiedenen Gassorten her? Grüße Klaus |
AW: Problem mit einfügen einer function in procedure
Na also. Dann kann die Funktion z.B. so aussehen:
Delphi-Quellcode:
Im Formular, welches diese Unit benutzt, geht dann so etwas:
function erdgaspreisberechnen(a : real): real;
begin Result := a * Preis; //Preis ist anderweitig ermittelt worden end;
Delphi-Quellcode:
procedure TDeinForm.ButtonBerechnenClick(Sender: TObject);
var Verbrauch, Preis: real; begin if RadioButtonPreis.Checked then begin Verbrauch := StrToFloat(EditVerbauch.Text); Preis := erdgaspreisberechnen(Verbrauch); LabelPreis.Caption := FloatToStr(Preis); end; end; |
AW: Problem mit einfügen einer function in procedure
Oder hier als abstraktes Beispiel drei Methoden zum Berechnen:
Delphi-Quellcode:
Für welches Modell der Umsetzung man sich entscheidet, hängt davon ab, was man erreichen möchte.
unit uFoo;
interface type // Der Preis kann von beliebiger Stelle geändert werden TCalcClass1 = class private FPreis : Extended; procedure SetPreis( const Value : Extended ); public property Preis : Extended read FPreis write SetPreis; function Calc( Menge : Extended ) : Extended; end; // Der Preis wird bei der Erzeugung festgelegt TCalcClass2 = class private FPreis : Extended; public property Preis : Extended read FPreis; function Calc( Menge : Extended ) : Extended; constructor Create( Preis : Extended ); end; // Der Preis muss bei jeder Berechnung mit angegeben werden function Calc( Menge, Preis : Extended ) : Extended; implementation function Calc( Menge, Preis : Extended ) : Extended; begin Result := Menge * Preis; end; { TCalcClass1 } function TCalcClass1.Calc( Menge : Extended ) : Extended; begin Result := Calc( Menge, Preis ); end; procedure TCalcClass1.SetPreis( const Value : Extended ); begin FPreis := Value; end; { TCalcClass2 } function TCalcClass2.Calc( Menge : Extended ) : Extended; begin Result := Calc( Menge, Preis ); end; constructor TCalcClass2.Create( Preis : Extended ); begin inherited Create; FPreis := Preis; end; end. Ist bei der Berechnung der Preis auch an dem Ort bekannt, von wo aus die Berechnung angestossen wird, dann bietet sich eine einfache
Delphi-Quellcode:
an.
function Calc( Menge, Preis : Extended ):Extended;
Ist der Preis nur einer völlig anderen Stelle bekannt und sind dort Änderungen zu erwarten (erlaubt), dann wie
Delphi-Quellcode:
.
TCalcClass1
Darf der Preis sich nicht ändern, dann wie
Delphi-Quellcode:
.
TCalcClass2
Werden diese Berechnungsklassen jetzt weiterverwendet, so ist durch das Design schon klar, wie diese verwendet werden dürfen. |
AW: Problem mit einfügen einer function in procedure
Den internen Variablen "erdgas" und "stadtgas" sollte man erst einmal ein "F" voranstellen und dann eine Property für jeden Wert anlegen und keine öffentliche Setter-Methode. Wir haben schließlich Delphi und net Java und Co. :wink:
(siehe Sir Rufo's Post ^^) |
AW: Problem mit einfügen einer function in procedure
Sind das jetzt nicht ein bisschen viel Infos? Ich fürchte, dass wir den TE gerade etwas überfordern.
|
AW: Problem mit einfügen einer function in procedure
also dei verschiedenen tarife wollte ich in der rechnung ungefähr so machen:
nur eine überlegung da fehlen noch ein paar sachen:
Delphi-Quellcode:
erklärung: die verschiedenen tarife : bis 150 cbm gas: 0.344 euro pro cbm
function TGaskosten.erdgaspreisberechnen(a: real): real;
begin if a<151 then begin a:= a*0.344; a:= a + (a*0.19); a:= a + 210; result:= a; end else if a> 400 then a:= a*0.255; a:= a + (a* 0.19); a:= a + 210; if a> 1999 then a:= a - 210; end; und über 400 cbm kostet es 0.255 euro zusatz: ab 2000 fällt die grundgebühr in höhe von 210 euro weg. und die mehwertsteuer wird bei allen berechnet |
AW: Problem mit einfügen einer function in procedure
Im Großen und Ganzen sieht das schon ganz gut aus, aber
- da fehlen begins und ends - zwischen 151 und 400 m^3 kostet es nichts (?) |
AW: Problem mit einfügen einer function in procedure
ist ja auch noch nicht fertig ;)
zwischen 150 und 400 muss noch was:P jaa da fehlen ends!! |
AW: Problem mit einfügen einer function in procedure
Besser so:
Delphi-Quellcode:
function TGaskosten.erdgaspreisberechnen(a: real): real;
begin Result := 0; // Grundgebühr if a < 2000 then Result := Result + 210; // Verbrauch if a > 400 then Result := Result + a * 0.255 else if a > 150 then Result := Result + a * 0.000 // Nach deinen Vorgaben geschenkt else Result := Result + a * 0.344; // Mehrwertsteuer Result := Result * 1.19; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz