ich möchte ein Programmfragment veröffentlichen, mit welchem alle
Möglichkeiten der Berechnungen von m-Werten bei n-möglichen
Eingabewerten bestehen.
Ein gutes Beispiel ist die Dreiecksberechnung. Hierbei werden in der
Regel drei Werte von maximal 6 Werten (3 Winkel und 3 Seitenlängen)
zur Berechnung benötigt. Es bestehen somit sehr viele Möglichkeiten
der Dateneingabe.
Ich selber habe schon viele Programme mit dieser Methode entwickelt.
Und nun zum Programmstart:
Als erstes werden folgende Konstanten und Variablen definiert:
Const Min =frei wählbar; Minimaler Eingabewert
Max =frei wählbar; Maximaler Eingabewert
DurchlaufMax =n; Maximale Berechnungsdurchläufe
MinWerte =m; Mindestens einzugebene Werte
ErgebnisFehler=frei wählbar; Es sollte ein sehr großer Wert sein,
damit ein Fehler erkennbar ist
Var Wert1,Wert2,...WertN :Extended; N-mögliche Eingabewerte
BWert1,BWert2,...BWertN:Boolean; Ist ein Wert bekannt oder berechntet,
erhält er den Wert True
Durchlauf :Byte; Aktueller Berechnungsdurchlauf
Nun folgen Beispielfunktionen, um die möglichen Berechnungen durchzuführen:
Code: Alles auswählen
Function Wert1_von_Wert2_und_Wert3(Wert2,Wert3:Extended):Extended;
Begin Wert1_von_Wert2_und_Wert3:=f(Wert2,Wert3);Wert1:=True End;
.
.
.
Function WertN_von_Wert1_und_Wert3(Wert1,Wert3:Extended):Extended;
Begin WertN_von_Wert1_und_Wert3:=f(Wert1,Wert3);WertN:=True End;
(Nur die ersten oberen N Eingabewerte werden getestet!)
Code: Alles auswählen
Function Datenkontrolle:Boolean;
Function StringWert(Wert:String;Min,Max:Extended):Extended;
Function Komma(Zwischen:String):String;
Var i:Byte;
Begin
For i:=1 To Length(Zwischen) Do If Zwischen[i]=',' Then Zwischen[i]:='.';
Komma:=Zwischen
End;
Var i :Byte;
Fehler:Integer;
Zahl :Extended;
Begin
Val(Komma(Wert),Zahl,Fehler);
If (Fehler<>0) Or (Zahl<Min) Or (Zahl>Max) Then
StringWert:=ErgebnisFehler Else StringWert:=Zahl
End;
Const F='Falscher Eingabewert!';
Var Zaehler:Byte;
Begin
Datenkontrolle:=True;Zaehler:=0;
BWert1:=False;BWert2:=False;...BWertN:=False;
If (Zaehler<MinWerte) And (EditWert1.Text<>'') Then
Begin
Wert1:=StringWert(EditWert1.Text,Min,Max);
If Wert1<>ErgebnisFehler Then Begin Inc(Zaehler);BWert1:=True End
Else EditWert1.Text:=F
End;
.
.
.
If (Zaehler<MinWerte) And (EditWertN.Text<>'') Then
Begin
WertN:=StringWert(EditWertN.Text,Min,Max);
If WertN<>ErgebnisFehler Then Begin Inc(Zaehler);BWertN:=True End
Else EditWertN.Text:=F
End;
If Zaehler<>MinWerte Then Datenkontrolle:=False
End;
Code: Alles auswählen
Procedure ErgebnisseAusgeben;
Const F='Rechenfehler!';
Begin
If BWert1 And (Wert1>Min) And (Wert1<Max) Then
EditWert1.Text:=FloatToStrF(Wert1,ffFixed,18,3)
Else EditWert1.Text:=F;
.
.
.
If BWertN And (WertN>Min) And (WertN<Max) Then
EditWertN.Text:=FloatToStrF(WertN,ffFixed,18,3)
Else EditWertN.Text:=F;
End;
Code: Alles auswählen
Procedure Berechnen;
Begin
Durchlauf:=0;
Repeat
If Not(BWert1) And BWert2 And BWert3 Then Wert1:=Wert1_von_Wert2_und_Wert3(Wert2,Wert3);
.
.
.
If Not(BWertN) And BWert1 And BWert3 Then WertN:=WertN_von_Wert1_und_Wert3(Wert1,Wert3);
Inc(Durchlauf)
Until BWert1 And BWert2...And BWertN Or (Durchlauf=DurchlaufMax)
End;
procedure TFormAlkoholtester.ButtonBerechnenClick(Sender:TObject);
begin
If Datenkontrolle Then Begin Berechnen;ErgebnisseAusgeben End
end;
Ich wünsche viel Spaß bei der Anwendung.
Gruß Heizkoerper