Hi Emilio !
Zitat von
Emilio:
Die Meldung "inkompatible Typen Integer und Extended" ist jetzt 2mal da und dazu die Meldung
"Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen."
Dieser Fehler wird durch den übergeordneten Teil deines Programmes ausgelöst.
Auch dort musst Du den Datentyp auf Extended ändern.
Bei grösseren Anwendungen hat es sich sehr bewährt eine eigene
Unit für alle Typdeklarationen, GlobalVariable und Konstanten zu erstellen.
Dort könntest Du zB. definieren
und dann weiter
Delphi-Quellcode:
...
var BruttoLVPAlt, MargeEAlt:TMyFloat;
...
soll der Datentyp später geändert werden, muss dies nur an einer Stelle geschehen.
Zu deinem Berechnungsproblem:
Ziemlich komplexe Sache, schlage eine objektorientiertere Lösung vor.
Kapsle die ganze Berechnung in ein Objekt und statte es mit properties aus.
Dadurch vermeidest du auch die enorme Anzahl an Parametern.
Überlege auch, ob es nicht sinnvoll wäre, die Daten in einem Record zusammenzufassen.
Ich denke dass Du auf dem derzeitigen Weg nur schwer weiterkommst.
Edit: Codebeispiel
Delphi-Quellcode:
interface
type
TMyFloat = Double;
TBerechnung = class
private
FAltEK, FAltBP, FAltVP:TMyFloat;
FNeuEK, FNeuBP, FNeuVP:TMyFloat;
//...
procedure SetNeuBP(const Value: TMyFloat);
procedure SetNeuEK(const Value: TMyFloat);
procedure SetNeuVP(const Value: TMyFloat);
//...
protected
procedure Recalculate;
public
property AltEK:TMyFloat read FAltEK write FAltEK;
property AltBP:TMyFloat read FAltBP write FAltBP;
property AltVP:TMyFloat read FAltVP write FAltVP;
property NeuEK:TMyFloat read FNeuEK write SetNeuEK;
property NeuBP:TMyFloat read FNeuBP write SetNeuBP;
property NeuVP:TMyFloat read FNeuVP write SetNeuVP;
//...
end;
implementation
{ TBerechnung }
procedure TBerechnung.Recalculate;
begin
// hier die Berechnungen durchführen
// nur die privaten (F...) variablen setzen - nicht die Properties
// würde sonst unerwünschte Rekursion ergeben, die mit einer
// Variablen wie zB: Updating abgefangen werden müsste
end;
procedure TBerechnung.SetNeuBP(const Value: TMyFloat);
begin
if FNeuBP = Value then exit;
FNeuBP := Value;
Recalculate;
end;
procedure TBerechnung.SetNeuEK(const Value: TMyFloat);
begin
if FNeuEK = Value then exit;
FNeuEK := Value;
Recalculate;
end;
procedure TBerechnung.SetNeuVP(const Value: TMyFloat);
begin
if FNeuVP = Value then exit;
FNeuVP := Value;
Recalculate;
end;
Du könntest auf diese Art sogar eine Berechnungskomponente erstellen.