AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Falls Variable(n) vorhanden mache das sonst mache dies
Thema durchsuchen
Ansicht
Themen-Optionen

Falls Variable(n) vorhanden mache das sonst mache dies

Ein Thema von thknub · begonnen am 26. Apr 2008 · letzter Beitrag vom 30. Apr 2008
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 01:28
@thknub: Ich würde dir eher mal die Einsteiger-Tutorials hier in der DP und vor allem auf www.dsdt.info empfehlen. Bevor du hier waghalsig versuchst, ein Problem auf solch unschöne Weise zu lösen, solltest du dich lieber erst einmal in Delphi einarbeiten.

Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
hesubat

Registriert seit: 26. Dez 2005
Ort: Görlitz
19 Beiträge
 
Delphi 7 Personal
 
#12

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 10:17
Hallo Fussball-Robby,

deine Worte:

ich würde dir eher mal die Einsteiger-Tutorials hier in der DP und vor allem auf www.dsdt.info empfehlen. Bevor du hier waghalsig versuchst, ein Problem auf solch unschöne Weise zu lösen, solltest du dich lieber erst einmal in Delphi einarbeiten.

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
Heinz Subat
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#13

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 10:23
Zitat von thknub:
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)
Was ist dann falsch daran, auf die Tutorials zu verweisen? Es ist zwar einzusehen, dass man gleich am Anfang die "eierlegende Wollmilchsau" coden möchte, aber ohne Grundlagen kann das nichts werden, das haben wir alle wohl einmal einsehen müssen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#14

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 11:03
Zitat von thknub:
Delphi-Quellcode:
...
  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);
...
wauuuuuuu, nur was soll es bedeuten???? hier mal ein paar tipps...
  • geb deinen variablen mal einen vernünftigen namen
  • trenne die eingabe, die ausgabe und die berechnung

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
  Mit Zitat antworten Zitat
thknub

Registriert seit: 25. Apr 2008
12 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 19:49
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.
  Mit Zitat antworten Zitat
thknub

Registriert seit: 25. Apr 2008
12 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 20:02
http://img228.imageshack.us/img228/7...vncbxvxmb1.jpg


Nicht die Version von oben, aber so sollte es in etwa aussehen
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#17

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 27. Apr 2008, 20:16
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 28. Apr 2008, 05:14
Ich würd's so angehen:
In einem Record wird ein Wert und die Info, ob der Wert überhaupt gesetzt wurde gespeichert:
Delphi-Quellcode:
TOptionalNumber = record
  value : Extended; // der Wert
  valid : Boolean; // zeigt an, ob der Wert gültig ist
end;
Es gibt 6 Eingabewerte:
Delphi-Quellcode:
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
jetzt kommt der Trick, wir verwenden eine Unterfunktion, um die 6 Variablen zu befüllen:
Delphi-Quellcode:
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;
Das Befüllen der 6 Variablen geht damit kurz und knackig:
Delphi-Quellcode:
  seite1 := GetOPtionalNumber(EditSeite1);
  ... // usw
Wenn du jetzt wissen willst, ob Winkel beta eingegeben wurde:
if beta.valid then ... Und jetzt kommt etwas Mathe ins Spiel. Es gibt folgende Fälle:
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.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 28. Apr 2008, 05:51
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
  Mit Zitat antworten Zitat
thknub

Registriert seit: 25. Apr 2008
12 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Falls Variable(n) vorhanden mache das sonst mache dies

  Alt 28. Apr 2008, 19:50
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz