![]() |
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 08:10 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