![]() |
Falls Variable(n) vorhanden mache das sonst mache dies
Hallo,
Ich möchte Programm zur Berechnung von Dreiecken coden. Dabei bin ich auf ein Problem gestoßen: Ich möchte 6 Variablen, die man eingeben kann, aber nicht eingeben muss. Wenn ich z.B. nur 3 Variablen eingebe, soll das Programm trotzdem alles, was man damit errechnen kann, ausgeben. Genau genommen würde das bedeuten: Eingabe sind Variablen a,b,c,d,e,f
Delphi-Quellcode:
oder wenn b oder e nicht vorhanden ist
m := sin(d)*b/sin(e)
Delphi-Quellcode:
und wenn keine nötige Variable vorhanen ist mache nichts
m := sin(d)*c/sin(f)
Ist das irgendwie zu bewerkstelligen? |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Überprüfe doch den Inhalt der Variablen
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Vielleicht hilft dir ja das weiter...
Delphi-Quellcode:
Gruss
TDreieck = class
private public function Berechnung(a,b,c,d,e,f:integer):real; overload; function Berechnung(a,b,c,d,e:integer):real; overload; function Berechnung(a,b,c,d:integer):real; overload; function Berechnung(a,b,c:integer):real; overload; function Berechnung(a,b:integer):real; overload; function Berechnung():real; overload; end; Thorsten |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Falls es ohne die Variable zu einem Laufzeitfehler kommt, könntest du folgendes versuchen:
Delphi-Quellcode:
Gruß
try
m := sin(d)*b/sin(e); except m := sin(d)*c/sin(f); end; Stefan Edit: Vergiss meinen Vorschlag, es gibt bei deinem Problem zu viele Fälle. @hoika: Ich glaube, thknub möchte wissen, wie man die Variablen auf leeren Inhalt prüft. |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Halloo,
6 Boolean-Variablen, die anzeigen, ob die Variablen gefüllt worden sind. Heiko |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
oder du initalisierst sie einfach mit einem Wert der nicht eingegeben werden kann und überprüfst sie nachher darauf.
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Wenn ich die Variante von omata benutze antwortet er mir [Pascal Fehler] E2065 Ungenügende Forward- oder External-Deklaration: 'TForm5.Berechnung'.
Hier nochmal der Code
Delphi-Quellcode:
Wobei g und m sowie h und n das gleiche sind.(Hatte probiert es über verschiedene Ausgabefelder zu machen, aber es kommt immer folgende Nachricht, wenn ich auf testen klicke und nicht in alle Eingabe Felder etwas schreibe: " ist kein gültiger Gleitkommawert
unit Unit5;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Math; type TForm5 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Button1: TButton; Label13: TLabel; Label14: TLabel; Edit13: TEdit; Edit14: TEdit; Edit15: TEdit; Edit16: TEdit; Edit17: TEdit; Edit18: TEdit; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Edit19: TEdit; Edit20: TEdit; Edit21: TEdit; Edit22: TEdit; Label24: TLabel; Label25: TLabel; Edit23: TEdit; Edit24: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public end; var Form5: TForm5; implementation {$R *.dfm} procedure TForm5.Button1Click(Sender: TObject); var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r: REAL; begin a := StrToFloat(edit1.Text); b := StrToFloat(edit2.Text); c := StrToFloat(edit3.Text); d := StrToFloat(edit4.Text); e := StrToFloat(edit5.Text); f := StrToFloat(edit6.Text); g := sqrt(sqr(b)+sqr(c)-2*b*c*Cos(d)); h := sqrt(sqr(a)+sqr(c)-2*a*c*Cos(e)); i := sqrt(sqr(a)+sqr(b)-2*a*b*Cos(f)); j := ArcCos((sqr(b)+sqr(c)-sqr(a))/(2*b*c)); k := ArcCos((sqr(a)+sqr(c)-sqr(b))/(2*a*c)); l := ArcCos((sqr(a)+sqr(b)-sqr(c))/(2*a*b)); m := sin(d)*b/sin(e); n := sin(e)*a/sin(d); o := sin(f)*a/sin(d); p := ArcSin((a*Sin(e))/b); q := ArcSin((b*Sin(d))/a); r := ArcSin((c*Sin(d))/a); edit7.Text := FloatToStr(g); edit8.text := FloatToStr(h); edit9.Text := FloatToStr(i); edit10.Text := FloatToStr(j); edit11.Text := FloatToStr(k); edit12.Text := FloatToStr(l); edit13.Text := FloatToStr(m); edit14.Text := FloatToStr(n); edit15.text := FloatToStr(o); edit16.Text := FloatToStr(p); edit17.Text := FloatToStr(q); edit18.Text := FloatToStr(r); end; end. Ich hätte auch nicht wirklich ein Problem damit 3 Ausgabefelder zu machen, wenn man wenigstens nicht überall was eingeben muss, wobei mir zwei oder auch nur eins besser gefielen... @inherited Ich versteh jetzt nicht so ganz, was du meinst |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Zitat:
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Das mache ich wie? Kann mir mal jemand ein Bsp. geben? Sorry, ich bin noch ziemlich neu auf dem Gebiet (hab gestern Abend angefangen ein wenig rumzucoden)
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Was meinst Du zu folgender Loesung:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r: REAL; bo1,bo2,bo3,bo4,bo5,bo6:boolean; begin bo1:=false; bo2:=false; bo3:=false; bo4:=false; bo5:=false; bo6:=false; if edit1.text<>'' then begin a := StrToFloat(edit1.Text); bo1:=true; end; if edit2.text<>'' then begin b := StrToFloat(edit2.Text); bo2:=true; end; if edit3.text<>'' then begin c := StrToFloat(edit3.Text); bo3:=true; end; if edit4.text<>'' then begin d := StrToFloat(edit4.Text); bo4:=true; end; if edit5.text<>'' then begin e := StrToFloat(edit5.Text); bo5:=true; end; if edit6.text<>'' then begin f := StrToFloat(edit6.Text); bo6:=true; end; if bo2 and bo3 and bo4 then g := sqrt(sqr(b)+sqr(c)-2*b*c*Cos(d)); if bo1 and bo3 and bo5 then h := sqrt(sqr(a)+sqr(c)-2*a*c*Cos(e)); if bo1 and bo2 and bo6 then i := sqrt(sqr(a)+sqr(b)-2*a*b*Cos(f)); if bo1 and bo2 and bo3 then j := ArcCos((sqr(b)+sqr(c)-sqr(a))/(2*b*c)); if bo1 and bo2 and bo3 then k := ArcCos((sqr(a)+sqr(c)-sqr(b))/(2*a*c)); if bo1 and bo2 and bo3 then l := ArcCos((sqr(a)+sqr(b)-sqr(c))/(2*a*b)); if bo2 and bo4 and bo5 then m := sin(d)*b/sin(e); if bo1 and bo4 and bo5 then n := sin(e)*a/sin(d); if bo1 and bo4 and bo6 then o := sin(f)*a/sin(d); if bo1 and bo2 and bo5 then p := ArcSin((a*Sin(e))/b); if bo1 and bo2 and bo4 then q := ArcSin((b*Sin(d))/a); if bo1 and bo3 and bo4 then r := ArcSin((c*Sin(d))/a); edit7.Text := FloatToStr(g); edit8.text := FloatToStr(h); edit9.Text := FloatToStr(i); edit10.Text := FloatToStr(j); edit11.Text := FloatToStr(k); edit12.Text := FloatToStr(l); edit13.Text := FloatToStr(m); edit14.Text := FloatToStr(n); edit15.text := FloatToStr(o); edit16.Text := FloatToStr(p); edit17.Text := FloatToStr(q); edit18.Text := FloatToStr(r); end; |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
@thknub: Ich würde dir eher mal die Einsteiger-Tutorials hier in der DP und vor allem auf
![]() Mfg |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Hallo Fussball-Robby,
deine Worte: ich würde dir eher mal die Einsteiger-Tutorials hier in der DP und vor allem auf ![]() Meine Anwort: Bevor Du Kritik uebst an der Programmierung anderer, solltest Du Dir mal ueberlegen, in welcher Situation der Fragende steckt. Er braucht Hilfe, und zwar schnell, denn er moechte ein mathematisches Problem per Programm loesen. Ich habe nach seinen Angaben das Programm eingegeben, die Komponenten installiert und den Code ergaenzt. Der Code mag in Deinen Augen unschoen sein, aber er funktioniert. Desweiteren sollte Deine Kritik positiv sein, d.h. dass der Link, den Du sendest nicht im Nirwana landet mit irre vielen Moeglichkeiten. Er sollte direkt zur Programmloesung fuehren. Gruss |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Zitat:
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Zitat:
was mir nicht ganz klar wird, was soll dein programm eigentlich machen? kansnt du das mal ein wenig besser erklären und ggf. deine form (als .JPG) anhängen, damit wir uns hier einen visuellen eindruck machen können. was mir nicht ganz klar ist, weshalb verwendet du so viele variablen, welche du dann doch nicht verwendest und der user diese auch nicht einzugeben braucht? schöne grüsse GG |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Ich kann mit Ein-Buchstaben-Variablen besser umgehen als mit Wort-Variablen.
Wie gesagt, das Programm soll der Berechnung von Dreiecken dienen. Variablen a,b,c stehen für die Seiten des Dreiecks und d,e,f für die Winkel. Diese sollten eingegeben werden, aber nicht alle, denn man kann aus einigen Variablen ja dann auch die anderen errechnen. Ich möchte, dass aus den eingegebenen Variablen, alle mit diesen Variablen errechenbaren ausgerechnet werden. Da es pro Variable aber mind. 3 Varianten gibt (die alle unterschiedliche Voraussetzungen haben), um diese auszurechnen habe ich schon zwei Ausgabefelder je Variable. Eingabe Seite a Seite b Seite c Winkel d Winkel e Winkel f Ausgabe (2x) Seite a Seite b Seite c Winkel d Winkel e Winkel f So weit so gut. Aber wenn ich jetzt bei Eingabe nicht alle Felder fülle meint er Keine gültige Gleitkommaoperation... Also Anliegen: Ausgabe trotz mehrerer Lösungformeln auf 1 Feld je Variable zu begrenzen und Nicht alle Variablen eingeben zu müssen und trotzdem alle errechenbaren Ergebnisse zu erhalten. |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
![]() Nicht die Version von oben, aber so sollte es in etwa aussehen |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
ups, du willst wirklich den anwender erlauben, alles mögliche einzugeben und auszulassen? da wünsch ich dir jetzt schon viel spass. denke, um die ganzen varianten in den griff zu bekommen, solltest dir die antwort #3 von omata ansehen. für die umwandlung, bekommst du das in den griff mit StrToFloatDef . würde dir dennoch raten, die buchstaben in worte zu wandeln, damit du auch noch in ein paar wochen mit deinem code zurecht kommst.
wie gesagt, würd ich die berechnung auf alle fälle von der darstellung/eingabe trennen. damit kannst du dann später auch viel einfacher deine lösungen in andere programme, funktionen, etc. einbinden. <HTH> GG |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Ich würd's so angehen:
In einem Record wird ein Wert und die Info, ob der Wert überhaupt gesetzt wurde gespeichert:
Delphi-Quellcode:
Es gibt 6 Eingabewerte:
TOptionalNumber = record
value : Extended; // der Wert valid : Boolean; // zeigt an, ob der Wert gültig ist end;
Delphi-Quellcode:
jetzt kommt der Trick, wir verwenden eine Unterfunktion, um die 6 Variablen zu befüllen:
var
seite1, seite2, seite3, alpha, beta, gamme : TOptionalNumber; // man könnte auch ein array[1..6] of TOptionalNumber; // verwenden, aber mit Einzelvariablen bleibt es übersichtlicher
Delphi-Quellcode:
Das Befüllen der 6 Variablen geht damit kurz und knackig:
function GetOptionalNumber(edit:TEdit):TOptionalNumber;
var s : string; begin s := Trim(edit.text); // Leerzeichen weg, die stören result.valid := s <> ''; if result.valid then result.Value := StrToFloat(s); // Verbesserungmöglichkeit: Val()-Funktion verwenden end;
Delphi-Quellcode:
Wenn du jetzt wissen willst, ob Winkel beta eingegeben wurde:
seite1 := GetOPtionalNumber(EditSeite1);
... // usw
Delphi-Quellcode:
Und jetzt kommt etwas Mathe ins Spiel. Es gibt folgende Fälle:
if beta.valid then ...
a.) 3 Seiten b.) 2 Seiten & 1 Winkel c.) 1 Seite & 2 Winkel d.) 3 Winkel Fall a.) und d.) sind ganz einfach, bei b.) würde ich verlangen, dass der Winkel zwischen den Seiten ist, bei c.) sind die Winkel an den Ecken der Seite Für die Fälle a.) bis d.) schreibst du je eine Unterfunktion. |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Die Befüllung von .Valid würde ich davon abhängig machen ob .Value zu setzen geht... und gabs da nicht auch noch NaN (Not a number) für Float-Werte?
Fall D ist nicht lösbar: 3 Winkel sagen nichts über das Größenverhältnis aus. Statt dessen gibt es mehrere Varianten bei 1 und 2 gegebenen Winkeln |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
So das sieht jetzt vllt. etwas unschön und kompliziert aus, aber es funzt, zumindes zur Hälfte. Wenn ich nur Seiten eingebe kommt trotzdem: Ungültige Gleitkommaoperation Weiß jemand warum?
Delphi-Quellcode:
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2, t2, u2, v2, w2, x2, y2, z2, a3, b3, c3, d3, e3, f3, h3, i3, j3, k3, l3, m3, n3, o3, p3, q3, r3, s3, t3, u3, v3, w3, x3, y3, z3 : REAL;
bo1, bo2, bo3, bo4, bo5, bo6, bo7, bo8, bo9, bo10, bo11, bo12, bo13, bo14, bo15, bo16, bo17, bo18, bo19, bo20 :boolean; begin {Eingabe} {Seiten} a := StrToFloat(edit1.text); b := StrToFloat(edit2.Text); c := StrToFloat(edit3.Text); {Winkel} d := StrToFloat(edit4.Text); e := StrToFloat(edit5.Text); f := StrToFloat(edit6.Text); {-----------------------------------------------------------------------------} {Berechnung} {Variablendefinierung Gradmaß<->Bogenmaß} g := 2*Pi/360; {Gradmaß -> Bogenmaß} h := 360/(2*Pi); {Bogenmaß -> Gradmaß} {Boolean Variablen} if a>0 then bo1 := True else bo1 := False; if b>0 then bo2 := True else bo2 := False; if c>0 then bo3 := True else bo3 := False; if d>0 then bo4 := True else bo4 := False; if e>0 then bo5 := True else bo5 := False; if f>0 then bo6 := True else bo6 := False; {Berechnung Seite a} if bo2 and bo4 and bo5 = True then i := (b*sin(d*g))/sin(e*g) else i := 0; if bo3 and bo4 and bo6 = True then j := (c*sin(d*g))/sin(f*g) else j := 0; if bo2 and bo3 and bo4 = True then k := sqrt(sqr(b)+sqr(c)-(2*b*c*cos(d*g))) else k := 0; {Berechnung Seite b} if bo1 and bo4 and bo5 = True then l := (a*sin(e*g))/sin(d*g) else l := 0; if bo3 and bo5 and bo6 = True then m := (c*sin(e*g))/sin(f*g) else m := 0; if bo1 and bo3 and bo5 = True then n := sqrt(sqr(a)+sqr(c)-(2*a*c*cos(e*g))) else n := 0; {Berechnung Seite c} if bo1 and bo4 and bo6 = True then o := (a*sin(f*g))/sin(d*g) else o := 0; if bo2 and bo5 and bo6 = True then p := (b*sin(f*g))/sin(e*g) else p := 0; if bo1 and bo2 and bo6 = True then q := sqrt(sqr(a)+sqr(b)-(2*a*b*cos(f*g))) else q := 0; {Berechnung Winkel Alpha} if bo1 and bo2 and bo5 = True then r := h*arcsin((a*sin(e*g))/b) else r := 0; if bo1 and bo3 and bo6 = True then s := h*arcsin((a*sin(f*g))/c) else s := 0; if bo1 and bo2 and bo3 = True then t := h*arccos(sqr(a)/(sqr(b)+sqr(c)-2*b*c)) else t := 0; if bo5 and bo6 = True then u := 180-e-f else u := 0; {Berechnung Winkel Beta} if bo1 and bo2 and bo4 = True then v := h*arcsin((b*sin(d*g))/a) else v := 0; if bo2 and bo3 and bo6 = True then w := h*arcsin((b*sin(f*g))/c) else w := 0; if bo1 and bo2 and bo3 = True then x := h*arccos(sqr(b)/(sqr(a)+sqr(c)-2*a*c)) else x := 0; if bo4 and bo6 = True then y := 180-d-f else y := 0; {Berechnung Winkel Gamma} if bo1 and bo3 and bo4 = True then z := h*arcsin((c*sin(d*g))/a) else z := 0; if bo2 and bo3 and bo5 = True then a2 := h*arcsin((c*sin(e*g))/b) else a2 := 0; if bo1 and bo2 and bo3 = True then b2 := h*arccos(sqr(c)/(sqr(a)+sqr(b)-2*a*b)) else b2 := 0; if bo4 and bo5 = True then c2 := 180-a-b else c2 := 0; {Berechnung Flächeninhalt A} if a>b then bo7 := True else bo7 := False; if a>c then bo8 := True else bo8 := False; if b>c then bo9 := True else bo9 := False; if b>a then bo10 := True else bo10 := False; if c>a then bo11 := True else bo11 := False; if c>b then bo12 := True else bo12 := False; {Seite a = Längste Seite} if bo1 and bo2 and bo3 and bo7 and bo8 = True then d2 := (1/2)*b*c*sin(g*d) else d2 := 0; {Seite b = Längste Seite} if bo1 and bo2 and bo3 and bo9 and bo10 = True then e2 := (1/2)*a*c*sin(g*e) else e2 := 0; {Seite c = Längste Seite} if bo1 and bo2 and bo3 and bo11 and bo12 = True then f2 := (1/2)*a*b*sin(g*f) else f2 := 0; {Berechnung Umfang u} if bo1 and bo2 and bo3 then g2 := a+b+c else g2 := 0; {----------------------------------------------------------------------------} {Definierung der Ausgabevariablen} {Seite a} if i>0 then h2 := i else h2 := i2; if j>0 then i2 := j else i2 := j2; if k>0 then j2 := k else j2 := 0; {Seite b} if l>0 then k2 := l else k2 := l2; if m>0 then l2 := m else l2 := m2; if n>0 then m2 := n else m2 := 0; {Seite c} if o>0 then n2 := o else n2 := o2; if p>0 then o2 := p else o2 := p2; if q>0 then p2 := q else p2 := 0; {Winkel Alpha} if r>0 then q2 := r else q2 := r2; if s>0 then r2 := s else r2 := s2; if t>0 then s2 := t else s2 := t2; if u>0 then t2 := u else t2 := 0; {Winkel Beta} if v>0 then u2 := v else u2 := v2; if w>0 then v2 := w else v2 := w2; if x>0 then w2 := x else w2 := x2; if y>0 then x2 := y else x2 := 0; {Winkel Gamma} if z>0 then y2 := z else y2 := z2; if a2>0 then z2 := a2 else z2 := a3; if b2>0 then a3 := b2 else a3 := b3; if c2>0 then b3 := c2 else b3 := 0; {Flächeninhalt A} if d2>0 then c3 := d2 else c3 := d3; if e2>0 then d3 := e2 else d3 := e3; if f2>0 then e3 := f2 else e3 := 0; {Umfang u} if g2>0 then f3 := g2 else f3 := 0; {Ausgabe} edit7.Text := FloatToStr(h2); edit8.Text := FloatToStr(k2); edit9.Text := FloatToStr(n2); edit10.Text:= FloatToStr(q2); edit11.Text:= FloatToStr(u2); edit12.Text:= FloatToStr(y2); edit13.Text:= FloatToStr(c3); edit14.Text:= FloatToStr(f3); end; edit:\\ Wenn ich drei Seiten angebe funzt es nicht. Egal ob ich noch zusätzliche Variablen angebe. |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Hallo Thknub,
hast Du es mal mit dem Debugger versucht? mit [F7] und [F8] geht einem manchmal ein ganzer Kronleuchter auf. Bei mir erhalte ich bei folgendem Sourcecode:
Delphi-Quellcode:
"xxx ist kein gültiger Gleitkommawert"
procedure TForm1.Button1Click(Sender: TObject);
var a : real; begin form1.Edit3.Text:='xxx'; a:=strtofloat(form1.Edit3.text); end; Da hat er recht! Du solltest deine Eingabetextfelder zumindestens mit "0.0" vorbelegen! Buchstaben und andere Fehleingaben mußt Du dann auch noch herausklauben. Viel Spaß K-H |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Ich würde eher TryStrToFloat(), TMaskEdit oder Falscheingaben verhindern
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Ein paar Tipps zu deinem Code:
Delphi-Quellcode:
ist äquivalent zu
if a>0 then bo1 := True else bo1 := False;
Delphi-Quellcode:
Ausserdem lässt sich
bol := a>0;
Delphi-Quellcode:
ersetzen durch
if bo2 and bo4 and bo5 = True then
Delphi-Quellcode:
ansonsten ist es dank der "intuitiven Benennung" deiner Variablen praktisch unmöglich dir zu sagen, was da falsch ist :?
if bo2 and bo4 and bo5 then
[Edit] Achso, es wäre sehr praktisch zu wissen, wo genau der Fehler auftritt... Allgemein: StrToFloat wenn "Edit1" da steht funktioniert nicht und durch null teilen wird auch eher ungern gesehen :wink: |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
@ p80286
Sie sind mi 0 vorbelegt. @ glkgereon Zitat:
Wo teile ich durch null? |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
ich glaub, du solltest die Formeln zur Winkelberechnung noch mal prüfen. Übrigens: Der Debugger würde dir m.E. sehr gut weiterhelfen, die Fehlerstelle zu finden.
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Wenn ich F7 drück kommt das:
![]() Bei F8 ist die nächste Zeile bordeauxrot markiert, also
Delphi-Quellcode:
Application.Initialize;
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Dann drück solange F7, bis dass du an der richtigen Stelle bist :wink:
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Hallo thknub,
ich hab mir die Freiheit genommen und Deinen Source mal ausprobiert, da ich es nicht so mit der Mathematik habe und darum nicht so ganz verstanden habe was das Programm genau machen soll.
Code:
Da wird arccos wohl mit den falschen Werten gefüttert.
{Berechnung Winkel Gamma}
if bo1 and bo2 and bo3 = True then b2 := h*arccos(sqr(c)/(sqr(a)+sqr(b)-2*a*b)) else b2 := 0; wenn a=11 und b=22 und c=33 dann ist der Inhalt der Klammer =9 und das mag arccos nicht. Schau mal in die Hilfe. viel Spaß noch K-H |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Das Programm ist dazu gedacht mathematische Aufgaben zu lösen und da wird es garantiert keine ernstgemeinte Aufgabe geben, die diese Werte vorgibt, da die Werte kein Dreieck ergeben, sondern einen Strich...
|
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Die mathematische Grundlage dieser Formel ist der Cosinussatz: c²=a²+b²-2*a*b*cos(Gamma). Ich denke doch, dass ich richtig umgestellt habe...
edit: Ich hab falsch umgestellt. Es müsste sein: c²=a²+b²-2*a*b*Cos(Gamma) | /(2ab) c²/(2ab)=(a²+b²)/(2ab)+Cos(Gamma) | -(a²+b²)/(2ab) (c²-a²-b²)/(2ab)=Cos(Gamma) | arccos Gamma = arccos((c²-a²-b²)/(2ab)) So richtig? |
Re: Falls Variable(n) vorhanden mache das sonst mache dies
Ääh... ... nein! Aber DAS ist nun DEIN Problem. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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